From: Ian Jackson Date: Mon, 5 Jul 2010 17:06:10 +0000 (+0100) Subject: wip disk space graphs X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ijackson/git?p=rrd-graphs.git;a=commitdiff_plain;h=827a13b39d3396e0cd69df8bc263d9cbe7c577d5 wip disk space graphs --- diff --git a/cgi b/cgi index a486310..8577785 100755 --- a/cgi +++ b/cgi @@ -3,6 +3,7 @@ use strict qw(vars); use CGI::SpeedyCGI qw/:standard -no_xhtml/; use CGI qw/:standard -no_xhtml/; +use POSIX; sub fail ($) { print(header(-status=>500), @@ -212,8 +213,97 @@ foreach my $siteinfo (sort { $a->[0] cmp $b->[0] } @news_graphs) { ]); } +our %disk_rdev2rrd; + +foreach my $physdiskrrd (<$R/disk-*/disk_octets.rrd>) { + $physdiskrrd =~ s,octets\.rrd$,, or die; + $physdiskrrd =~ m,-([^/]+)/disk_$, or die; + my $physdev= "/dev/$1"; + if (!stat $physdev) { + die "$physdev $!" unless $!==&ENOENT; + next; + } + die "$physdev ?" unless S_ISBLK((stat _)[2]); + $disk_rdev2rrd{(stat _)[6]}= $physdiskrrd; } +our @disk_vgs; + +sub lvgraphs ($$) { + my ($vg, $factor) = @_; + my @lvs; + my $varname= $vg; + $varname =~ s/[^0-9a-zA-Y]/ sprintf "Z%02x", ord($&) /ge; + my $vginfo= { + Name => $vg, + Varname => $varname + }; + foreach my $bo (qw(octets ops)) { + foreach my $rw (qw(read write)) { + $vginfo->{VarDefs}{$bo}{$rw}= []; + $vginfo->{Sumdef}{$bo}{$rw}= '0'; + } + } + my $ix=0; + foreach my $lvpath () { + my $lv= $lvpath; $lv =~ s,.*/,,; + if (!stat $lvpath) { + die "$lvpath $!" unless $!==&ENOENT; + next; + } + die "$lvpath ?" unless S_ISBLK((stat _)[2]); + my $rrd= $disk_rdev2rrd{(stat _)[6]}; + next unless defined $rrd; + + foreach my $bo (qw(octets ops)) { +0 and + graph_of_group('IO', "$vg $lv", $bo, { Units => '[/s]' }, + [ + (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}"; + push @{ $vginfo->{VarDefs}{$bo}{$rw} }, + "DEF:$tvar=${rrd}${bo}.rrd:$rw:AVERAGE"; + $vginfo->{Sumdef}{$bo}{$rw} .= ",$tvar,+"; + } + } + } + foreach my $bo (qw(octets ops)) { + my $defs= []; + foreach my $rw (qw(read write)) { + 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}= $defs; + } + push @disk_vgs, $vginfo; +} + +lvgraphs('vg-main', 1); +lvgraphs('vg-chiark-stripe', 0.5); + +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; + $stack= ':STACK'; + } + } + graph_of_group('IO', 'T', $bo, { Units => '[/s]' }, \@a); +} + +} #---------- right, that was the initialisation ---------- our $self= url(-relative=>1);