Skip to content

Instantly share code, notes, and snippets.

@tene
Forked from treed/snmp_traffic.pl
Created April 8, 2009 22:56
Show Gist options
  • Save tene/92106 to your computer and use it in GitHub Desktop.
Save tene/92106 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl6
use Net::SNMP;
my $session = Net::SNMP->session(:hostname<serenity>, :community<public>);
die("No session!") unless $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));
warn "error: ", $session->error() unless defined($result);
return $result;
}
say "Querying the router.";
my $checks = 6;
my $time = 30;
my @results = gather {
for (1..^$checks) {
take [getTraffic(), time()];
sleep($time / ($checks - 1));
}
}
push(@results, [getTraffic(), time()]);
my @inRates;
my @outRates;
my $inDelta;
my $outDelta;
map {
my $cur = $^b[0];
my $prev = $^a[0];
my $dur = $^a[1] - $^b[1];
push(@inRates, (($cur<ifInOctets> - $prev<$ifInOctets>) * 8 / $dur));
push(@outRates, (($cur<$ifOutOctets> - $prev<$ifOutOctets>) * 8 / $dur));
}, @results Z @results[1..*];
printf("Downstream: %dbps\nUpstream: %dbps\n", ([+] @inRates)/+@inRates, ([+] @outRates)/+@outRates);
$session->close;
exit 0;
#!/usr/bin/perl -w
use strict;
use Net::SNMP;
use Data::Dumper;
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 applySlidingWindow($\@$) {
my $size = shift;
my $array = shift;
my $length = @$array;
my $block = shift;
for my $i (1 .. ($length - $size)) {
$block->(@$array[$i, $i + $size - 1]);
}
}
sub sum {
my $ret;
$ret += $_ for @_;
}
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;
print $#results;
applySlidingWindow(2, @results, sub {
my $cur = $_[1][0];
my $prev = $_[0][0];
my $dur = $_[1][1] - $_[0][1];
push(@inRates, (($cur->{ifInOctets} - $prev->{ifInOctets} * 8) / $dur));
push(@outRates, (($cur->{ifOutOctets} - $prev->{ifOutOctets} * 8) / $dur));
});
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