diff options
Diffstat (limited to 'examples/historical/tools/ping-graph.pl')
-rwxr-xr-x | examples/historical/tools/ping-graph.pl | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/examples/historical/tools/ping-graph.pl b/examples/historical/tools/ping-graph.pl new file mode 100755 index 0000000..2cd6996 --- /dev/null +++ b/examples/historical/tools/ping-graph.pl @@ -0,0 +1,62 @@ +#! /usr/bin/perl + +# Makes latency-against-time graphs, one per switch. + +use warnings; +use strict; +use DBI; +use lib '../include'; +use nms; + +BEGIN { + require "../include/config.pm"; + eval { + require "../include/config.local.pm"; + }; +} + +my $dbh = db_connect(); +my $switches = $dbh->selectall_hashref('SELECT sysname,switch FROM switches ORDER BY sysname', 'sysname'); +if (1) { + my %switchfds = (); + while (my ($sysname, $switch) = each %$switches) { + print "$sysname -> $switch->{switch}\n"; + open my $fh, ">", "$sysname.txt" + or die "$sysname.txt: $!"; + $switchfds{$switch->{'switch'}} = $fh; + } + + my $q = $dbh->prepare('SELECT switch,EXTRACT(EPOCH FROM updated),latency_ms FROM ping'); + $q->execute; + + my $i = 0; + while (my $ref = $q->fetchrow_arrayref) { + next if (!defined($ref->[2])); + my $fh = $switchfds{$ref->[0]}; + next if (!defined($fh)); + print $fh $ref->[1], " ", $ref->[2], "\n"; + if (++$i % 1000000 == 0) { + printf "%dM records...\n", int($i / 1000000); + } + } + + while (my ($sysname, $switch) = each %$switches) { + close $switchfds{$switch->{'switch'}}; + } +} + +while (my ($sysname, $switch) = each %$switches) { + print "$sysname -> $switch->{switch}\n"; + open my $gnuplot, "|-", "gnuplot" + or die "gnuplot: $!"; + print $gnuplot <<"EOF"; +set timefmt "%s" +set xdata time +set format x "%d/%m %H:%M" +set term png size 1280,720 +set output '$sysname.png' +set yrange [0:200] +plot "$sysname.txt" using (int(\$1)):2 ps 0.1 +EOF + close $gnuplot; +} |