#!/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"; }