From 600d931f641ddff9cfdedcdb0a58ade7f31b6eae Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 6 Jul 2010 13:54:15 +0100 Subject: [PATCH] disk graphs --- cgi | 75 +++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 22 deletions(-) diff --git a/cgi b/cgi index 8577785..e0e90b8 100755 --- a/cgi +++ b/cgi @@ -229,14 +229,16 @@ foreach my $physdiskrrd (<$R/disk-*/disk_octets.rrd>) { our @disk_vgs; -sub lvgraphs ($$) { - my ($vg, $factor) = @_; +sub lvgraphs { + my ($vg, $label, $factor, $rcolour, $wcolour) = @_; my @lvs; my $varname= $vg; $varname =~ s/[^0-9a-zA-Y]/ sprintf "Z%02x", ord($&) /ge; my $vginfo= { - Name => $vg, - Varname => $varname + Name => $label, + Varname => $varname, + Colour => { 'read' => $rcolour, 'write' => $wcolour }, + Lvs => [] }; foreach my $bo (qw(octets ops)) { foreach my $rw (qw(read write)) { @@ -255,15 +257,18 @@ sub lvgraphs ($$) { my $rrd= $disk_rdev2rrd{(stat _)[6]}; next unless defined $rrd; + my $lvinfo= { Name => $lv }; + push @{ $vginfo->{Lvs} }, $lvinfo; + foreach my $bo (qw(octets ops)) { -0 and - graph_of_group('IO', "$vg $lv", $bo, { Units => '[/s]' }, + $lvinfo->{Defs}{$bo}= [ (map { ("DEF:$_=${rrd}${bo}.rrd:$_:AVERAGE") } qw(read write)), "CDEF:mwrite=0,write,-", "AREA:read#00f:read", "AREA:mwrite#f00:write" - ]); + ]; + foreach my $rw (qw(read write)) { $ix++; my $tvar= "lv_${rw}_${bo}_${varname}_${ix}"; @@ -274,35 +279,52 @@ sub lvgraphs ($$) { } } foreach my $bo (qw(octets ops)) { - my $defs= []; foreach my $rw (qw(read write)) { + my $defs= []; push @$defs, @{ $vginfo->{VarDefs}{$bo}{$rw} }; push @$defs, "CDEF:${rw}_vg_${varname}=". $vginfo->{Sumdef}{$bo}{$rw}. sprintf(",%f,*", $rw eq 'write' ? -$factor : $factor); + $vginfo->{Defs}{$bo}{$rw}= $defs; } - $vginfo->{Defs}{$bo}= $defs; } push @disk_vgs, $vginfo; } -lvgraphs('vg-main', 1); -lvgraphs('vg-chiark-stripe', 0.5); +lvgraphs('vg-main', 'main', 1, qw(00f f00)); +lvgraphs('vg-chiark-stripe', 'stripe', 0.5, qw(008 800)); foreach my $bo (qw(octets ops)) { my @a= (); foreach my $rw (qw(read write)) { my $stack= ''; foreach my $vginfo (@disk_vgs) { - push @a, @{ $vginfo->{Defs}{$bo} }; - push @a, "AREA:${rw}_vg_$vginfo->{Varname}#0ff:$vginfo->{Name}" - .$stack; + push @a, @{ $vginfo->{Defs}{$bo}{$rw} }; + push @a, "AREA:${rw}_vg_$vginfo->{Varname}#". + $vginfo->{Colour}{$rw}. + ":$vginfo->{Name} ".substr($rw,0,1). + $stack; $stack= ':STACK'; } } - graph_of_group('IO', 'T', $bo, { Units => '[/s]' }, \@a); + graph_of_group('IO', 'IO', $bo, { Units => '[/s]' }, \@a); } +foreach my $vginfo (@disk_vgs) { + foreach my $bo (qw(octets ops)) { + foreach my $lv (@{ $vginfo->{Lvs} }) { + graph_of_group('IO', "$vginfo->{Name} $lv->{Name}", + $bo, { Units => '[/s]' }, $lv->{Defs}{$bo}); + } + } +} + +push @{ $section_groups{General} }, { + Section => 'IO', + Group => 'IO', + UrlParams => "section=IO&sloth=SLOTH" +}; + } #---------- right, that was the initialisation ---------- @@ -428,10 +450,10 @@ sub start_page ($) { } our $detail= param('detail'); -if ($detail) { +if (defined $detail) { my $elems= $group_elems{$section,$detail}; die unless $elems; - start_page("$detail graphs"); + start_page("$detail - $section - graphs"); foreach my $tsloth (0..5) { foreach my $elem (@$elems) { my $g= $graphs{$section,$detail,$elem}; @@ -467,15 +489,24 @@ if (param('debug')) { exit 0; } -start_page("$section graphs"); +start_page("$section - graphs"); foreach my $group (@{ $section_groups{$section} }) { - print a({href=>"$self?detail=$group§ion=$section"}); - my $imgurl= "$self?graph=$group§ion=$section"; + my $ref_group= $group; + my $ref_section= $section; + my $ref_urlparams= "detail=$group§ion=$section"; + if (ref $group) { + $ref_group= $group->{Group}; + $ref_section= $group->{Section}; + $ref_urlparams= $group->{UrlParams}; + $ref_urlparams =~ s/\bSLOTH\b/$sloth/; + } + print a({href=>"$self?$ref_urlparams"}); + my $imgurl= "$self?graph=$ref_group§ion=$ref_section"; print ""; - my $elems= $group_elems{$section,$group}; + my $elems= $group_elems{$ref_section,$ref_group}; foreach my $elem (@$elems) { - my $g= $graphs{$section,$group,$elem}; + my $g= $graphs{$ref_section,$ref_group,$elem}; print img({src=>"$imgurl&elem=$elem&sloth=".($sloth + $g->{Slower}), alt=>''}); } -- 2.30.2