]> mj.ucw.cz Git - netgrind.git/blob - post/graph-hist-flowcount
Added various graphing and filtering utilities.
[netgrind.git] / post / graph-hist-flowcount
1 #!/usr/bin/perl
2 # Draw graphs of TCP flow statistics from netgrind histograms
3 # (c) 2003 Martin Mares <mj@ucw.cz>, GPL'ed
4
5 use strict;
6 use warnings;
7 use POSIX;
8
9 my $datafile = "gp.tmp";
10 open D, ">$datafile" or die;
11
12 my @colnames = ();
13 my $total = 0;
14 my @ewma = ( 0 );
15 my $ew = 0.9;
16 my $eww = 1-$ew;
17 my $w = 60;
18 while (<>) {
19         chomp;
20         if (/^#/) {
21                 s/^#\s+//;
22                 @colnames = split /\t/;
23         } else {
24                 my $i = 0;
25                 s/\([^)]*\)//g;
26                 my %row = map { $colnames[$i++] => $_ } split /\t/;
27                 my $time = POSIX::strftime("%d-%m-%Y %H:%M:%S", localtime $row{'time'});
28                 $total += $row{'FlowsTotal'};
29                 $total -= $row{'FlowsClosed'} + $row{'FlowsReset'} + $row{'FlowsTimeout'} + $row{'FlowsBad'} + $row{'FlowsDoomsday'};
30                 my @r = (
31                         $total
32                 );
33                 print D "$time";
34                 for (my $i=0; $i<=$#r; $i++) {
35                         $ewma[$i] = $ew*$ewma[$i] + $eww*$r[$i];
36                         print D "\t", $ewma[$i];
37                 }
38                 print D "\n";
39         }
40 }
41
42 close D;
43 open GP, "|gnuplot" or die;
44 print GP <<EOF
45 set terminal png
46 set grid
47 set style data lines
48 set title "TCP flows: Total number"
49 set xlabel "Time"
50 set ylabel "Flows [EWMA $ew]"
51 set xdata time
52 set timefmt "%d-%m-%Y %H:%M:%S"
53 set format x "%d/%m\\n%H:%M"
54 #set xtics 86400
55 set mxtics 3600
56 plot    "$datafile" using 1:3 title "Total flows"
57 EOF
58 ;
59 close GP;