#!/usr/bin/perl
use strict;
use grapher;
use CGI::Carp qw/fatalsToBrowser/;
use CGI;
my $query = CGI::new();
my @wh = (split /,/, $query->param('w'));
my @hostsq = (split /,/, $query->param('h'));
my $startt = $query->param('s');
my @mode = (split /,/, $query->param('m'));
my @when_opt = ('hourly','daily','weekly','monthly','yearly');
my @when;
my %hosts;
my $now = time;
my $endtime;
unless(defined($mode[0])) { @mode = (); }
if(defined($wh[0]))
{
if($wh[0] eq 'all')
{
@when = @when_opt;
}
else
{
foreach my $whe(@wh)
{
push(@when,$when_opt[$whe]);
}
}
}
else
{
push(@when,$when_opt[2]);
}
my %hosts_dev =
(
eth => {
'trym' => ['eth0'],
'loke' => ['bond0'],
},
disk => {
'trym' => ['hda'],
'loke' => ['dm-0','dm-1']
},
);
if(defined($hostsq[0]))
{
foreach my $hst(@hostsq)
{
foreach my $tst(keys %hosts_dev)
{
@{ $hosts{$tst}{$hst} } = @{ $hosts_dev{$tst}{$hst} };
}
}
}
else
{
# @hostsq = ('loke','trym');
@hostsq = ('loke');
%hosts = %hosts_dev;
}
my %start = (
'hourly' => 3600,
'daily' => 86400,
'weekly' => 604800,
'monthly' => 2419200,
'yearly' => 31536000,
);
&starthtml;
my $back;
my $starttime;
foreach my $h(@hostsq)
{
print '
',$h,'
',"\n";
foreach my $t(@when)
{
unless(defined($startt))
{
$starttime = $now - $start{$t};
$endtime = $starttime + $start{$t};
}
else
{
$back = $startt * $start{$t};
$starttime = $now - $back - $start{$t};
$endtime = $starttime + $start{$t};
}
my $curmode;
my @tmpmode = @mode;
unless(scalar(@tmpmode) > 0)
{
@tmpmode = ('cpu','mem','disk','eth');
}
foreach $curmode(@tmpmode)
{
if(($curmode eq 'eth') || ($curmode eq 'disk'))
{
foreach my $d(@{ $hosts{$curmode}{$h} })
{
print '',"\n";
if($curmode eq 'eth') { print &generate_eth("host=$h dev=$d mode=$t start=$starttime end=$endtime"); }
if($curmode eq 'disk') { print &generate_disk("host=$h dev=$d mode=$t start=$starttime end=$endtime"); }
print '
',"\n";
}
}
elsif($curmode eq 'cpu')
{
print '',"\n";
print &generate_cpu("host=$h mode=$t start=$starttime end=$endtime"),'
';
print &generate_load("host=$h mode=$t start=$starttime end=$endtime");
print &generate_temp("host=$h mode=$t start=$starttime end=$endtime");
print '
',"\n";
}
elsif($curmode eq 'mem')
{
print '',"\n";
print &generate_mem("host=$h mode=$t start=$starttime end=$endtime"),'
',"\n";
}
else
{
print '',"\n";
print &generate_cpu("host=$h mode=$t start=$starttime end=$endtime"),'
';
print &generate_load("host=$h mode=$t start=$starttime end=$endtime"),'
';
print &generate_temp("host=$h mode=$t start=$starttime end=$endtime"),'
';
print &generate_mem("host=$h mode=$t start=$starttime end=$endtime"),'
',"\n";
foreach my $d(@{ $hosts{'eth'}{$h} })
{
print &generate_eth("host=$h dev=$d mode=$t start=$starttime end=$endtime"),'
';
}
foreach my $d(@{ $hosts{'disk'}{$h} })
{
print &generate_disk("host=$h dev=$d mode=$t start=$starttime end=$endtime"),'
';
}
print '',"\n";
# print '
',"\n";
}
}
}
# print '
',"\n";
}
&endhtml;
sub starthtml
{
print 'Content-type: text/html',"\n\n";
print "","\n";
print '',"\n";
print '',"\n";
print '','Systemstats','',"\n";
print '',"\n\n";
print '',"\n";
print '',"\n\n";
print '',"\n\n";
print '',"\n";
print '',"\n";
}
sub generate_link
{
my @return;
if(defined($query->param('h')))
{
foreach my $h(@hostsq)
{
push(@return,"h=$h");
}
}
if(defined($_[0]))
{
if((split /=/,$_[0])[0] eq 'when')
{
my $tmp = (split /=/,$_[0])[1];
push(@return,"w=$tmp");
}
else
{
foreach my $t(@wh)
{
push(@return,"w=$t");
}
}
if((split /=/,$_[0])[0] eq 'mode')
{
my $tmp = (split /=/,$_[0])[1];
push(@return,"m=$tmp");
}
elsif(scalar(@mode) > 0)
{
my $tstring;
$tstring = "m=";
my $ci = 0;
while($ci < scalar(@mode))
{
$tstring .= $mode[$ci];
$ci++;
if($ci < scalar(@mode))
{
$tstring .= ',';
}
}
push(@return,$tstring);
}
if(defined($query->param('s')))
{
push(@return,"s=".$query->param('s'));
}
}
else
{
foreach my $t(@wh)
{
push(@return,"w=$t");
}
}
my $rstring;
my $i = 0;
while($i < scalar(@return))
{
if($i == 0)
{
$rstring = $return[$i];
}
else # ($i == scalar(@return))
{
$rstring .= "&$return[$i]";
}
$i++;
}
return $rstring;
}
sub generate_hostlink
{
print '
param('s'))) { print "&s=".$query->param('s'); }
print '">';
if(defined($_[0])) { print $_[0]; }
else { print 'All'; }
print '
',"\n";
}
sub endhtml
{
print '
';
print '',"\n\n";
}