initial commit

This commit is contained in:
Ben Charlton 2011-03-30 19:04:35 +01:00
commit 69cb2a4fc8
13 changed files with 1626 additions and 0 deletions

124
mkgraph.pl Executable file
View file

@ -0,0 +1,124 @@
#!/usr/bin/perl
use strict;
use StatGraph;
use File::Copy;
## TODO: configure with getopt
my $config = "statgraph.conf";
## Get configuration
open CONFIG, $config || die "Cannot open $config: $!";
my @CONFIG = (<CONFIG>);
close CONFIG;
my %CONFIG = confparse(\@CONFIG);
my %HOSTS = %{$CONFIG{hosts}};
%CONFIG = %{$CONFIG{config}};
## Set default configuration options if they've not been specified
my $defaultport = $CONFIG{defaultport} || 27001;
my $offsets = $CONFIG{offsets} || '10800 86400 604800 2419200 31536000';
my @offsets = split(/\s+/, $offsets);
my $rrdlocation = $CONFIG{rrdlocation} || "rrd/";
my $graphlocation = $CONFIG{graphlocation} || "graphs/";
open INDEX, ">$graphlocation/index.html.tmp";
print INDEX htmlheader("StatGraph results");
print INDEX "<h1>StatGraph results</h1>";
print INDEX "<p>Last updated: " . nice_date;
print INDEX "<ul>";
## Main loop - run once for each host
foreach my $host (sort keys %HOSTS) {
print "+ $HOSTS{$host}{displayname}\n";
print INDEX "<li><a href='$host.html'>$host</a>";
print INDEX " - $HOSTS{$host}{comment}</li>";
my %ignore;
foreach (split(/\s+/, $HOSTS{$host}{ignore})) {
$ignore{$_} = 1;
}
open CACHE, "$rrdlocation$host.txt" || warn "$host has no cache\n";
my @res = (<CACHE>);
close CACHE;
my %results = sgparse(\@res);
## Simple check that we've got reasonable statgrab data
unless ($results{const}{0} eq '0') {
warn "Bad statgrab results for $host";
next;
}
open SUMM, ">$graphlocation$host.html";
print SUMM htmlheader("$host summary");
my %colours = %{$CONFIG{colour}};
print SUMM "<h1>$host summary for last " . nice_time($offsets[0]). "</h1>";
print SUMM "<p>$HOSTS{$host}{comment}</p>";
print SUMM "<p>Last updated: " . nice_date;
my %nicenames = (
'cpu' => "CPU utilisation for $host",
'load' => "Load averages for $host",
'mem' => "Memory usage for $host",
'page' => "Paging activity for $host",
'proc' => "Processes for $host",
'user' => "User activity for $host",
'swap' => "Swap usage for $host");
## Generate graphs
foreach ('cpu', 'load', 'mem', 'page', 'proc', 'user', 'swap') {
if (-e "$rrdlocation$host.$_.rrd") {
create_graph($rrdlocation, $graphlocation, $_, $host, '', \@offsets, '', \%colours);
create_page($graphlocation, $_, $host, '', \@offsets);
print SUMM "<h2>$nicenames{$_}</h2><a href='$host-$_.html'><img src='$host.$_.$offsets[0].png'></a><br />\n";
}
}
## net device RRDs
foreach my $dev (sort keys %{ $results{net} }) {
unless (defined $ignore{"net.$dev"}) {
if (-e "$rrdlocation$host.net.$dev.rrd") {
create_graph($rrdlocation, $graphlocation, 'net', $host, $dev, \@offsets, '', \%colours);
create_page($graphlocation, 'net', $host, $dev, \@offsets);
print SUMM "<h2>Network IO for $host on $dev</h2><a href='$host-net.$dev.html'><img src='$host.net.$dev.$offsets[0].png'></a><br />\n";
}
}
}
## disk device RRDs
foreach my $dev (sort keys %{ $results{disk} }) {
unless (defined $ignore{"disk.$dev"}) {
if (-e "$rrdlocation$host.disk.$dev.rrd") {
create_graph($rrdlocation, $graphlocation, 'disk', $host, $dev, \@offsets, '', \%colours);
create_page($graphlocation, 'disk', $host, $dev, \@offsets);
print SUMM "<h2>Disk IO for $host on $dev</h2><a href='$host-disk.$dev.html'><img src='$host.disk.$dev.$offsets[0].png'></a><br />\n";
}
}
}
## fs device RRDs
foreach my $dev (sort keys %{ $results{fs} }) {
unless (defined $ignore{"fs.$dev"}) {
if (-e "$rrdlocation$host.fs.$dev.rrd") {
create_graph($rrdlocation, $graphlocation, 'fs', $host, $dev, \@offsets, $results{fs}{$dev}{mnt_point}, \%colours);
create_page($graphlocation, 'fs', $host, $dev, \@offsets);
print SUMM "<h2>Filesystem Utilisation for $host on $dev</h2><a href='$host-fs.$dev.html'><img src='$host.fs.$dev.$offsets[0].png'></a><br />\n";
}
}
}
print SUMM htmlfooter;
close SUMM;
}
print INDEX "</ul>";
print INDEX htmlfooter;
close INDEX;
move("$graphlocation/index.html.tmp", "$graphlocation/index.html");