#!/usr/bin/perl -w my $etime=0; my $eth0in=""; my $eth0out=""; my $lo=""; my $petime=0; my $peth0in=0; my $peth0out=0; my $plo=0; my $tmp=0; my $i=0; my $n=1; #NOTE!!! snmp counters reset at 4,294,967,295! for (;;) { $i=$i+1; $etime=time; system("snmpwalk localhost public interfaces.ifTable.ifEntry.ifInOctets.3 >/tmp/eth0in"); system("snmpwalk localhost public interfaces.ifTable.ifEntry.ifOutOctets.3 >/tmp/eth0out"); system("snmpwalk localhost public interfaces.ifTable.ifEntry.ifOutOctets.1 >/tmp/loout"); open(fileIN,"/tmp/eth0in") or die("Cannot open /tmp/eth0in: $!"); my @fileData = ; close(fileIN); foreach $line (@fileData) { chomp($line); $eth0in=substr($line,54,10); } open(fileIN,"/tmp/eth0out") or die("Cannot open /tmp/eth0out: $!"); @fileData = ; close(fileIN); foreach $line (@fileData) { chomp($line); $eth0out=substr($line,54,10); } open(fileIN,"/tmp/loout") or die("Cannot open /tmp/loout: $!"); @fileData = ; close(fileIN); foreach $line (@fileData) { chomp($line); $lo=substr($line,54,10); } $eth0out = 0 + $eth0out; $eth0in = 0 + $eth0in; $lo = 0 + $lo; #time $tmp=$etime; $etime=$etime-$petime; $petime=$tmp; #eth0in if ($eth0in<$peth0in) { #the counter was reset $tmp=$eth0in; $eth0in=$eth0in + 4294967295; $eth0in=$eth0in-$peth0in; $eth0in=$eth0in/$etime; $eth0in=$eth0in/8; #bytes per second $peth0in=$tmp; } else { $tmp=$eth0in; $eth0in=$eth0in-$peth0in; $peth0in=$tmp; $eth0in=$eth0in/$etime; $eth0in=$eth0in/8; #bytes per second } if ($eth0out<$peth0out) { #the counter was reset $tmp=$eth0out; $eth0out=$eth0out + 4294967295; $eth0out=$eth0out-$peth0out; $eth0out=$eth0out/$etime; $eth0out=$eth0out/8; #bytes per second $peth0out=$tmp; } else { $tmp=$eth0out; $eth0out=$eth0out-$peth0out; $peth0out=$tmp; $eth0out=$eth0out/$etime; $eth0out=$eth0out/8; #bytes per second } #lo if ($lo<$plo) { #the counter was reset $tmp=$lo; $lo=$lo + 4294967295; $lo=$lo-$plo; $lo=$lo/$etime; $lo=$lo/8; #bytes per second $plo=$tmp; } else { $tmp=$lo; $lo=$lo-$plo; $plo=$tmp; $lo=$lo/$etime; $lo=$lo/8; #bytes per second } open(fileOUT, ">int.php") or dienice("Can't open log.txt for writing: $!"); print fileOUT "\n"; close(fileOUT); $etime=time; if ($n!=1) {system("rrdupdate sysgraphint.rrd $etime:$eth0in:$eth0out:$lo");} $n=$n+1; sleep(30); }