summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2005-04-11 19:09:04 +0000
committerPeter Palfrader <peter@palfrader.org>2005-04-11 19:09:04 +0000
commit2058e537d4c3efced8cf651f892c504d743c84dd (patch)
treee2fd78e8bf00afef3d647907bd22a4415ed574ed /bin
parent4b2c75bbbf59f9b2cf9c521dd53932c156a32fa8 (diff)
Add load-graphs
Diffstat (limited to 'bin')
-rwxr-xr-xbin/load-graphs138
1 files changed, 138 insertions, 0 deletions
diff --git a/bin/load-graphs b/bin/load-graphs
new file mode 100755
index 0000000..1177a55
--- /dev/null
+++ b/bin/load-graphs
@@ -0,0 +1,138 @@
+#!/usr/bin/perl -w
+
+use strict;
+use RRDs;
+use English;
+use BER;
+
+my $RRDPATH = shift @ARGV;
+die ("Usage: $PROGRAM_NAME <rrd dir>\n") if (!defined $RRDPATH || scalar @ARGV > 0);
+
+my $HOSTNAME = `hostname`;
+
+
+my @MONTH = qw{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec};
+#my $IMG_URL = 'http://images.noreply.org/load/';
+my $IMG_URL = '';
+my $NOW = time;
+my $GMTIME = gmtime($NOW);
+my $START_AT = $NOW-10*30*24*3600;
+
+opendir(D,$RRDPATH) or die ("Cannot opendir $RRDPATH: $!\n");
+my @SOURCES = sort {$a cmp $b} grep { /\.rrd$/ && ! /\.pool\.rrd$/ } readdir(D);
+@SOURCES = grep {
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks) = stat($RRDPATH.'/'.$_);
+ $mtime >= $START_AT;
+ } @SOURCES;
+closedir(D);
+
+my @params = qw{result/total.png};
+push @params, sprintf('-s %s', $START_AT);
+#push @params, sprintf('-e %s', $NOW- 2*24*3600);
+push @params, sprintf('-t %s', "Network Load");
+push @params, sprintf('-v %s', "Messages per day");
+push @params, sprintf('-w %d', 600);
+push @params, sprintf('-h %d', 400);
+
+my @COLOR = qw{
+000000
+0000FF
+00FF00
+00FFFF
+FF0000
+FF00FF
+FFFF00
+};
+my $coli = 0;
+my $first = 1;
+
+my $body;
+my $index;
+for my $source (@SOURCES) {
+ my $def = $source;
+ $source = $RRDPATH.'/'.$source;
+ $def =~ s/\.rrd$//;
+ my $cdef = 'c_'.$def;
+ my $color = $COLOR[ ($coli++) % (scalar @COLOR) ];
+ my $label = $def;
+
+ push @params , sprintf('DEF:%s=%s:%s:%s', $def , $source, 'total', 'AVERAGE');
+ push @params , sprintf('CDEF:%s=%s' , $cdef , $def);
+ push @params , sprintf('%s:%s#%s:%s' , $first ? 'AREA' : 'STACK' , $cdef , $color, $label );
+ $first = 0;
+
+ my @this;
+ push @this, sprintf('result/%s.png', $def);
+ push @this, sprintf('-s %s', $START_AT);
+ push @this, sprintf('-t %s', "$def Load");
+ push @this, sprintf('-v %s', "Messages per day");
+
+ push @this , sprintf('DEF:%s=%s:%s:%s', 't2' , $source, 'typeII', 'AVERAGE');
+ push @this , sprintf('CDEF:%s=%s' , 'ct2' , 't2');
+ push @this , sprintf('%s:%s#%s:%s' , 'AREA' , 'ct2' , '00FF00', 'Type II' );
+
+ push @this , sprintf('DEF:%s=%s:%s:%s', 't1' , $source, 'typeI', 'AVERAGE');
+ push @this , sprintf('CDEF:%s=%s' , 'ct1' , 't1');
+ push @this , sprintf('%s:%s#%s:%s' , 'STACK' , 'ct1' , '0000FF', 'Type I' );
+
+ push @this , sprintf('DEF:%s=%s:%s:%s', 'total' , $source, 'total', 'AVERAGE');
+ push @this , sprintf('CDEF:%s=%s' , 'ctotal' , 'total');
+ push @this , sprintf('%s:%s#%s:%s' , 'LINE3' , 'ctotal' , '000000', 'total' );
+
+ push @this , sprintf('CDEF:%s=total,0,*,%s,+' , 'topline' , '20000');
+ push @this , sprintf('CDEF:%s=total,0,*,%s,+' , 'zeroline' , '0');
+ push @this , sprintf('%s:%s' , 'LINE1' , 'topline' );
+ push @this , sprintf('%s:%s' , 'LINE1' , 'zeroline' );
+
+ my ($averages,$xsize,$ysize) = RRDs::graph @this;
+ warn RRDs::error if RRDs::error;
+
+ my $poolSize = '';
+ my $sourcePoolSize = $RRDPATH.'/'.$def.'.pool.rrd';
+ if ( -e $sourcePoolSize ) {
+ my $that;
+
+ my @that;
+ push @that, sprintf('result/%s.pool.png', $def);
+ push @that, sprintf('-s %s', $START_AT);
+ push @that, sprintf('-t %s', "$def Pool Size");
+ push @that, sprintf('-v %s', "Messages in Pool");
+
+ push @that , sprintf('DEF:%s=%s:%s:%s', 'poolsizeA' , $sourcePoolSize, 'poolSize', 'AVERAGE');
+ push @that , sprintf('CDEF:%s=%s' , 'cpoolsizeA' , 'poolsizeA');
+ push @that , sprintf('%s:%s#%s:%s' , 'LINE3' , 'poolsizeA' , '0000FF', 'Pool Size' );
+
+ push @that , sprintf('CDEF:%s=poolsizeA,0,*,%s,+' , 'topline' , '400');
+ push @that , sprintf('CDEF:%s=poolsizeA,0,*,%s,+' , 'zeroline' , '0');
+ push @that , sprintf('%s:%s' , 'LINE1' , 'topline' );
+ push @that , sprintf('%s:%s' , 'LINE1' , 'zeroline' );
+ my ($PSaverages,$PSxsize,$PSysize) = RRDs::graph @that;
+ warn RRDs::error if RRDs::error;
+
+ $poolSize = " <img width=\"$PSxsize\" height=\"$PSysize\" alt=\"Pool Size for $def\" src=\"$IMG_URL$def.pool.png\">";
+ }
+
+ $body .= "<h2><a name=\"$def\">$def</a></h2><p><a href=\"#_top\">top</a> | <a href=\"/latency/$def.html\">latency</a><p><img width=\"$xsize\" height=\"$ysize\" alt=\"Load for $def\" src=\"$IMG_URL$def.png\">$poolSize</p>\n";
+ $index .= "<li><a href=\"#$def\">$def</a></li>\n";
+}
+my ($averages,$xsize,$ysize) = RRDs::graph @params;
+die RRDs::error if RRDs::error;
+
+my $html = "<html><head><title>Network Load</title></head><body>";
+$html .= "<h1><a name=\"_top\">Network Load</a></h1>";
+$html .= "<a href=\"../\">..</a><br>\n";
+$html .= "<p><img width=\"$xsize\" height=\"$ysize\" src=\"$IMG_URL"."total.png\"></p>";
+$html .= "<h1>Single Nodes</h1>";
+$html .= "<ul>".$index."</ul>";
+$html .= $body;
+$html .= "<br><br><br>\n";
+$html .= 'Images created with Tobi Oetiker\'s <a href="http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/">rrdtool</a>'."\n";
+$html .= "<hr>\nBuilt at $GMTIME on $HOSTNAME<br>\n";
+$html .= "<a href=\"web\@palfrader.org\">Peter Palfrader &lt;web\@palfrader.org&gt;</a>\n";
+$html .= "</body></html>\n";
+
+open (F, ">result/index.html") or die ("Cannot open index.html: $!\n");
+print F $html;
+close F;
+