Skip to content

Instantly share code, notes, and snippets.

@tene
Created April 8, 2009 18:05
Show Gist options
  • Save tene/91895 to your computer and use it in GitHub Desktop.
Save tene/91895 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl -w
use strict;
use Net::SNMP;
my $session = Net::SNMP->session (-hostname => "serenity", -community => "public");
die("No session!\n") if (!defined($session));
my $ifDescr = "1.3.6.1.2.1.2.2.1.2.1";
my $ifInOctets = "1.3.6.1.2.1.2.2.1.10.1";
my $ifOutOctets = "1.3.6.1.2.1.2.2.1.16.1";
sub getTraffic {
my $result = $session->get_request(-varbindlist => [$ifDescr, $ifInOctets, $ifOutOctets]);
if (!defined($result)) { print "error: ", $session->error() };
return $result;
}
sub sum {
my $ret;
$ret += $_ for @_;
return $ret;
}
print "Querying the router.\n";
my @results;
my $checks = 6;
my $time = 30;
for (1 .. ($checks - 1)) {
push(@results, [getTraffic(), time()]);
sleep($time / ($checks - 1));
}
push(@results, [getTraffic(), time()]);
my @inRates;
my @outRates;
my $inDelta;
my $outDelta;
for my $i (1 .. $#results) {
my ($prev, $item) = map {$_=>[0]} @results[$i-1, $i];
my $time = $results[$i]->[1] - $results[$i - 1]->[1];
$inDelta = $item->{$ifInOctets} - $prev->{$ifInOctets};
$outDelta = $item->{$ifOutOctets} - $prev->{$ifOutOctets};
$inDelta *= 8;
$outDelta *= 8;
push(@inRates, $inDelta / $time);
push(@outRates, $outDelta / $time);
}
printf("Downstream: %dbps\nUpstream: %dbps\n", sum(@inRates)/@inRates, sum(@outRates)/@outRates);
$session->close;
exit 0;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment