Code

Fix Debian bug #574612: Return WARNING on rebuild
[nagiosplug.git] / contrib / check_linux_raid.pl
index 85d5dc4a8da5c6a697765ad9773bb8d76031e146..d2e5b4632d4b2b5631f38e45605388a74886efc1 100644 (file)
 #
 # Usage:   check_raid [raid-name]
 # Example: check_raid md0
-#          WARNING md0 status=[UUU_U], recovery=46.4%, finish=123.0min
+#        WARNING md0 status=[UUU_U], recovery=46.4%, finish=123.0min
 
 use strict;
-use lib utils.pm;
+use lib "/usr/local/nagios/libexec";
 use utils qw(%ERRORS);
 
 # die with an error if we're not on Linux
@@ -44,7 +44,7 @@ sub max_state($$){
 
 my $nextdev;
 if(defined $ARGV[0]) { $nextdev = shift; }
-else { $nextdev = "md[0-9]"; }
+else { $nextdev = "md[0-9]+"; }
 
 my $code = "UNKNOWN";
 my $msg = "";
@@ -61,19 +61,18 @@ while(defined $nextdev){
                if (defined $device) {
                        if (/(\[[_U]+\])/) {
                                $status{$device} = $1;
-                               $device = undef;
                        } elsif (/recovery = (.*?)\s/) {  
                                $recovery{$device} = $1;
                                ($finish{$device}) = /finish=(.*?min)/;
-                               $device = undef;
+                               $device=undef;
+                       } elsif (/^\s*$/) {
+                               $device=undef;
                        }
-               } else {
-                       if (/^($nextdev)\s*:/) {
-                               $device=$1;
-                               $devices{$device}=$device;
-                               if (/active/) {
-                                       $active{$device} = 1;
-                               }
+               } elsif (/^($nextdev)\s*:/) {
+                       $device=$1;
+                       $devices{$device}=$device;
+                       if (/active/) {
+                               $active{$device} = 1;
                        }
                }
        }
@@ -82,7 +81,7 @@ while(defined $nextdev){
 
 foreach my $k (sort keys %devices){
        if ($status{$k} =~ /_/) {
-               if ($recovery{$k}) {
+               if (defined $recovery{$k}) {
                        $msg .= sprintf " %s status=%s, recovery=%s, finish=%s.",
                                $devices{$k}, $status{$k}, $recovery{$k}, $finish{$k};
                        $code = max_state($code, "WARNING");