smartd script patch

Ivana Varekova <[email protected]>
Newsgroups gmane.comp.log.logwatch.devel
Message-ID <[email protected]>
I'm going through fedora logwatch patches and this one is not in 
upstream branch so I'm sending it here.
 
Ivana Hutarova Varekova

_______________________________________________
Logwatch-Devel mailing list
[email protected]
http://www2.list.logwatch.org:81/mailman/listinfo/logwatch-devel
logwatch-smartd.patch (text/x-patch, 2.8 KB)
diff -up logwatch-7.3.6/scripts/services/smartd.pom logwatch-7.3.6/scripts/services/smartd
--- logwatch-7.3.6/scripts/services/smartd.pom	2007-04-09 16:46:46.000000000 +0200
+++ logwatch-7.3.6/scripts/services/smartd	2009-01-06 13:45:00.000000000 +0100
@@ -8,6 +8,8 @@ use strict;
 my ($Device, $Msg, $Test);
 my %ParamChanges = ();
 my %TempChanges = ();
+my %TempLimit = ();
+my %TempCritLimit = ();
 my %Pendsectors = ();
 my %NumPendsectors = ();
 my %Offsectors = ();
@@ -94,7 +96,13 @@ while (defined(my $ThisLine = <STDIN>)) 
    # smartd reports temperature changes this way only for SCSI disks
    } elsif ( my ($Device,$NewVal) = ($ThisLine =~ /^Device: ([^,]+), initial Temperature is (\d+) Celsius/)) {
       push @{$TempChanges{$Device}},$NewVal;
-   } elsif ( my ($Device,$NewVal) = ($ThisLine =~ /^Device: ([^,]+), Temperature changed -?\d+ Celsius to (\d+) Celsius/)) {
+   } elsif ( my ($Device,$Limit) = ($ThisLine =~ /^Device: ([^,]+), Temperature \d+ Celsius reached limit of (\d+) Celsius/)) {
+   # Device: /dev/sda, Temperature 37 Celsius reached limit of 10 Celsius (Min/Max 37/37)
+      $TempLimit{"$Device,$Limit"}++;    
+   } elsif ( my ($Device,$Limit) = ($ThisLine =~ /^Device: ([^,]+), Temperature \d+ Celsius reached critical limit of (\d+) Celsius/)) {
+   # Device: /dev/sda, Temperature 38 Celsius reached critical limit of 15 Celsius (Min/Max 38!/39)
+      $TempCritLimit{"$Device,$Limit"}++;    
+   } elsif ( my ($Device,$NewVal) = ($ThisLine =~ /^Device: ([^,]+), Temperature changed [-+]?\d+ Celsius to (\d+) Celsius/)) {
       push @{$TempChanges{$Device}},$NewVal;
    } elsif ( my ($Device, $Num) = ($ThisLine =~ /^Device: ([^,]+), (\d+) Currently unreadable \(pending\) sectors/) ) {
       $Pendsectors{$Device}++;
@@ -178,14 +186,31 @@ if (keys %TempChanges) {
                        print "\n";
                }
    }
-       if($Detail < 10) {
+   if($Detail < 10) {
           my @sorttemp = sort @min;
                my $mint = $sorttemp[0];
           my @sorttemp = sort @max;
                my $maxt = $sorttemp[$#sorttemp];
           print "All devices: $mint - $maxt\n";
-       }
+   }
+}
+
+if (keys %TempCritLimit) {
+   printf "\nReached critical temperature limit:\n";
+   foreach (keys %TempCritLimit) {
+      my ($Device,$Limit)=split ",";
+      print "\t" . $Device . ": reached limit of " . $Limit . " Celsius: ". $TempCritLimit{"$Device,$Limit"} .  " Time(s)\n";
+   }
+}
+
+if (keys %TempLimit) {
+   printf "\nReached temperature limit:\n";
+   foreach (keys %TempLimit) {
+      my ($Device,$Limit)=split ",";
+      print "\t" . $Device . ": reached limit of " . $Limit . " Celsius: ". $TempLimit{"$Device,$Limit"} .  " Time(s)\n";
+   } 
 }
+                       
 
 if (keys %Pendsectors){
    print "\nCurrently unreadable (pending) sectors detected:\n";
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.