среда, 26 мая 2010 г.

Статистика интернет трафика за месяц iptables

Данный скрипт отображает статистику использования интернет трафика за мясяц, по дням и по пользователям.
Скрипт сбора информации с iptables описан здесь
Выглядет это так:


Код скрипта:


Выбор месяца и года
<?php
header("Content-Type: text/html; charset=utf-8");
?>
<form name="dates" method=get>
<select name=mesac value="Месяц">
<option value="01"> Январь
<option value="02"> Февраль
<option value="03"> Март
<option value="04"> Апрель
<option value="05"> Май
<option value="06"> Июнь
<option value="07"> Июль
<option value="08"> Август
<option value="09"> Сентябрь
<option value="10"> Октябрь
<option value="11"> Ноябрь
<option value="12"> Декабрь
</select>

<select name=god value="Год">
<option value="2010"> 2010
</select>
<input type="submit" value="Получить">
</form>

Создаем массив ассоциации ip & User
<?php
$ddat = date("m.Y");
$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"
);
$names[] = array_keys($ipname);

Проверяем, если месяц был выбран, строим статистику по нему, если нет, то строим статистику по текущему месяцу
if(!isset($_GET["mesac"])) { $mesdate = $ddat;}
else {$mesdate = $_GET["mesac"];}

print "<table width=300 border=1 bgcolor=#e0e0e0><caution><i>Статистика Траффика за $mesdate, в <b>Кб</b></i></caution><tr><th>День</th>";

Печатаем Имена Пользователей
for($kal=0; $kal<count($names[0]); $kal++)
{
$nam = $ipname[trim($names[0][$kal])];
print "<th>$nam</th>";
}
print "<th>Итого:</th></tr>";

Проходим по каждому дню, формируем названия файлов, проверяем их существования, ираем данные из каждого файла, и собираем их в массив.
for($i=0; $i<=26; $i++)
{
if($i<10) {$ii = "0".$i;} else {$ii = $i;}
if(!isset($_GET["den"])) { $filename = "stat".$ii.".".$ddat.".log"; $nowdate = $ddat;}
else {$filename = "stat".$ii.".".$_GET["mesac"].".".$_GET["god"].".log"; $nowdate = $_GET["den"].".".$_GET["mesac"].".".$_GET["god"];}

$urlfile = "/var/www/statlog/$filename";

if (@fopen($urlfile, "r")) {
print "<tr><td>".$i." </td>";

$file = fopen($urlfile,"r");
while(!feof($file)) {
$ff[$i][] = explode("\t", fgets($file));
}
fclose($file);
}
Проходим по созданному массиву и разгребаем кучу данных, подсвечиваем значение трафика, в зависимости от его размера.
$sum =0;
$cc = count($ff[$i])-11;

for($j=0; $j<count($ff[$i])-1; $j++)
{
$str=strval($ff[$i][$j][1]);
//$sum += $ff[$i][0];
if($ff[$i][$j][0] >= 100000 && $ff[$i][$j][0] < 200000) {$color = "#000000"; $bgcolor="#ff9999";}
elseif($ff[$i][$j][0] >=50000 && $ff[$i][$j][0] < 100000) {$color = "#000000"; $bgcolor="orange";}
elseif($ff[$i][$j][0] >=10000 && $ff[$i][$j][0] < 50000) {$color = "#000000"; $bgcolor="yellow";}
elseif($ff[$i][$j][0] >= 200000) {$color = "#000000"; $bgcolor = "red";}
elseif($ff[$i][$j][0] < 10000) {$color="#000000"; $bgcolor = "green";}
else {$color="blue";$bgcolor = "#e0e0e0";}

if($j >= $cc)
{
$sum += $ff[$i][$j][0];
print "<td bgcolor=".$bgcolor."><font color=$color>".round($ff[$i][$j][0],2)."</font></td>\n";

Считаем сумму трафика за месяц по каждому поьзователю отдельно
if($ff[$i][$j][1] == "192.168.0.31") {$sum1 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.30") {$sum2 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.32") {$sum3 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.20") {$sum4 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.9") {$sum5 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.5") {$sum6 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.27") {$sum7 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.24") {$sum8 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.3") {$sum9 +=$ff[$i][$j][0];}
elseif($ff[$i][$j][1] == "192.168.0.21") {$sum10 +=$ff[$i][$j][0];}
else {$sum11 +=$ff[$i][$j][0];}
}
}
Выводим окончательные итоги расчетов, общая сумма трафика за месяц, сумма трафика за месяц по каждому пользователю, процент скаченного трафика пользователем.
if (@fopen($urlfile, "r")) {
print "<th>$sum</th></tr>";
}
print "</tr>";
$allsum += $sum;
}

print "<tr><th>Итого:</th><th>$sum1</th><th>$sum2</th><th>$sum3</th><th>$sum4</th><th>$sum5</th><th>$sum6</th><th>$sum7</th><th>$sum8</th><th>$sum9</th><th>$sum10</th><th>".round($allsum)."</th></tr>";
$x1 = round(($sum1*100)/$allsum,2);
$x2 = round(($sum2*100)/$allsum,2);
$x3 = round(($sum3*100)/$allsum,2);
$x4 = round(($sum4*100)/$allsum,2);
$x5 = round(($sum5*100)/$allsum,2);
$x6 = round(($sum6*100)/$allsum,2);
$x7 = round(($sum7*100)/$allsum,2);
$x8 = round(($sum8*100)/$allsum,2);
$x9 = round(($sum9*100)/$allsum,2);
$x10 = round(($sum10*100)/$allsum,2);

print "<tr><th>%</th><th>$x1 $sum[0]</th><th>$x2</th><th>$x3</th><th>$x4</th><th>$x5</th><th>$x6</th><th>$x7</th><th>$x8</th><th>$x9</th><th>$x10</th><th>100%</th></tr>";

print "</table>";
print "Итого за месяц: <font size=+1>".round($allsum/1024,2) ."</font> Мб";
?>

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