From 535361ea4fffd09010131733939c34e1f32683a0 Mon Sep 17 00:00:00 2001 From: Alexander Scheipner Date: Wed, 5 Jun 2013 00:13:00 +0200 Subject: [PATCH] - added virtual disk initialization status - added virtual disk check if disk is consistent when state is optimal - added overall physical disk state check - improved physical disk state parsing - fixed output of --version (didn't work) - minor bugfixes --- check_lsi_raid | 385 ++++++++++++++++++++++++++++--------------------- 1 file changed, 220 insertions(+), 165 deletions(-) diff --git a/check_lsi_raid b/check_lsi_raid index 523f7cc..a21d566 100644 --- a/check_lsi_raid +++ b/check_lsi_raid @@ -1,6 +1,6 @@ #!/usr/bin/perl -w # ====================================================================================== -# $Id: check_lsi_raid 25 2013-05-02 19:36:30Z s1110239032 $ +# $Id$ # check_lsi_raid: Nagios/Icinga plugin to check LSI Raid Controller status # -------------------------------------------------------------------------------------- # Created as part of a semester project at the University of Applied Sciences Hagenberg @@ -32,7 +32,7 @@ use feature qw/switch/; #sp #use Switch 'Perl6'; our $VERBOSITY = 0; -our $VERSION = "0.1"; +our $VERSION = "0.2"; our $NAME = "check_lsi_raid: Nagios/Icinga plugin to check LSI Raid Controller status"; use constant { @@ -66,7 +66,7 @@ sub displayUsage { print " [ -h | --help ]\n Display this help page\n"; print " [ -v | -vv | -vvv | --verbose ]\n Sets the verbosity level.\n no -v is the normal single line output for Nagios/Icinga\n -v is a more detailed version but still usable in Nagios.\n -vv is a multiline output for debugging configuration errors or more detailed information.\n -vvv is for plugin problem diagnosis.\n For further information please visit: http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN39\n"; print " [ -V --version ]\n Displays the Version of the tk-lsi-plugin and the version of StorCLI\n"; - print " [ -C | --controller ]\n Specifies a Controller number, defaults to 1\n"; + print " [ -C | --controller ]\n Specifies a Controller number, defaults to 0\n"; print " [ -EID | --enclosure ]\n Specifies one or more Enclosures, defaults to all\n Takes either an integer as additional argument (>=0) or a comma seperated list(0,1,2,3,...)\n"; print " [ -LD | --logicaldevice ]\n Specifies one or more Logical Devices, defaults to all\n Takes either an integer as additional argument (>=0) or a comma seperated list(0,1,2,3,...)\n"; print " [ -PD | --physicaldevice ]\n Specifies one or more Physical Devices, defaults to all\n Takes either an integer as additional argument (>=0) or a comma seperated list(0,1,2,3,...)\n"; @@ -93,7 +93,7 @@ http://www.thomas-krenn.com/en/oss/ Send email to the -plugin-user mailing list if you have questions regarding use of this software, to submit patches, or suggest improvements. The mailing list is available at http://lists.thomas-krenn.com/"; - exit(STATE_UNKNOWN); + exit(STATE_OK); } # Prints the Name, Version of the Plugin @@ -109,6 +109,8 @@ sub displayVersion { print $line; } } + print "\n"; + exit(STATE_OK); } # Returns information about: @@ -211,6 +213,7 @@ sub getLogicalDeviceStatus { my $storcli = $_[1]; my $controller = $_[2]; my @logDevices = @{($_[3])}; + my $action = $_[4]; my $command = "$sudo $storcli /c$controller "; my $status = 0; # Return Status @@ -221,36 +224,64 @@ sub getLogicalDeviceStatus { when(1) { $command .= "/v$logDevices[0]"; } default { $command .= "/v".join(",", @logDevices); } } - $command .= " show all"; + $command .= " show $action"; my @output = `$command`; #my @output = ("", "Status = Success\n", "/c0/v1 :", "1/1 RAID5 Optl RW Yes RWBD - 930.0 GB"); #command successful? if($output[1] eq "Status = Success\n") { - my $output_dev = -1; - my $flag = -1; - foreach my $line (@output) { - #/^([a-zA-Z0-9]*)/ erstes wort - #/(\s+[a-zA-Z0-9]*)/ zweites wort - #/([a-zA-Z0-9]*)$/ letztes wort - if($flag > 0) { - $flag--; - } elsif($line =~ /^\/c$controller\/v([0-9]*)/) { - $output_dev = $1; - $flag = 6; + if($action eq "all") { + my $output_dev = -1; + my $flag = -1; + foreach my $line (@output) { + if($flag > 0) { + $flag--; + } elsif($line =~ /^\/c$controller\/v([0-9]*)/) { + $output_dev = $1; + $flag = 6; + } + if($flag eq 0) { + $flag = -1; + my @values = split(' ',$line); + if($values[2] ne "Optl") { + if($values[4] eq "Yes") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Virtual disk state not optimal, "; } + if ($VERBOSITY >= 1) {$statusMessage .= "Virtual disk $output_dev state not optimal ($values[2]), "; } + } else { + $status = getExitState($status, STATE_CRITICAL); + if ($VERBOSITY == 0) {$statusMessage .= "Virtual disk not consistant, "; } + if ($VERBOSITY >= 1) {$statusMessage .= "Virtual disk $output_dev is not consistant (state $values[2]), "; } + } + } + else { + if($values[4] ne "Yes") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Virtual disk state optimal, but not consistent, "; } + if ($VERBOSITY >= 1) {$statusMessage .= "Virtual disk $output_dev state optimal, but not consistent, "; } + } + } + } } - if($flag eq 0) { - $flag = -1; - my @values = split(' ',$line); - if($values[2] ne "Optl") { - if($values[4] eq "Yes") { - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "Virtual disk state not optimal, "; } - if ($VERBOSITY >= 1) {$statusMessage .= "Virtual disk $output_dev state not optimal ($values[2]), "; } + } elsif($action eq "init") { + my $output_dev = -1; + my $flag = -1; + foreach my $line (@output) { + if($flag > 0 ) { + $flag--; + } elsif($line =~ /^VD\ Operation\ Status\ :/) { + $flag = 6; + } + if($flag eq 0) { + my @values = split(' ',$line); + if($values[0] =~ /^[0-9]*$/) { + if($values[3] ne "Not") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Virtual disk initialization in progress, "; } + if ($VERBOSITY >= 1) {$statusMessage .= "Virtual disk $values[0] initialization in progress ($values[2] %), "; } + } } else { - $status = getExitState($status, STATE_CRITICAL); - if ($VERBOSITY == 0) {$statusMessage .= "Virtual disk not consistant, "; } - if ($VERBOSITY >= 1) {$statusMessage .= "Virtual disk $output_dev is not consistant (state $values[2]), "; } + last; } } } @@ -296,131 +327,152 @@ sub getPhysDeviceStatus { if($action eq "all") { my $output_enc = -1; my $output_dev = -1; + my $flag = -1; foreach my $line (@output) { - my $first; - my $last; - if($line =~ /^Drive\s\/c$controller\/e([0-9]*)\/s([0-9]*)\sState\s\:/) { + if($flag > 0) { + $flag--; + } elsif($line =~ /^Drive\s\/c$controller\/e([0-9]*)\/s([0-9]*)\s\:/) { + # Check the overall drive state $output_enc = $1; $output_dev = $2; - } - if(($output_enc ne -1) && ($output_dev ne -1)) { - if($line =~ /^([a-zA-Z0-9\.]*)/) { - $first = $1; - if($line =~ /([a-zA-Z0-9]*)$/) { - $last = $1; - given($first) { - when("Shield") { - if($last ne "0") { - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "Shield counter (phys. drive) not 0, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: shield counter not 0, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: shield counter not 0, "; } - } + $flag = 6; + } elsif($line =~ /^Drive\s\/c$controller\/e([0-9]*)\/s([0-9]*)\sState\s\:/) { + # Check the drive state in block Detailed information + $output_enc = $1; + $output_dev = $2; + $flag = 1; + } elsif($flag eq 0 && index($line, " ") eq -1) { + # Detect the end of the block which was last checked + $flag = -1; + } elsif($flag eq 0) { + my @values = split(' ',$line); + if($values[0] =~ /^[0-9]*:[0-9]*/) { + # Check the overall drive state + if($values[2] eq "Offln") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Physical drive is offline, "; } + if ($VERBOSITY >= 1) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc is offline, "; } + } elsif($values[2] eq "UBad") { + $status = getExitState($status, STATE_CRITICAL); + if ($VERBOSITY == 0) {$statusMessage .= "Physical drive state is Unconfigured Bad, "; } + if ($VERBOSITY >= 1) {$statusMessage .= "Physical drive $output_dev state in enclosure $output_enc is Unconfigured Bad, "; } + } + } elsif($values[0] =~ /^[a-zA-Z\.]*/) { + # Check the drive state in block Detailed information + given($values[0]) { + when("Shield") { + if($values[3] ne "0") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Shield counter (phys. drive) not 0, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: shield counter not 0, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: shield counter not 0, "; } } - when("Media") { - if($last ne "0") { - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "Media error count (phys. drive) not 0, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: media error count not 0, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: media error count not 0, "; } - } + } + when("Media") { + if($values[4] ne "0") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Media error count (phys. drive) not 0, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: media error count not 0, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: media error count not 0, "; } } - when("Other") { - if($last ne "0") { - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "Other error count (phys. drive) not 0, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: media error count not 0, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: media error count not 0, "; } - } + } + when("Other") { + if($values[4] ne "0") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Other error count (phys. drive) not 0, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: media error count not 0, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: media error count not 0, "; } } - when("Drive") { - if($line =~ /^Drive\sTemperature\s=\s*(-?[0-9]*)C/) { - my $temp = $1; - my $crit = 0; - # check for warn range - if($physicalDeviceTemperature_w[0] eq "in") { - if(($temp >= $physicalDeviceTemperature_w[1]) && ($temp <= $physicalDeviceTemperature_w[2])) { - # is in warn range, so also check if in critical error range - if($physicalDeviceTemperature_c[0] eq "in") { - if(($temp >= $physicalDeviceTemperature_c[1]) && ($temp <= $physicalDeviceTemperature_c[2])) { - # critical error - $crit = 1; - $status = getExitState($status, STATE_CRITICAL); - if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } - } - } else { - if(($temp < $physicalDeviceTemperature_c[1]) || ($temp > $physicalDeviceTemperature_c[2])) { - # critical error - $crit = 1; - $status = getExitState($status, STATE_CRITICAL); - if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } - } - } - if($crit eq 0) { # only warn if not already given a critical error - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature warning, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } - } + } + when("Drive") { + chop($values[3]); + my $temp = $values[3]; + my $crit = 0; + # check for warn range + if($physicalDeviceTemperature_w[0] eq "in") { + if(($temp >= $physicalDeviceTemperature_w[1]) && ($temp <= $physicalDeviceTemperature_w[2])) { + # is in warn range, so also check if in critical error range + if($physicalDeviceTemperature_c[0] eq "in") { + if(($temp >= $physicalDeviceTemperature_c[1]) && ($temp <= $physicalDeviceTemperature_c[2])) { + # critical error + $crit = 1; + $status = getExitState($status, STATE_CRITICAL); + if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } } } else { - if(($temp < $physicalDeviceTemperature_w[1]) || ($temp > $physicalDeviceTemperature_w[2])) { - # is in warn range, so also check if in critical error range - if($physicalDeviceTemperature_c[0] eq "in") { - if(($temp >= $physicalDeviceTemperature_c[1]) && ($temp <= $physicalDeviceTemperature_c[2])) { - # critical error - $crit = 1; - $status = getExitState($status, STATE_CRITICAL); - if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } - } - } else { - if(($temp < $physicalDeviceTemperature_c[1]) || ($temp > $physicalDeviceTemperature_c[2])) { - # critical error - $crit = 1; - $status = getExitState($status, STATE_CRITICAL); - if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } - } - } - if($crit eq 0) { # only warn if not already given a critical error - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature warning, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } - } + if(($temp < $physicalDeviceTemperature_c[1]) || ($temp > $physicalDeviceTemperature_c[2])) { + # critical error + $crit = 1; + $status = getExitState($status, STATE_CRITICAL); + if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } } } + if($crit eq 0) { # only warn if not already given a critical error + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature warning, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } + } + } + } else { + if(($temp < $physicalDeviceTemperature_w[1]) || ($temp > $physicalDeviceTemperature_w[2])) { + # is in warn range, so also check if in critical error range + if($physicalDeviceTemperature_c[0] eq "in") { + if(($temp >= $physicalDeviceTemperature_c[1]) && ($temp <= $physicalDeviceTemperature_c[2])) { + # critical error + $crit = 1; + $status = getExitState($status, STATE_CRITICAL); + if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } + } + } else { + if(($temp < $physicalDeviceTemperature_c[1]) || ($temp > $physicalDeviceTemperature_c[2])) { + # critical error + $crit = 1; + $status = getExitState($status, STATE_CRITICAL); + if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature critical, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } + } + } + if($crit eq 0) { # only warn if not already given a critical error + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive temperature warning, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: temperature is ${temp}C, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: temperature is ${temp}C, "; } + } } } - when("Predictive") { - if($last ne "0") { - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive Predictive Fail Count not 0, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: Predictive Fail Count not 0, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: Predictive Fail Count not 0, "; } - } + } + when("Predictive") { + if($values[4] ne "0") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "Phys. drive Predictive Fail Count not 0, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: Predictive Fail Count not 0, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: Predictive Fail Count not 0, "; } } - when("S.M.A.R.T") { - if($last ne "No") { - $status = getExitState($status, STATE_WARNING); - if ($VERBOSITY == 0) {$statusMessage .= "S.M.A.R.T alert flagged by drive, "; } - if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: S.M.A.R.T alert flagged, "; } - if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: S.M.A.R.T alert flagged, "; } - } + } + when("S.M.A.R.T") { + if($values[6] ne "No") { + $status = getExitState($status, STATE_WARNING); + if ($VERBOSITY == 0) {$statusMessage .= "S.M.A.R.T alert flagged by drive, "; } + if ($VERBOSITY == 1) {$statusMessage .= "Physical drive $output_dev: S.M.A.R.T alert flagged, "; } + if ($VERBOSITY >= 2) {$statusMessage .= "Physical drive $output_dev in enclosure $output_enc: S.M.A.R.T alert flagged, "; } } } } + } else { + $flag = -1; } } } } else { + # Check initialization or rebuild output my $output_enc = -1; my $output_dev = -1; foreach my $line (@output) { @@ -642,36 +694,14 @@ MAIN: { my @enclosures; my @logDevices; my @physDevices; - my @temperature_w; + my @temperature_w; my @temperature_c; my @physicalDeviceTemperature_w; my @physicalDeviceTemperature_c; my $bbu = 1; my $platform = $^O; - my $statusMessage = ''; + my $statusMessage = ''; - if ( !(GetOptions( - 'h|help' => sub {displayHelp();}, - 'v|verbose' => sub {$VERBOSITY = 1 }, - 'vv' => sub {$VERBOSITY = 2}, - 'vvv' => sub {$VERBOSITY = 3}, - 'V|version' => sub {displayVersion($sudo, $storcli);}, - 'C|controller=i' => \$controller, - 'EID|enclosure=s' => \@enclosures, - 'LD|logicaldevice=s' => \@logDevices, - 'PD|physicaldevice=s' => \@physDevices, - 'Tw|temperature-warn=s' => \@temperature_w, - 'Tc|temperature-critical=s' => \@temperature_c, - 'PDTw|physicaldevicetemperature-warn=s' => \@physicalDeviceTemperature_w, - 'PDTc|physicaldevicetemperature-critical=s' => \@physicalDeviceTemperature_c, - 'p|path=s' => \$storcli, - 'b|BBU=i' => \$bbu - ))) { - print $NAME . " Version: " . $VERSION ."\n"; - displayUsage(); - exit(STATE_UNKNOWN); - } - # Check platform if ($platform eq 'linux') { chomp($sudo = `which sudo`); @@ -706,15 +736,37 @@ MAIN: { } } - # Input validation - my @controllerVersion = `$sudo $storcli /c$controller show all`; + if ( !(GetOptions( + 'h|help' => sub {displayHelp();}, + 'v|verbose' => sub {$VERBOSITY = 1 }, + 'vv' => sub {$VERBOSITY = 2}, + 'vvv' => sub {$VERBOSITY = 3}, + 'V|version' => sub {displayVersion($sudo, $storcli);}, + 'C|controller=i' => \$controller, + 'EID|enclosure=s' => \@enclosures, + 'LD|logicaldevice=s' => \@logDevices, + 'PD|physicaldevice=s' => \@physDevices, + 'Tw|temperature-warn=s' => \@temperature_w, + 'Tc|temperature-critical=s' => \@temperature_c, + 'PDTw|physicaldevicetemperature-warn=s' => \@physicalDeviceTemperature_w, + 'PDTc|physicaldevicetemperature-critical=s' => \@physicalDeviceTemperature_c, + 'p|path=s' => \$storcli, + 'b|BBU=i' => \$bbu + ))) { + print $NAME . " Version: " . $VERSION ."\n"; + displayUsage(); + exit(STATE_UNKNOWN); + } + + # Input validation + my @controllerVersion = `$sudo $storcli /c$controller show all`; #my @controllerVersion = ("", "", "Description = None\n"); - if($controllerVersion[2] eq "Description = Controller $controller not found\n") { - print "Invalid controller number, device not found!"; - exit(STATE_UNKNOWN); - } + if($controllerVersion[2] eq "Description = Controller $controller not found\n") { + print "Invalid controller number, device not found!\n"; + exit(STATE_UNKNOWN); + } if(($bbu ne "1") && ($bbu ne "0")) { - print "Invalid BBU parameter, must be 0 or 1!"; + print "Invalid BBU parameter, must be 0 or 1!\n"; exit(STATE_UNKNOWN); } else { if($bbu eq "1") { @@ -759,7 +811,10 @@ MAIN: { ($newexitstatus, $statusMessage) = getControllerStatus($sudo, $storcli, $controller, \@temperature_w, \@temperature_c); $newstatusMessage .= $statusMessage; $exitstatus = getExitState($newexitstatus, $exitstatus); - ($newexitstatus, $statusMessage) = getLogicalDeviceStatus($sudo, $storcli, $controller, \@logDevices); + ($newexitstatus, $statusMessage) = getLogicalDeviceStatus($sudo, $storcli, $controller, \@logDevices, "init"); + $newstatusMessage .= $statusMessage; + $exitstatus = getExitState($newexitstatus, $exitstatus); + ($newexitstatus, $statusMessage) = getLogicalDeviceStatus($sudo, $storcli, $controller, \@logDevices, "all"); $newstatusMessage .= $statusMessage; $exitstatus = getExitState($newexitstatus, $exitstatus); ($newexitstatus, $statusMessage) = getPhysDeviceStatus($sudo, $storcli, $controller, \@enclosures, \@physDevices, \@physicalDeviceTemperature_w, \@physicalDeviceTemperature_c, "initialization"); @@ -782,4 +837,4 @@ MAIN: { when(2) { chop($newstatusMessage); chop($newstatusMessage); print "LSIRAID CRITICAL (Ctrl #$controller): [$newstatusMessage]\n"; } } exit($exitstatus); -} \ No newline at end of file +}