freebsd
[Início] [Todas as Listas]

Re: [FUG-BR] Controle de Banda [OFF-TOPIC]

From: "Tiago N. Sampaio" <mega@xxxxxxxxxxx>
To: "Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)" <freebsd@xxxxxxxxxx>
Subject: Re: [FUG-BR] Controle de Banda [OFF-TOPIC]
Date: Thu, 31 May 2007 11:03:03 -0300
Eu faço isso, fiz um script em php que pega o uso atual da banda via snmp, tira a media com o minuto anterior
e aumenta ou diminui a banda...
ele na verdade grava em arquivos, e depois eu fiz um script de firewall ler esse arquivos...
vou colocar o script aqui, pq ele eh pequeno mesmo:


#!/usr/local/bin/php -f
<?

require("adodb/adodb.inc.php");

$dbhost="seudbpgsql";
$dbpass="senha";
$dbuser="user";
$dbbase="base";
$db = NewADOConnection('postgres8');
$db->Pconnect($dbhost,$dbuser,$dbpass,$dbbase) or die("erro");

//Essa variavel define a taxa de amostragem
$tempo = 60;

//Soh pra zerar...
$anterior="";
$atual="";

// valores que vc quer que a sua banda fique, pois ele vai tentar manter entre os dois sempre...
//em BPS
$tetomaximo="11800000";
$tetominimp="11200000";

//percentual anterior
$percentual=0.5;
//toda a variação é nesses valores, que vai de 0% a 100%
$velocidades = array(50,80,100,150,210,50,374,648,90,200,500);
//o que estiver aqui eh garantido
$velocidades_garantidas = array(100,150,200,300,390,50,650,1400,60,100,100);
//Arquivos pra gravar as velocidades
$arquivos = array("V150","V230","V300","V450","V600","V128","V1024","V2048","V150N","V300N","V600N");

while(TRUE){
       $anterior=$atual;
       $atual = snmpget("ipdorouter","comunidade","ifOutOctets.1");
       $atual = str_replace("Counter32: ","",$atual);
       sleep($tempo);

       if(!$anterior || !$atual) continue;

       $media = round((($atual - $anterior)/$tempo)*8);
       else if($media > $tetomaximo) mudar_percentual(0);
       else if($media < $tetominimo) mudar_percentual(1);
       else continue;
       system("/bin/sh /etc/firewall/pipes.sh");
}


function mudar_percentual($status){
       GLOBAL $percentual;
       GLOBAL $velocidades;
       GLOBAL $velocidades_garantidas;
       GLOBAL $arquivos;
       GLOBAL $db;

       if($status == 1){
               if($percentual > 0.9) return;
               $percentual+=0.1;
       }else{
               if($percentual < 0.1) return;
               $percentual-=0.1;
       }

       for($i=0;$i<count($velocidades);$i++){
$velocidade = round($velocidades_garantidas[$i]+($velocidades[$i]*$percentual)); $db->Execute("UPDATE velocidades SET velocidade = '$velocidade' WHERE plano = '".$arquivos[$i]."'"); if(!($arquivo=fopen("/etc/firewall/velocidades/".$arquivos[$i],"w"))){
                       continue;
               }
               fprintf($arquivo,$velocidade);
               fclose($arquivo);
       }
}

?>

É algo bem simples e tosco, que grava a velocidade no banco apenas pra consulta, pro gerente saber a quantas andam os planos
dos clientes...
ai vc adapta ele conforme vc precisar...

E antes que alguem me fale, Pq naum usa pf, jah usou um pf com mais de 2000 queues? eu tentei colocar, mas pra medir a velocidade de todo mundo aqui, precisaria de no minimo uma maquina quadriprocessada...

Abraços


ThOLOko wrote:
Galerinha BSD,

Queria desenvolver algum tipo de controle de banda em IPFW que seja
dinamico... por exemplo,,, criar grupos de bandas conforme o uso do pessoal
para nao disperdiçar banda...

Alguem tem alguma ideia??? Gostaria de usar PHP+MySQL contendo os clientes e
suas respectivas bandas...

PF resolveria??

Abbraços...



<Anterior na Thread] Thread Atual [Próximo na Thread>