chiark / gitweb /
disk graphs
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 6 Jul 2010 12:54:15 +0000 (13:54 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 6 Jul 2010 12:54:15 +0000 (13:54 +0100)
cgi

diff --git a/cgi b/cgi
index 85777859b4254cee81442a2fef8eba2b91479152..e0e90b8d9de18ca00dab42af5e16aed0a769a9e2 100755 (executable)
--- 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&section=$section"});
-    my $imgurl= "$self?graph=$group&section=$section";
+    my $ref_group= $group;
+    my $ref_section= $section;
+    my $ref_urlparams= "detail=$group&section=$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&section=$ref_section";
     print "<span style=\"white-space:nowrap\">";
-    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=>''});
     }