aboutsummaryrefslogtreecommitdiffstats
path: root/examples/historical/tools/ping-graph.pl
blob: 2cd6996babd5695bc7e02d224105ab338630b37e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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;
}