- my ($readwritereq, $readreq, $readsect, $writereq, $writesect);
- if ( ! -e "$rrdlog/disk.rrd") {
- RRDs::create ("$rrdlog/disk.rrd", "--step=300",
- "DS:readsect:COUNTER:600:0:5000000000",
- "DS:writesect:COUNTER:600:0:5000000000",
- "RRA:AVERAGE:0.5:1:576",
- "RRA:AVERAGE:0.5:6:672",
- "RRA:AVERAGE:0.5:24:732",
- "RRA:AVERAGE:0.5:144:1460");
- $ERROR = RRDs::error;
- print "Error in RRD::create for disk: $ERROR\n" if $ERROR;
- }
-
- my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
- $atime, $mtime, $ctime, $blksize, $blocks) = stat("/dev/harddisk");
-
- my $major = $rdev >> 8;
- my $minor = $rdev & 0xFF;
-
- open STAT, "/proc/stat";
- my @diskstat = <STAT>;
- close (STAT);
- foreach my $line (@diskstat)
- {
- chomp ($line);
- my @temp = split(/\:\ /,$line);
- if ($temp[1]) {
- my @devicestat = split(/\ /,$temp[1]);
- foreach my $stats (@devicestat)
- {
- chomp ($stats);
- my @fields = split(/\((\d+),(\d+)\):\((\d+),(\d+),(\d+),(\d+),(\d+)/,$stats);
- if ($major eq $fields[1] and $minor eq $fields[2])
- {
- $readwritereq = $fields[3];
- $readreq = $fields[4];
- $readsect = $fields[5];
- $writereq = $fields[6];
- $writesect = $fields[7];
- }
- }
- }
- }
-
- if ($readsect && $writesect) {
- RRDs::update ("$rrdlog/disk.rrd",
- "-t", "readsect:writesect",
- "N:$readsect:$writesect");
- $ERROR = RRDs::error;
- print "Error in RRD::update for disk: $ERROR\n" if $ERROR;
- } else {
- print "Error in RRD::update for disk: no data available\n";
- }
-}
-
-sub updatediskgraphnew {
- my $disk = $_[0];
- my $period = $_[1];
-
- RRDs::graph ("$graphs/disk-$disk-$period.png",
- "--start", "-1$period", "-aPNG", "-i", "-z",
- "--alt-y-grid", "-w 600", "-h 100", "-l 0", "-r",
- "--color", "SHADEA".$color{"color19"},
- "--color", "SHADEB".$color{"color19"},
- "--color", "BACK".$color{"color21"},
- "-t $tr{'disk access per'} $tr{$period}",
- "DEF:read=$rrdlog/disk-$disk.rrd:readsect:AVERAGE",
- "DEF:write=$rrdlog/disk-$disk.rrd:writesect:AVERAGE",
- "DEF:sleep=$rrdlog/disk-$disk.rrd:sleeping:AVERAGE",
- "CDEF:sl_state=sleep,INF,*",
-
- "AREA:sl_state#a0a0a0:disk standby\\j",
- "AREA:read".$color{"color11"}.":$tr{'sectors read from disk per second'}",
- "STACK:write".$color{"color12"}.":$tr{'sectors written to disk per second'}\\j",
- "COMMENT: \\j",
- "COMMENT:$tr{'maximal'}",
- "COMMENT:$tr{'average'}",
- "COMMENT:$tr{'current'}\\j",
- "GPRINT:read:MAX:$tr{'read sectors'}\\:%8.0lf",
- "GPRINT:read:AVERAGE:$tr{'read sectors'}\\:%8.0lf",
- "GPRINT:read:LAST:$tr{'read sectors'}\\:%8.0lf\\j",
- "GPRINT:write:MAX:$tr{'written sectors'}\\:%8.0lf",
- "GPRINT:write:AVERAGE:$tr{'written sectors'}\\:%8.0lf",
- "GPRINT:write:LAST:$tr{'written sectors'}\\:%8.0lf\\j");
- $ERROR = RRDs::error;
- print "Error in RRD::graph for disk-$disk: $ERROR\n" if $ERROR;
-}
-
-sub updatediskdatanew {
- my $disk = $_[0];
-
- my ($readwritereq, $readreq, $readsect, $writereq, $writesect);
- if ( ! -e "$rrdlog/disk-$disk.rrd") {
- RRDs::create ("$rrdlog/disk-$disk.rrd", "--step=300",
- "DS:readsect:COUNTER:600:0:5000000000",
- "DS:writesect:COUNTER:600:0:5000000000",
- "DS:sleeping:GAUGE:600:0:1",
- "RRA:AVERAGE:0.5:1:576",
- "RRA:AVERAGE:0.5:6:672",
- "RRA:AVERAGE:0.5:24:732",
- "RRA:AVERAGE:0.5:144:1460");
- $ERROR = RRDs::error;
- print "Error in RRD::create for disk-$disk: $ERROR\n" if $ERROR;
- }
-
- my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
- $atime, $mtime, $ctime, $blksize, $blocks) = stat("/dev/$disk");
-
- print "\n\n$dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks\n\n";
-
- my $major = $rdev >> 8;
- my $minor = ($rdev & 0xFF) >>6;
-
- open STAT, "/proc/stat";
- my @diskstat = <STAT>;
- close (STAT);
- foreach my $line (@diskstat)
- {
- chomp ($line);
- my @temp = split(/\:\ /,$line);
- if ($temp[1]) {
- my @devicestat = split(/\ /,$temp[1]);
- foreach my $stats (@devicestat)
- {
- chomp ($stats);
- my @fields = split(/\((\d+),(\d+)\):\((\d+),(\d+),(\d+),(\d+),(\d+)/,$stats);
- if ($major eq $fields[1] and $minor eq $fields[2])
- {
- $readwritereq = $fields[3];
- $readreq = $fields[4];
- $readsect = $fields[5];
- $writereq = $fields[6];
- $writesect = $fields[7];
- }
- }
- }
- }
-
- my $sleeping=0;
- my $lastsleepstate=0;
-
- if ( -e "/tmp/hddshutdown-$disk" ) {
- open STAT,"/tmp/hddshutdown-$disk";
- $lastsleepstate = <STAT>;
- close (STAT);
- if ($lastsleepstate==$readwritereq) {
- $sleeping=1;
- }
- }
-
- if ($readsect && $writesect) {
- RRDs::update ("$rrdlog/disk-$disk.rrd",
- "-t", "readsect:writesect:sleeping",
- "N:$readsect:$writesect:$sleeping");
- $ERROR = RRDs::error;
- print "Error in RRD::update for disk-$disk: $ERROR\n" if $ERROR;
- } else {
- print "Error in RRD::update for disk-$disk: no data available\n";
- }
-}
-
-sub updateifgraph {
- my $interface = $_[0];
- my $period = $_[1];
-
- RRDs::graph ("$graphs/$interface-$period.png",
- "--start", "-1$period", "-aPNG", "-i", "-z",
- "--alt-y-grid", "-w 600", "-h 100",
- "--color", "SHADEA".$color{"color19"},
- "--color", "SHADEB".$color{"color19"},
- "--color", "BACK".$color{"color21"},
- "-t $tr{'traffic on'} $interface ($tr{'graph per'} $tr{$period})",
- "-v$tr{'bytes per second'}",
- "DEF:incoming=$rrdlog/$interface.rrd:incoming:AVERAGE",
- "DEF:outgoing=$rrdlog/$interface.rrd:outgoing:AVERAGE",
- "AREA:incoming".$color{"color11"}.":$tr{'incoming traffic in bytes per second'}",
- "LINE1:outgoing".$color{"color12"}.":$tr{'outgoing traffic in bytes per second'}\\j",
- "COMMENT: \\j",
- "COMMENT:$tr{'maximal'}",
- "COMMENT:$tr{'average'}",
- "COMMENT:$tr{'current'}\\j",
- "GPRINT:incoming:MAX:$tr{'in'}\\:%8.3lf %sBps",
- "GPRINT:incoming:AVERAGE:$tr{'in'}\\:%8.3lf %sBps",
- "GPRINT:incoming:LAST:$tr{'in'}\\:%8.3lf %sBps\\j",
- "GPRINT:outgoing:MAX:$tr{'out'}\\:%8.3lf %sBps",
- "GPRINT:outgoing:AVERAGE:$tr{'out'}\\:%8.3lf %sBps",
- "GPRINT:outgoing:LAST:$tr{'out'}\\:%8.3lf %sBps\\j");
- $ERROR = RRDs::error;
- print "Error in RRD::graph for $interface: $ERROR\n" if $ERROR;