diff --git a/.includepath b/.includepath
new file mode 100644
index 0000000..6dc9943
--- /dev/null
+++ b/.includepath
@@ -0,0 +1,3 @@
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..564431b
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ check_lsi_raid
+
+
+
+
+
+ org.epic.perleditor.perlbuilder
+
+
+
+
+
+ org.epic.perleditor.perlnature
+
+
diff --git a/check_lsi_raid b/check_lsi_raid
index 6cf8a88..9aecc1e 100644
--- a/check_lsi_raid
+++ b/check_lsi_raid
@@ -15,20 +15,18 @@
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
-#
+#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
-#
+#
# You should have received a copy of the GNU General Public License along with
# this program; if not, see .
# ======================================================================================
use strict;
use warnings;
use Getopt::Long qw(:config no_ignore_case);
-use feature qw/switch/; #später durch nachfolgende Zeile ersetzen, da wir noch mit Perl 5 arbeiten!
-#use Switch 'Perl6';
our $VERBOSITY = 0;
our $VERSION = "0.3";
@@ -38,7 +36,7 @@ our $C_TEMP_CRITICAL = 65;
our $PD_TEMP_WARNING = 40;
our $PD_TEMP_CRITICAL = 45;
-use constant {
+use constant {
STATE_OK => 0,
STATE_WARNING => 1,
STATE_CRITICAL => 2,
@@ -86,18 +84,21 @@ sub displayUsage {
sub displayHelp {
print $NAME . " Version: " . $VERSION ."\n";
print "Copyright (C) 2009-2013 Thomas-Krenn.AG\n";
- print "Current updates available at http://www.thomas-krenn.com/en/oss//\n";
+ print "Current updates available at http://git.thomas-krenn.com/check_lsi_raid.git\n";
print "This Nagios/Icinga Plugin checks LSI RAID-Controllers for Controller, \nPhysical-Device and Logical Device warnings and errors.\n";
print "In order for this plugin to work properly you need to add the \nnagios-user to your sudoers file (or create a new one in /etc/sudoers.d/)\n";
displayUsage();
- print "Further information about this plugin can be found at
-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/\n";
+ print "Further information about this plugin can be found at:
+ http://www.thomas-krenn.com/de/wiki/LSI_RAID_Monitoring_Plugin and
+ http://www.thomas-krenn.com/de/wiki/LSI_RAID_Monitoring_Plugin
+Please send an email to the tk-monitoring plugin-user mailing list:
+ tk-monitoring-plugins-user\@lists.thomas-krenn.com
+if you have questions regarding use of this software, to submit patches, or
+suggest improvements. The mailing list archive is available at:
+ http://lists.thomas-krenn.com/pipermail/tk-monitoring-plugins-user\n";
exit(STATE_OK);
}
-
+
# Prints the Name, Version of the Plugin
# Also Prints the version of StorCLI
sub displayVersion {
@@ -140,188 +141,182 @@ sub getControllerStatus {
$first = $1;
if($line =~ /([a-zA-Z0-9]*)$/) {
$last = $1;
- given($first) {
- when("Controller") {
- if($line =~ /\s+([a-zA-Z0-9]*)/) {
- given($1) {
- when("Status") {
- if($last ne "OK") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "Ctrl. status not optimal, ";
- }
- }
- when("must") {
- if($last ne "No") {
- $status = getExitState($status, STATE_CRITICAL);
- $statusMessage .= "Ctrl. needs reboot, ";
- }
- }
- when("has") {
- if($last ne "No") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "Ctrl. booted in safe mode, ";
- }
- }
- when("temperature") {
- $temp = $last;
- if($temperature_w[0] eq "in") {
- if(($temp >= $temperature_w[1]) && ($temp <= $temperature_w[2])) {
- # is in warn range, so also check if in critical error range
- if($temperature_c[0] eq "in") {
- if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
- }
- } else {
- if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
- }
- }
- if($crit eq 0) { # only warn if not already given a critical error
- $status = getExitState($status, STATE_WARNING);
- if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. warning, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. warning (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature warning (${temp}C), "; }
- }
+ if($first eq "Controller") {
+ if($line =~ /\s+([a-zA-Z0-9]*)/) {
+ if($1 eq "Status") {
+ if($last ne "OK") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "Ctrl. status not optimal, ";
+ }
+ }
+ elsif($1 eq "must") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_CRITICAL);
+ $statusMessage .= "Ctrl. needs reboot, ";
+ }
+ }
+ elsif($1 eq "has") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "Ctrl. booted in safe mode, ";
+ }
+ }
+ elsif($1 eq "temperature") {
+ $temp = $last;
+ if($temperature_w[0] eq "in") {
+ if(($temp >= $temperature_w[1]) && ($temp <= $temperature_w[2])) {
+ # is in warn range, so also check if in critical error range
+ if($temperature_c[0] eq "in") {
+ if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
}
} else {
- if(($temp < $temperature_w[1]) || ($temp > $temperature_w[2])) {
- # is in warn range, so also check if in critical error range
- if($temperature_c[0] eq "in") {
- if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
- }
- } else {
- if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
- }
- }
- if($crit eq 0) { # only warn if not already given a critical error
- $status = getExitState($status, STATE_WARNING);
- if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. warning, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. warning (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature warning (${temp}C), "; }
- }
+ if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
}
}
- }
- }
- }
- }
- when("ROC") {
- if($line =~ /\s+([a-zA-Z0-9]*)/) {
- if($1 eq "temperature") {
- $temp = $last;
- if($temperature_w[0] eq "in") {
- if(($temp >= $temperature_w[1]) && ($temp <= $temperature_w[2])) {
- # is in warn range, so also check if in critical error range
- if($temperature_c[0] eq "in") {
- if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
- }
- } else {
- if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
- }
- }
- if($crit eq 0) { # only warn if not already given a critical error
- $status = getExitState($status, STATE_WARNING);
- if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. warning, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. warning (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature warning (${temp}C), "; }
- }
- }
- } else {
- if(($temp < $temperature_w[1]) || ($temp > $temperature_w[2])) {
- # is in warn range, so also check if in critical error range
- if($temperature_c[0] eq "in") {
- if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
- }
- } else {
- if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
- # critical error
- $crit = 1;
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
- }
- }
- if($crit eq 0) { # only warn if not already given a critical error
- $status = getExitState($status, STATE_WARNING);
- if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. warning, "; }
- if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. warning (${temp}C), "; }
- if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature warning (${temp}C), "; }
- }
- }
- }
- }
- }
- }
- when("Memory") {
- if($line =~ /(\s+[a-zA-Z0-9]*)/) {
- given($1) {
- when("Correctable") {
- if($last ne "0") {
+ if($crit eq 0) { # only warn if not already given a critical error
$status = getExitState($status, STATE_WARNING);
- $statusMessage .= "Memory correctable errors detected, ";
+ if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. warning, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. warning (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature warning (${temp}C), "; }
}
}
- when("Uncorrectable") {
- if($last ne "0") {
- $status = getExitState($status, STATE_CRITICAL);
- $statusMessage .= "Memory uncorrectable errors detected, ";
+ } else {
+ if(($temp < $temperature_w[1]) || ($temp > $temperature_w[2])) {
+ # is in warn range, so also check if in critical error range
+ if($temperature_c[0] eq "in") {
+ if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
+ }
+ } else {
+ if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature is critical (${temp}C), "; }
+ }
+ }
+ if($crit eq 0) { # only warn if not already given a critical error
+ $status = getExitState($status, STATE_WARNING);
+ if ($VERBOSITY == 0) {$statusMessage .= "Ctrl. temp. warning, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "Ctrl. temp. warning (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "Controller temperature warning (${temp}C), "; }
}
}
}
}
}
- when("Failed") {
- if($last ne "No") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "Failed to get lock key on bootup, ";
+ }
+ elsif($first eq "ROC") {
+ if($line =~ /\s+([a-zA-Z0-9]*)/) {
+ if($1 eq "temperature") {
+ $temp = $last;
+ if($temperature_w[0] eq "in") {
+ if(($temp >= $temperature_w[1]) && ($temp <= $temperature_w[2])) {
+ # is in warn range, so also check if in critical error range
+ if($temperature_c[0] eq "in") {
+ if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
+ }
+ } else {
+ if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
+ }
+ }
+ if($crit eq 0) { # only warn if not already given a critical error
+ $status = getExitState($status, STATE_WARNING);
+ if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. warning, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. warning (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature warning (${temp}C), "; }
+ }
+ }
+ } else {
+ if(($temp < $temperature_w[1]) || ($temp > $temperature_w[2])) {
+ # is in warn range, so also check if in critical error range
+ if($temperature_c[0] eq "in") {
+ if(($temp >= $temperature_c[1]) && ($temp <= $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
+ }
+ } else {
+ if(($temp < $temperature_c[1]) || ($temp > $temperature_c[2])) {
+ # critical error
+ $crit = 1;
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. critical, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. is critical (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature is critical (${temp}C), "; }
+ }
+ }
+ if($crit eq 0) { # only warn if not already given a critical error
+ $status = getExitState($status, STATE_WARNING);
+ if ($VERBOSITY == 0) {$statusMessage .= "ROC temp. warning, "; }
+ if ($VERBOSITY == 1) {$statusMessage .= "ROC temp. warning (${temp}C), "; }
+ if ($VERBOSITY >= 2) {$statusMessage .= "ROC temperature warning (${temp}C), "; }
+ }
+ }
+ }
}
}
- when("A") {
- if($last ne "No") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "A rollback operation is in progress, ";
+ }
+ elsif($first eq "Memory") {
+ if($line =~ /(\s+[a-zA-Z0-9]*)/) {
+ if($1 eq "Correctable") {
+ if($last ne "0") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "Memory correctable errors detected, ";
+ }
}
+ elsif($1 eq "Uncorrectable") {
+ if($last ne "0") {
+ $status = getExitState($status, STATE_CRITICAL);
+ $statusMessage .= "Memory uncorrectable errors detected, ";
+ }
+ }
+ }
+ }
+ elsif($first eq "Failed") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "Failed to get lock key on bootup, ";
+ }
+ }
+ elsif($first eq "A") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "A rollback operation is in progress, ";
}
}
}
@@ -331,7 +326,7 @@ sub getControllerStatus {
} else {
print "Invalid StorCLI command!";
exit(STATE_UNKNOWN);
- }
+ }
}
# Returns information about:
@@ -347,11 +342,10 @@ sub getLogicalDeviceStatus {
my $status = 0; # Return Status
my $statusMessage = ''; # Return String
- given(scalar(@logDevices)) {
- when(0) { $command .= "/vall"; }
- when(1) { $command .= "/v$logDevices[0]"; }
- default { $command .= "/v".join(",", @logDevices); }
- }
+ if(scalar(@logDevices) == 0) { $command .= "/vall"; }
+ elsif(scalar(@logDevices) == 1) { $command .= "/v$logDevices[0]"; }
+ else { $command .= "/v".join(",", @logDevices); }
+
$command .= " show $action";
my @output = `$command`;
@@ -435,19 +429,17 @@ sub getPhysDeviceStatus {
my $status = 0;
my $statusMessage = '';
- given(scalar(@enclosures)) {
- when(0) { $command .= "/eall"; }
- when(1) { $command .= "/e$enclosures[0]"; }
- default { $command .= "/e".join(",", @enclosures); }
- }
- given(scalar(@physDevices)) {
- when(0) { $command .= "/sall"; }
- when(1) { $command .= "/s$physDevices[0]"; }
- default { $command .= "/s".join(",", @physDevices); }
- }
+ if(scalar(@enclosures) == 0) { $command .= "/eall"; }
+ elsif(scalar(@enclosures) == 1) { $command .= "/e$enclosures[0]"; }
+ else { $command .= "/e".join(",", @enclosures); }
+
+ if(scalar(@physDevices) == 0) { $command .= "/sall"; }
+ elsif(scalar(@physDevices) == 1) { $command .= "/s$physDevices[0]"; }
+ else { $command .= "/s".join(",", @physDevices); }
+
$command .= " show $action";
my @output = `$command`;
-
+
if($output[1] eq "Status = Success\n") {
if($action eq "all") {
my $output_enc = -1;
@@ -484,111 +476,109 @@ sub getPhysDeviceStatus {
}
} 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, "; }
- }
+ if($values[0] eq "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($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, "; }
- }
+ }
+ elsif($values[0] eq "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($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, "; }
- }
+ }
+ elsif($values[0] eq "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") {
- 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_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, "; }
- }
+ }
+ elsif($values[0] eq "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, "; }
}
- 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, "; }
+ } 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, "; }
}
}
- } 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, "; }
+ }
+ }
+ } 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, "; }
}
- 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, "; }
+ } 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($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, "; }
- }
+ }
+ elsif($values[0] eq "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($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, "; }
- }
+ }
+ elsif($values[0] eq "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 {
@@ -652,16 +642,12 @@ sub getBBUStatus {
$last = $1;
# Check BBU_Info block
if ($blockid eq 1) {
- given($first) {
- when("Battery") {
- if($line =~ /\s+([a-zA-Z0-9]*)/) {
- given($1) {
- when("State") {
- if($last ne "Optimal") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "BBU state not optimal, ";
- }
- }
+ if($first eq "Battery") {
+ if($line =~ /\s+([a-zA-Z0-9]*)/) {
+ if($1 eq "State") {
+ if($last ne "Optimal") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "BBU state not optimal, ";
}
}
}
@@ -669,81 +655,75 @@ sub getBBUStatus {
}
# Check BBU_Firmware_Status
if ($blockid eq 2) {
- given($first) {
- when("Temperature") {
- if($last ne "OK") {
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "BBU temp. critical, "; }
- if ($VERBOSITY >= 1) {$statusMessage .= "BBU Temperature critical, "; }
- }
+ if($first eq "Temperature") {
+ if($last ne "OK") {
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "BBU temp. critical, "; }
+ if ($VERBOSITY >= 1) {$statusMessage .= "BBU Temperature critical, "; }
}
- when("Battery") {
- if($line =~ /\s+([a-zA-Z0-9]*)/) {
- given($1) {
- when("State") {
- if($last ne "Optimal") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "BBU state not optimal, ";
- }
- }
- when("Pack") {
- if($last ne "No") {
- $status = getExitState($status, STATE_CRITICAL);
- $statusMessage .= "BBU pack missing, ";
- }
- }
- when("Replacement") {
- if($last ne "No") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "BBU replacement required, ";
- }
- }
+ }
+ elsif($first eq "Battery") {
+ if($line =~ /\s+([a-zA-Z0-9]*)/) {
+ if($1 eq "State") {
+ if($last ne "Optimal") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "BBU state not optimal, ";
+ }
+ }
+ elsif($1 eq "Pack") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_CRITICAL);
+ $statusMessage .= "BBU pack missing, ";
+ }
+ }
+ elsif($1 eq "Replacement") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "BBU replacement required, ";
}
}
}
- when("Voltage") {
- if($last ne "OK") {
- $status = getExitState($status, STATE_CRITICAL);
- $statusMessage .= "BBU voltage not ok, ";
- }
+ }
+ elsif($first eq "Voltage") {
+ if($last ne "OK") {
+ $status = getExitState($status, STATE_CRITICAL);
+ $statusMessage .= "BBU voltage not ok, ";
}
- when("Learn") {
- if($last ne "OK") {
- $status = getExitState($status, STATE_WARNING);
- $statusMessage .= "BBU learn cycle status not ok, ";
- }
+ }
+ elsif($first eq "Learn") {
+ if($last ne "OK") {
+ $status = getExitState($status, STATE_WARNING);
+ $statusMessage .= "BBU learn cycle status not ok, ";
}
- when("I2C") {
- if($last ne "No") {
- $status = getExitState($status, STATE_CRITICAL);
- $statusMessage .= "BBU I2C errors, ";
- }
+ }
+ elsif($first eq "I2C") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_CRITICAL);
+ $statusMessage .= "BBU I2C errors, ";
}
- when("Remaining") {
- if($last ne "No") {
- $status = getExitState($status, STATE_WARNING);
- if ($VERBOSITY == 0) {$statusMessage .= "BBU capacity low, "; }
- if ($VERBOSITY >= 1) {$statusMessage .= "BBU remaining capacity is low, "; }
- }
+ }
+ elsif($first eq "Remaining") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_WARNING);
+ if ($VERBOSITY == 0) {$statusMessage .= "BBU capacity low, "; }
+ if ($VERBOSITY >= 1) {$statusMessage .= "BBU remaining capacity is low, "; }
}
}
}
# Check GasGaugeStatus
if ($blockid eq 3) {
- given($first) {
- when("Over") {
- if($line =~ /\s+([a-zA-Z0-9]*)/) {
- if($1 eq "Temperature") {
- if($last ne "No") {
- $status = getExitState($status, STATE_CRITICAL);
- if ($VERBOSITY == 0) {$statusMessage .= "BBU temp. critical, "; }
- if ($VERBOSITY >= 1) {$statusMessage .= "BBU Temperature critical, "; }
- }
- } elsif($1 eq "Charged") {
- if($last ne "No") {
- $status = getExitState($status, STATE_CRITICAL);
- $statusMessage .= "BBU over charged, ";
- }
+ if($first eq "Over") {
+ if($line =~ /\s+([a-zA-Z0-9]*)/) {
+ if($1 eq "Temperature") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_CRITICAL);
+ if ($VERBOSITY == 0) {$statusMessage .= "BBU temp. critical, "; }
+ if ($VERBOSITY >= 1) {$statusMessage .= "BBU Temperature critical, "; }
+ }
+ } elsif($1 eq "Charged") {
+ if($last ne "No") {
+ $status = getExitState($status, STATE_CRITICAL);
+ $statusMessage .= "BBU over charged, ";
}
}
}
@@ -825,7 +805,7 @@ MAIN: {
my $bbu = 1;
my $platform = $^O;
my $statusMessage = '';
-
+
# Check platform
if ($platform eq 'linux') {
chomp($sudo = `which sudo`);
@@ -869,7 +849,7 @@ MAIN: {
'C|controller=i' => \$controller,
'EID|enclosure=s' => \@enclosures,
'LD|logicaldevice=s' => \@logDevices,
- 'PD|physicaldevice=s' => \@physDevices,
+ 'PD|physicaldevice=s' => \@physDevices,
'Tw|temperature-warn=s' => \@temperature_w,
'Tc|temperature-critical=s' => \@temperature_c,
'PDTw|physicaldevicetemperature-warn=s' => \@physicalDeviceTemperature_w,
@@ -954,10 +934,8 @@ MAIN: {
$newstatusMessage .= $statusMessage;
$exitstatus = getExitState($newexitstatus, $exitstatus);
}
- given($exitstatus) {
- when(0) { print "LSIRAID OK (Ctrl #$controller)\n"; }
- when(1) { chop($newstatusMessage); chop($newstatusMessage); print "LSIRAID WARNING (Ctrl #$controller): [$newstatusMessage]\n"; }
- when(2) { chop($newstatusMessage); chop($newstatusMessage); print "LSIRAID CRITICAL (Ctrl #$controller): [$newstatusMessage]\n"; }
- }
+ if($exitstatus == 0) { print "LSIRAID OK (Ctrl #$controller)\n"; }
+ elsif($exitstatus == 1) { chop($newstatusMessage); chop($newstatusMessage); print "LSIRAID WARNING (Ctrl #$controller): [$newstatusMessage]\n"; }
+ elsif($exitstatus == 2) { chop($newstatusMessage); chop($newstatusMessage); print "LSIRAID CRITICAL (Ctrl #$controller): [$newstatusMessage]\n"; }
exit($exitstatus);
}
diff --git a/check_lsi_raid.POD b/check_lsi_raid.POD
index 4e81a68..37bc1c6 100644
--- a/check_lsi_raid.POD
+++ b/check_lsi_raid.POD
@@ -30,7 +30,6 @@ It checks the controller, the physical devices and the logical devices seperatel
use strict;
use warnings;
use Getopt::Long qw(:config no_ignore_case);
- use Switch 'Perl6';
=head1 METHODS
@@ -83,7 +82,8 @@ Returns information about physical devices attached to the LSI raid-controller:
- Predictive fail count
- S.M.A.R.T. status
-The device temperature can be set to a warning (parameter: B<-PDTw>|B<--physicaldevicetemperature-warn>) and a critical level (parameter: B<-PDTc>|B<--physicaldevicetemperature-critical>). See getThresholds for more information.
+The device temperature can be set to a warning (parameter: B<-PDTw>|B<--physicaldevicetemperature-warn>)
+and a critical level (parameter: B<-PDTc>|B<--physicaldevicetemperature-critical>). See getThresholds for more information.
=head2 getBBUStatus
@@ -114,9 +114,9 @@ Array content: ("in" or "out", range from, range to).
=head1 LICENSE AND COPYRIGHT
-Copyright (c) 2013,
-Martin Grubhofer C<< >>, C<< >>,
-Scheipner Alexander C<< >>,
+Copyright (c) 2013,
+Martin Grubhofer C<< >>, C<< >>,
+Scheipner Alexander C<< >>,
Werner Sebastian C<< >>.
All rights reserved.
diff --git a/pod2htmd.tmp b/pod2htmd.tmp
deleted file mode 100644
index 61e86d9..0000000
--- a/pod2htmd.tmp
+++ /dev/null
@@ -1,2 +0,0 @@
-
-.