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",
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;
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
### 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);
+
}
###