From c176f70372866ba0035efe683b191fdb9ee3f42b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georg=20Sch=C3=B6nberger?= Date: Tue, 1 Oct 2013 18:35:13 +0200 Subject: [PATCH] Check if given temp is an integer Some devices return e.g. N/A as a temperature. Then the temperature checks can be skipped. --- check_lsi_raid | 105 +++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/check_lsi_raid b/check_lsi_raid index 6586770..70e08c1 100755 --- a/check_lsi_raid +++ b/check_lsi_raid @@ -503,65 +503,68 @@ sub getPhysDeviceStatus { } 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, "; } + # check if temp is really a number, could be N/A also + if($values[3] =~ /^[-+]?[0-9]*\.?[0-9]+$/){ + 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, "; } + } } - } 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($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($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, "; } + } 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_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, "; } } } }