Stránka 1 z 1

Počítání dat bez PRTG, MRTG, ......

Napsal: 16 Feb 2006 16:17
od rv-soft
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>&nbsp;</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

Napsal: 16 Feb 2006 19:20
od Jardas
Takže pro Wokna...
i když mám pocit že u Linucha by to neměl být problém, jen se použije externě něco jiného (nejsem linuxák).

Re: Počítání dat bez PRTG, MRTG, ......

Napsal: 16 Feb 2006 21:58
od Janca
rv-soft píše:sem měl trožku problém sehnat do PHP vhodnou knihovnu snmp_lib.dll :-)


Dík za pomoc pokud chceš tu knihovnu, tak si ji můžeš stáhnout:

Win:
http://joelp.wz.cz/lib_php/php_snmp.dll

Lin:
http://joelp.wz.cz/lib_php/snmp.tgz

Je to nejnovější knihovna. Ale ještě jsem ji neskoušel ;-)

Napsal: 16 Feb 2006 22:34
od rv-soft
Tak tady sem ten scriptik upravil pro SQL ve ktere si vytvorite DB internet-data a tabuli users s polozkami jmeno (jmeno) ,heslo (heslo), jmeno zakaznika (zakaznik), oid download (oid_down), oid upload (oid_up) a pobezi to. A budou se zobrazovat data i za minuly mesic.

<?php

// Script by RV-SOFT (c) 2006 ver. SQL


// Zakaznik nacteny dle jmena a hesla z SQL


$conn = mysql_connect("localhost", "jmeno", "heslo");
mysql_select_db("internet-data");
mysql_query("SET NAMES 'cp1250'", $conn);
$sql = "SELECT * FROM users WHERE jmeno = '".$name."'";
$dotaz = mysql_query($sql);
$row = mysql_fetch_array($dotaz);
mysql_close($conn);

// Kontrola přihlášení

if ($row['jmeno']==$name && $row['heslo']==$pass && $row['jmeno']):

$zak=$row['zakaznik'];
$oid_down=$row['oid_down'];
$oid_up=$row['oid_up'];
$fn=$row['jmeno'].".dat";
$fna=$row['jmeno'].".bak";

// vars

$router="10.30.0.110 public";
$ex_down="GetSNMP $router $oid_down";
$ex_up="GetSNMP $router $oid_up";
$mon=intval(date("m"));
$dt[1]="leden";
$dt[2]="únor";
$dt[3]="březen";
$dt[4]="duben";
$dt[5]="květen";
$dt[6]="červen";
$dt[7]="červenec";
$dt[8]="srpen";
$dt[9]="září";
$dt[10]="říjen";
$dt[11]="listopad";
$dt[12]="prosinec";


// Nacteni archivu

if (file_exists($fna)):
$fp=fopen($fna,"r");
$down_archiv=intval(fgets($fp));
$up_archiv=intval(fgets($fp));
$all_archiv=intval(fgets($fp));
$mon_archiv=intval(fgets($fp));
fclose($fp);
else:
$down_archiv=0;
$up_archiv=0;
$all_archiv=0;
$mon_archiv=$mon-1;
if ($mon_archiv=="0") $mon_archiv=12;
endelse;
endif;


// 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=$mon;
endelse;
endif;

// Reset k prvnimu v mesici

if ($mon!=$mon_save):
$down_archiv=intval($down_old+$down_save);
$up_archiv=intval($up_old+$up_save);
$all_archiv=intval($down_archiv+$up_archiv);
$mon_archiv=$mon_save;
$down_old=0;
$up_old=0;
$down_save=0;
$up_save=0;
$fp=fopen($fna,"w");
$archiv=$down_archiv."\n".$up_archiv."\n".$all_archiv."\n".$mon_archiv;
fputs($fp,$archiv);
fclose($fp);
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


?>
<html>

<body bgcolor="#F5F5F5">
<table border="1">
<td>
<b><font size="1" face="verdana" color="blue">&nbsp;&nbsp;Vaše přenesená data&nbsp;&nbsp;</font></b>
<td>
</table>
<br>
<table border="1">
<tr>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;<?php echo $dt[$mon_archiv] ?>&nbsp;&nbsp;&nbsp;</td>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;Odeslané&nbsp;&nbsp;&nbsp;</td>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;Přijaté&nbsp;&nbsp;&nbsp;</td>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;Celkem&nbsp;&nbsp;&nbsp;</td>
<tr>
<td align="center">&nbsp;&nbsp;<?php echo $zak ?>&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;<?php echo $down_archiv ?>&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;<?php echo $up_archiv ?>&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;<?php echo $all_archiv ?>&nbsp;&nbsp;</td>
</tr>
</table>
<br>

<table border="1">
<tr>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;<?php echo $dt[$mon] ?>&nbsp;&nbsp;&nbsp;</td>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;Odeslané&nbsp;&nbsp;&nbsp;</td>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;Přijaté&nbsp;&nbsp;&nbsp;</td>
<td align="center"><b><font color="#5555aa">&nbsp;&nbsp;&nbsp;Celkem&nbsp;&nbsp;&nbsp;</td>
<tr>
<td align="center">&nbsp;&nbsp;<?php echo $zak ?>&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;<?php echo $download ?>&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;<?php echo $upload ?>&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;<?php echo $all ?>&nbsp;&nbsp;</td>
</tr>
</table>
<br>
<input type="button" value="Úvodní stránka" onClick="location.replace('../uvod/uvod.html');">

<?php
else:
?>

<html>
<body bgcolor="#F5F5F5">

<b><font size="1" face="verdana">&nbsp;Neplatné přihlášení.</font></b><br>
<br>
<input type="button" value=" Zpět " onClick="location.replace('index.php');">


<?php
endelse;
endif;
?>

Do tohoto scriptu staci z html stranky z formularem postnout $name a $pass.

:-)

Napsal: 17 Feb 2006 00:05
od rv-soft
Jardas píše:Takže pro Wokna...
i když mám pocit že u Linucha by to neměl být problém, jen se použije externě něco jiného (nejsem linuxák).


Tak je to PHP a to bude behat na kazdym OS. Ono je tam jedno z ceho GETnes data z routeru.

Napsal: 07 Mar 2006 13:31
od birkof
Jardas píše:Takže pro Wokna...
i když mám pocit že u Linucha by to neměl být problém, jen se použije externě něco jiného (nejsem linuxák).


Je to easy a není to závislé na OS. Podařilo se mi naprogramovat jednoduchý monitor sítě postanený na SNMTP funkcích z PHP viz:

snmp_get_quick_print -- Fetches the current value of the UCD library's quick_print setting
snmp_get_valueretrieval -- Return the method how the SNMP values will be returned
snmp_read_mib -- Reads and parses a MIB file into the active MIB tree
snmp_set_enum_print -- Return all values that are enums with their enum value instead of the raw integer
snmp_set_oid_numeric_print -- Return all objects including their respective object id within the specified one
snmp_set_quick_print -- Set the value of quick_print within the UCD SNMP library
snmp_set_valueretrieval -- Specify the method how the SNMP values will be returned
snmpget -- Fetch an SNMP object
snmpgetnext -- Fetch a SNMP object
snmprealwalk -- Return all objects including their respective object ID within the specified one
snmpset -- Set an SNMP object
snmpwalk -- Fetch all the SNMP objects from an agent
snmpwalkoid -- Query for a tree of information about a network entity

Re: Počítání dat bez PRTG, MRTG, ......

Napsal: 29 Jan 2008 18:29
od Jenya
Zdravim, myslim, ze se vyznam v sitich, ale jakehokoliv programovani jsem byl doposud usetren. Neporadil by mi nekdo kam tento script umistit, jak vytvorit tu zahadnou SQL dabazi, nebo nejlepe fungovat bez ni, zkratka jak na to, aby to zacalo pocitat.

Predem diky

Re: Počítání dat bez PRTG, MRTG, ......

Napsal: 02 Feb 2008 23:15
od kappi
Zdravim, měl bych dotaz, jakými způsoby lze zjistit oid? takle bych je zřejmě musel do databáze psát ručně nebo ne?

Re: Počítání dat bez PRTG, MRTG, ......

Napsal: 06 Feb 2008 15:18
od Nick_xx
kappi píše:Zdravim, měl bych dotaz, jakými způsoby lze zjistit oid? takle bych je zřejmě musel do databáze psát ručně nebo ne?

V konzoli napr.:

Kód: Vybrat vše

queue simple pr oid



Jenya píše:Zdravim, myslim, ze se vyznam v sitich, ale jakehokoliv programovani jsem byl doposud usetren. Neporadil by mi nekdo kam tento script umistit, jak vytvorit tu zahadnou SQL dabazi, nebo nejlepe fungovat bez ni, zkratka jak na to, aby to zacalo pocitat.

Predem diky

Musis si nainstalovat server: http://www.wampserver.com/en/