124 lines
4.4 KiB
Perl
Executable file
124 lines
4.4 KiB
Perl
Executable file
#!/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");
|