четверг, 20 мая 2010 г.

Статистика iptables (Продолжение)

Для мониторинга трафика каждые 15 минут, выводится общий накопленный трафик за день, и разница, на сколько увиличелся объем скаченного трафика за каждые 15 минут.
 Код файла статистики предыдущего сообщения, в котором выводится накопленный трафик за весь день.  (форму для выбора дня/месяца/года я не стал копировать, её можно взять в предыдущем сообщении)

Выглядет это так:



Проверка, если была выбрана дата, тоформируем назвние файла статистики изходя из этой даты, либо, если дата не выбрана, формируем статистику за сегодняшний день
&lt?php$ddat = date("d.m.Y");
if(!isset($_GET["den"])) { $filename = "stat".$ddat.".log"; $nowdate = $ddat;}
else {$filename = "stat".$_GET["den"].".".$_GET["mesac"].".".$_GET["god"].".log"; $nowdate = $_GET["den"].".".$_GET["mesac"].".".$_GET["god"];}

Открываем файл статистики
$file = fopen("/var/www/statlog/$filename","r");
print "&lttable width=300 border=1 bgcolor=#e0e0e0>&ltcaution>&lti>Статистика трафика за $nowdate&lt/i>&lt/caution>&lttr>&ltth>Кб&lt/th>&ltth>Ip&lt/th>&ltth>Имя&lt/th>&lt/tr>";

Читаем из файл все данные, и помещаем их в массив
while(!feof($file)) {
$ff[] = explode("\t", fgets($file));
}

Массив соответствия пользователей и ip адресов
$ipname = Array(
 "192.168.0.31" => "User1",
 "192.168.0.30" => "User2",
 "192.168.0.32" => "User3",
 "192.168.0.20" => "User4",
 "192.168.0.9" => "User5",
 "192.168.0.5" => "User6",
 "192.168.0.27" => "User7",
 "192.168.0.24" => "User8",
 "192.168.0.3" => "User9",
 "192.168.0.21" => "User10"
);

Для удобства, расскрашиваем трафик разными цветами, в зависимости от объема.
$cc = count($ff)-11;
for($i=0; $i&ltcount($ff)-1; $i++){

$str=strval($ff[$i][1]);
if($ff[$i][0] >= 100000 && $ff[$i][0] &lt200000) {$color = "red";}
elseif($ff[$i][0] >=50000 && $ff[$i][0] &lt100000) {$color = "orange";}
elseif($ff[$i][0] >=10000 && $ff[$i][0] &lt50000) {$color = "yellow";}
elseif($ff[$i][0] >= 200000) {$color = "#cb0000";}
else {$color="green";}

Выводим информацию на экран
if($i >= $cc)
{
$nam = $ipname[trim($ff[$i][1])];
$sum += $ff[$i][0];
 print "&lttr>&lttd>&ltfont color=$color>".$ff[$i][0]."&lt/font>&lt/td>&lttd>".$ff[$i][1]."&lt/td>&lttd>".$nam."&lt/td>&lt/tr>\n";
}
}
print "&lt/table>";
print "Всего: ".$sum." Кб";
Выбираем все ip адреса из массива ipname
print "&lttable border=1>";
$keymass = array_keys($ipname);

Печатаем диапозоны времени и ip адреса - заголовки таблицы
print "&lttr>&lttd>Ip&lt/td>";

for($f2=0;$f2&ltcount($ff)-1; $f2+=10)
{
print "&ltth>".$ff[$f2][2]."&lt/th>";
}
print "&lt/tr>";

for($key=0; $key&ltcount($keymass); $key++)
{
 print "&lttr>&ltth>".$ff[$key][1]."&lt/th>";

Выводим статистику, накопленный тарфик, и разницу объема трафика за промежуток времени. Трафик также расскрашен в зависимости от объема, для наглядности.
for($f=0; $f&ltcount($ff); $f++)
{
if($ff[$f][1] == $keymass[$key])
{
$s_um = round($ff[$f][0]-$ff[$f-10][0],2);
if($s_um < 1000) {$colors = "green";}
elseif($s_um >= 1000 && $s_um &lt2000 ) {$colors = "blue";}
elseif($s_um >= 2000 && $s_um&lt 5000) {$colors = "orange";}
elseif($s_um >= 5000) {$colors = "red";}
else {$colors = "black";}
  print "&lttd>".$ff[$f][0]."&ltbr>&ltfont color=".$colors." size=-1>+".$s_um."&lt/font>&lt/td>";
}
}
 print "&lt/tr>";
}
print "&lt/table>";

Комментариев нет: