Počítání dat bez PRTG, MRTG, ......
Napsal: 16 Feb 2006 16:17
Pro ty co chtejí počítat přenesená data a nechtějí používat MRTG a jiné grabery a chtejí si udělat svůj systém jsem vypotil PHP script.
<?php
// Script by RV-SOFT (c) 2006
// Zakaznik ( vhodne tyto data postovat z přihlašovací stránky a oid čist z SQL )
$zak="RV-SOFT-PC";
$oid_down="1.3.6.1.4.1.14988.1.1.2.1.1.8.4";
$oid_up="1.3.6.1.4.1.14988.1.1.2.1.1.9.4";
// Router vars
$router="10.30.0.110 public";
$ex_down="GetSNMP $router $oid_down";
$ex_up="GetSNMP $router $oid_up";
$mon=intval(date("m"));
$fn=$zak.".dat";
// předchozí data
if (file_exists($fn)):
$fp=fopen($fn,"r");
$down_save=intval(fgets($fp));
$up_save=intval(fgets($fp));
$down_old=intval(fgets($fp));
$up_old=intval(fgets($fp));
$mon_save=intval(fgets($fp));
fclose($fp);
else:
$down_save=0;
$up_save=0;
$down_old=0;
$up_old=0;
$mon_save=0;
endelse;
endif;
// Reset k prvnimu v mesici
if ($mon!=$mon_save):
$down_old=0;
$up_old=0;
$down_save=0;
$up_save=0;
endif;
// SNMP dotaz
$p=exec($ex_down,$a1,$a2);
$p1=exec($ex_up,$b1,$b2);
$ar=0;
$v=$a1[$ar];
$v2=$b1[$ar];
// Přepočet jednotek
$down=round($v/1000000);
$up=round($v2/1000000);
// kontrola resetu routeru
if ($down<$down_save):
$down_old=$down_old+$down_save;
$down_save=$down;
endif;
if ($up<$up_save):
$up_old=$up_old+$up_save;
$down_save=$up;
endif;
// Zápis hodnot na disk
$zapis=intval($down)."\n".intval($up)."\n".intval($down_old)."\n".intval($up_old)."\n".intval($mon);
$fp=fopen($fn,"w");
fputs($fp,$zapis);
fclose($fp);
// VARS pro obrazovku
$download=$down+$down_old." MB";
$upload=$up+$up_old." MB";
$all=$download+$upload." MB";
// end script by RV-SOFT (c) 2006
?>
<table border="1">
<tr>
<td> </td>
<td>Odeslané</td>
<td>Přijaté</td>
<td>Celkem</td>
<tr>
<td><?php echo $zak ?></td>
<td><?php echo $download ?></td>
<td><?php echo $upload ?></td>
<td><?php echo $all ?></td>
</tr>
</table>
Script samozřejmě má ošetřeno případné restarty routeru a reset hodnot k prvnímu v měsíci.
Pro načítání dat z routeru jsem použil externí příkazový řádek "GetSNMP.exe" jelikož sem měl trožku problém sehnat do PHP vhodnou knihovnu snmp_lib.dll
Externi prikaz staci nakopirovat do system32 a ke stažení je zde:
http://www.rv-soft.net/public/GetSNMP.zip
<?php
// Script by RV-SOFT (c) 2006
// Zakaznik ( vhodne tyto data postovat z přihlašovací stránky a oid čist z SQL )
$zak="RV-SOFT-PC";
$oid_down="1.3.6.1.4.1.14988.1.1.2.1.1.8.4";
$oid_up="1.3.6.1.4.1.14988.1.1.2.1.1.9.4";
// Router vars
$router="10.30.0.110 public";
$ex_down="GetSNMP $router $oid_down";
$ex_up="GetSNMP $router $oid_up";
$mon=intval(date("m"));
$fn=$zak.".dat";
// předchozí data
if (file_exists($fn)):
$fp=fopen($fn,"r");
$down_save=intval(fgets($fp));
$up_save=intval(fgets($fp));
$down_old=intval(fgets($fp));
$up_old=intval(fgets($fp));
$mon_save=intval(fgets($fp));
fclose($fp);
else:
$down_save=0;
$up_save=0;
$down_old=0;
$up_old=0;
$mon_save=0;
endelse;
endif;
// Reset k prvnimu v mesici
if ($mon!=$mon_save):
$down_old=0;
$up_old=0;
$down_save=0;
$up_save=0;
endif;
// SNMP dotaz
$p=exec($ex_down,$a1,$a2);
$p1=exec($ex_up,$b1,$b2);
$ar=0;
$v=$a1[$ar];
$v2=$b1[$ar];
// Přepočet jednotek
$down=round($v/1000000);
$up=round($v2/1000000);
// kontrola resetu routeru
if ($down<$down_save):
$down_old=$down_old+$down_save;
$down_save=$down;
endif;
if ($up<$up_save):
$up_old=$up_old+$up_save;
$down_save=$up;
endif;
// Zápis hodnot na disk
$zapis=intval($down)."\n".intval($up)."\n".intval($down_old)."\n".intval($up_old)."\n".intval($mon);
$fp=fopen($fn,"w");
fputs($fp,$zapis);
fclose($fp);
// VARS pro obrazovku
$download=$down+$down_old." MB";
$upload=$up+$up_old." MB";
$all=$download+$upload." MB";
// end script by RV-SOFT (c) 2006
?>
<table border="1">
<tr>
<td> </td>
<td>Odeslané</td>
<td>Přijaté</td>
<td>Celkem</td>
<tr>
<td><?php echo $zak ?></td>
<td><?php echo $download ?></td>
<td><?php echo $upload ?></td>
<td><?php echo $all ?></td>
</tr>
</table>
Script samozřejmě má ošetřeno případné restarty routeru a reset hodnot k prvnímu v měsíci.
Pro načítání dat z routeru jsem použil externí příkazový řádek "GetSNMP.exe" jelikož sem měl trožku problém sehnat do PHP vhodnou knihovnu snmp_lib.dll

Externi prikaz staci nakopirovat do system32 a ke stažení je zde:
http://www.rv-soft.net/public/GetSNMP.zip