X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Fscripts%2Fmakegraphs;h=92eba691b5ff1835fb2766c71a7393277f2ff111;hb=265352a051d5e343608ae9648201867ce0a8764c;hp=4e22159457f2f10ef222e06a65a3bb74f7249dc1;hpb=a28fdc01dab591eb15e3fd3020d4efe45b05db30;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/src/scripts/makegraphs b/src/scripts/makegraphs index 4e22159457..92eba691b5 100644 --- a/src/scripts/makegraphs +++ b/src/scripts/makegraphs @@ -235,8 +235,9 @@ sub updatememdata { sub updatediskdata { my $disk = $_[0]; my ($readsect, $writesect, $trash); - if ( ! -e "$rrdlog/disk-$disk.rrd") { - RRDs::create ("$rrdlog/disk-$disk.rrd", "--step=300", + my @array = split(/\//,$disk); + if ( ! -e "$rrdlog/disk-".$array[$#array].".rrd") { + RRDs::create ("$rrdlog/disk-".$array[$#array].".rrd", "--step=300", "DS:readsect:COUNTER:600:0:5000000000", "DS:writesect:COUNTER:600:0:5000000000", "RRA:AVERAGE:0.5:1:576", @@ -253,7 +254,7 @@ sub updatediskdata { print "\nread:".$readsect."write:".$writesect."\n"; if ($readsect && $writesect) { - RRDs::update ("$rrdlog/disk-$disk.rrd", + RRDs::update ("$rrdlog/disk-".$array[$#array].".rrd", "-t", "readsect:writesect", "N:$readsect:$writesect"); $ERROR = RRDs::error; @@ -403,75 +404,105 @@ sub updatelq { sub updatehdddata { my $disk = $_[0]; - if ( ! -e "$rrdlog/hddtemp-$disk.rrd") + my $standby; + my @array = split(/\//,$disk); + + if ( ! -e "$rrdlog/hddshutdown-".$array[$#array].".rrd") { # database did not exist -> create - RRDs::create ("$rrdlog/hddtemp-$disk.rrd", "--step=300", - "DS:temperature:GAUGE:600:0:100", + RRDs::create ("$rrdlog/hddshutdown-".$array[$#array].".rrd", "--step=300", + "DS:standby: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 hdd-$disk: $ERROR\n" if $ERROR; + print "Error in RRD::create for hddshutdown-".$array[$#array].": $ERROR\n" if $ERROR; } - $temp = 0; - my $hdd_output = ''; - my $smart_output = ''; - - if ( -e "$path_smartctl" ) + if (-e "/tmp/hddshutdown-".$array[$#array]) {$standby = 1;} + else {$standby = 0;} + + RRDs::update ("$rrdlog/hddshutdown-".$array[$#array].".rrd", "-t", "standby", "N:$standby"); + $ERROR = RRDs::error; + print "Error in RRD::update for hddshutdown-".$array[$#array].": $ERROR\n" if $ERROR; + + if ( ! -e "$rrdlog/hddtemp-".$array[$#array].".rrd") { - system("$path_smartctl -iHA /dev/$disk > /var/log/smartctl_out_hddtemp-$disk"); + # database did not exist -> create + RRDs::create ("$rrdlog/hddtemp-".$array[$#array].".rrd", "--step=300", + "DS:temperature:GAUGE:600:0:100", + "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 hdd-".$array[$#array].": $ERROR\n" if $ERROR; } - if ( -e "$path_hddtemp" ) + # Temperaturlesen wÃrde die Platte aufwecken!!! + if (!$standby) { - $hdd_output = `$path_hddtemp -qn /dev/$disk`; - - # I know 4 response possible responses: - # - # /dev/harddisk: harddisk type: S.M.A.R.T. not available - # /dev/harddisk: harddisk type: no sensor - # /dev/harddisk: harddisk type: 37?C or ?F - # 37 - - if ( index($hdd_output, "S.M.A.R.T.") != -1 ) + $temp = 0; + my $hdd_output = ''; + my $smart_output = ''; + + if ( -e "$path_smartctl" ) { - $temp = 0; + system("$path_smartctl -iHA -d ata /dev/$disk > /var/log/smartctl_out_hddtemp-$disk"); } - elsif ( index($hdd_output, "no sensor") != -1 ) + + if ( -e "$path_hddtemp" ) { - $temp = 1; + $hdd_output = `$path_hddtemp -qn /dev/$disk`; + + # I know 4 response possible responses: + # + # /dev/harddisk: harddisk type: S.M.A.R.T. not available + # /dev/harddisk: harddisk type: no sensor + # /dev/harddisk: harddisk type: 37?C or ?F + # 37 + + if ( index($hdd_output, "S.M.A.R.T.") != -1 ) + { + $temp = 0; + } + elsif ( index($hdd_output, "no sensor") != -1 ) + { + $temp = 1; + } + elsif ( index($hdd_output, "$disk") != -1 ) + { + $hdd_output =~ /.*:.*:\s*(\d+).*\s/; + $temp = $1; + } + else + { + $hdd_output =~ /(\d+)\s/; + $temp = $1; + } } - elsif ( index($hdd_output, "$disk") != -1 ) + elsif ( -e "/var/log/smartctl_out_hddtemp-".$array[$#array] ) { - $hdd_output =~ /.*:.*:\s*(\d+).*\s/; - $temp = $1; + $hdd_output = `cat /var/log/smartctl_out_hddtemp-".$array[$#array]." | grep Temperature_`; + my @t = split(/\s+/,$hdd_output); + $temp = $t[9]; } else { - $hdd_output =~ /(\d+)\s/; - $temp = $1; + $temp = 0; } - } - elsif ( -e "/var/log/smartctl_out_hddtemp-$disk" ) - { - $hdd_output = `cat /var/log/smartctl_out_hddtemp-$disk | grep Temperature_`; - my @t = split(/\s+/,$hdd_output); - $temp = $t[9]; - } - else - { - $temp = 0; - } - print "Temperature for ".$disk."->".$temp."<-\n"; - - RRDs::update ("$rrdlog/hddtemp-$disk.rrd", "-t", "temperature", "N:$temp"); - $ERROR = RRDs::error; - print "Error in RRD::update for hdd-$disk: $ERROR\n" if $ERROR; + print "Temperature for ".$array[$#array]."->".$temp."<-\n"; + # Nur ins RDD wenn nicht 0 (sonst klappt die min Anzeige nicht) + if ($temp) + { + RRDs::update ("$rrdlog/hddtemp-".$array[$#array].".rrd", "-t", "temperature", "N:$temp"); + $ERROR = RRDs::error; + print "Error in RRD::update for hdd-".$array[$#array].": $ERROR\n" if $ERROR; + } + } } sub updatembmondata @@ -564,14 +595,52 @@ updatememdata(); ### HDD graphs ### + my @disks = `kudzu -qps -c HD | grep device: | cut -d" " -f2 | sort | uniq`; +system("unlink /tmp/hddstatus && touch /tmp/hddstatus"); print "\nFound following amount of disks:".@disks."\n"; foreach (@disks){ my $disk = $_; chomp $disk; print "Working on disk ".$disk.".\n"; + +my $status = ""; +my $diskstats = ""; +my $newdiskstats = ""; +my @array = split(/\//,$disk); + +$diskstats = `cat /tmp/hddstats-$array[$#array]`; +chomp $diskstats; +my $newdiskstats = `/usr/bin/iostat -d -t $disk | tail -2 | head -1 | awk '{ print \$5","\$6}'`; +chomp $newdiskstats; +my $status = `hdparm -C /dev/$disk | tail -1 | cut -d: -f2`; +chomp $status; + +if ($status !~/standby/ || $diskstats ne $newdiskstats) +{ + if (-e "/tmp/hddshutdown-".$array[$#array]) + { + system("unlink /tmp/hddshutdown-".$array[$#array]); + } +} + +if (-e "/tmp/hddshutdown-".$array[$#array]) +{ + $status = " standby\n"; +} +else +{ + $status = " active\n"; +} + + +open(DATEI, ">>/tmp/hddstatus") || die "Datei nicht gefunden"; +print DATEI $disk."-".$status; +close(DATEI); + updatediskdata($disk); updatehdddata($disk); + } ###