X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=dsa-nagios-checks%2Fchecks%2Fdsa-check-hpasm;h=8ef79c9bad5ddf5195c707775630a731d441ba64;hb=6c0adcb2d233089a50525ebf584442d2b808b6a3;hp=749b6d29e116d26c8f9346d5e268338dd5ceb42d;hpb=d854d0f0144a049ff6a1c6b8bc7e5292de1fe373;p=mirror%2Fdsa-nagios.git diff --git a/dsa-nagios-checks/checks/dsa-check-hpasm b/dsa-nagios-checks/checks/dsa-check-hpasm index 749b6d2..8ef79c9 100755 --- a/dsa-nagios-checks/checks/dsa-check-hpasm +++ b/dsa-nagios-checks/checks/dsa-check-hpasm @@ -2,11 +2,14 @@ use strict; use warnings; +use English; +use Getopt::Long; # check status of various hardware devices (fans, temp, dimms, powersupply) # requires hpasmcli # Copyright (c) 2009 Stephen Gran +# Copyright (c) 2009,2010,2012 Peter Palfrader # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the @@ -42,9 +45,33 @@ my %callbacks = ( 'SHOW TEMP' => \&do_temp, ); + +my $params = {}; + +my $USAGE = "PROGRAM_NAME: Usage: $PROGRAM_NAME [--help] [--ps-no-redundant] [--fan-no-redundant] [--fan-high] [--dimm-na] [--fan-ignore-not-present] [--ignore-failed= [--ignore-failed=]n"; +Getopt::Long::config('bundling'); +if (!GetOptions ($params, + '--help', + '--ps-no-redundant', + '--fan-no-redundant', + '--fan-high', + '--dimm-na', + '--fan-ignore-not-present', + '--ignore-failed=s@', + )) { + die ("$USAGE"); +}; +if ($params->{'help'}) { + print "$USAGE"; + print "Checks hp hardware health.\n"; + exit (0); +}; + + my $prompt = "hpasmcli>"; my $exit_status = 0; my $ret = ''; +my %ignore_failed = map {$_ => 1} @{$params->{'ignore-failed'}}; sub do_dimm { my @output = @_; @@ -61,9 +88,11 @@ sub do_dimm { if ($line =~ /(^\s*$|-----)/) { if ($in_block) { - if ($status ne 'Ok') { - $message = sprintf("DIMM%d: %s ", $dimm_num, $status); - $exit_status |= 2; + unless (($status eq 'Ok') || + ($params->{'dimm-na'} && $status eq 'N/A')) { + my $what = sprintf("DIMM%d", $dimm_num); + $message = sprintf("%s: %s ", $what, $status); + $exit_status |= 2 unless (exists $ignore_failed{$what}); } $return .= $message if ($message); $message = $status = ''; @@ -83,7 +112,7 @@ sub do_dimm { } if ($return eq '') { - return "All DIMMS OK ($num_dimms) "; + return "DIMMS OK ($num_dimms) "; } else { return $return; } @@ -112,15 +141,21 @@ sub do_fans { $num_fans++; my @line = split /\s+/, $line; + if ($line[1] eq 'VIRTUAL') { # blade, etc + $message = 'FAN1: (virtual) OK '; + last; + } + + my $what = sprintf("FAN%d", $fan_num); if ($line[2] ne 'Yes') { - $message = sprintf("FAN%d: status=%s ", $fan_num, $line[2]); - $exit_status |= 2; + $message = sprintf("%s: status=%s ", $what, $line[2]); + $exit_status |= 2 unless ($params->{'fan-ignore-not-present'} || (exists $ignore_failed{$what})); } elsif ($line[3] ne 'NORMAL') { - $message = sprintf("FAN%d: speed=%s ", $fan_num, $line[3]); - $exit_status |= 1; + $message = sprintf("%s: speed=%s ", $what, $line[3]); + $exit_status |= 1 unless ($line[3] eq 'HIGH' && $params->{'fan-high'} || (exists $ignore_failed{$what})); } elsif ($line[5] ne 'Yes') { - $message = sprintf("FAN%d: redundant=%s ",$fan_num, $line[5]); - $exit_status |= 1; + $message = sprintf("%s: redundant=%s ", $what, $line[5]); + $exit_status |= 1 unless ($params->{'fan-no-redundant'} || (exists $ignore_failed{$what})); } } elsif ($line =~ /($prompt|^\s*$)/) { last; @@ -137,7 +172,8 @@ sub do_fans { sub do_powersupply { my @output = @_; - my $ps_num = my $return = my $message = ''; + my $ps_num = '?'; + my $return = my $message = ''; my $header_seen = my $num_ps = 0; for my $line (@output) { @@ -148,6 +184,7 @@ sub do_powersupply { next; } + my $what = sprintf("PS%s", $ps_num); if ($line =~ /^Power supply #(\d+)/) { if ($num_ps) { $return .= $message if ($message); @@ -158,20 +195,20 @@ sub do_powersupply { } elsif ($line =~ /\s+Present\s*:\s+(.*)/) { my $present = $1; if ($present ne 'Yes') { - $message = sprintf("PS%d missing ", $ps_num); - $exit_status |= 1; + $message = sprintf("%s missing ", $what); + $exit_status |= 1 unless (exists $ignore_failed{$what}); } } elsif ($line =~ /\s+Condition\s*:\s+(.*)/) { my $status = $1; if ($status ne 'Ok') { - $message = sprintf("PS%d: %s ", $ps_num, $status); - $exit_status |= 2; + $message = sprintf("%s: %s ", $what, $status); + $exit_status |= 2 unless (exists $ignore_failed{$what}); } } elsif ($line =~ /\s+Redundant\s*:\s+(.*)/) { my $redundant = $1; if ($redundant ne 'Yes') { - $message = sprintf("PS%d not redundant ", $ps_num); - $exit_status |= 1; + $message = sprintf("%s not redundant ", $what); + $exit_status |= 1 unless ($params->{'ps-no-redundant'} || (exists $ignore_failed{$what})); } } elsif ($line =~ /($prompt|^\s*$)/) { last; @@ -206,7 +243,6 @@ sub do_temp { } $temp_num = $1; - $num_temp++; my @line = split /\s+/, $line; my $zone = $line[1]; @@ -215,14 +251,19 @@ sub do_temp { $current_temp =~ s/(.*)C.*/$1/; $threshold =~ s/(.*)C.*/$1/; + next if ($threshold eq '-'); + $num_temp++; - my $off = $threshold - $current_temp; - if ($off <= 0) { - $message = sprintf("TEMP zone=%s %sC/%sC ", $zone, $current_temp, $threshold); - $exit_status |= 2; - } elsif ($off < ($threshold/10)) { - $message = sprintf("TEMP zone=%s %sC/%sC ", $zone, $current_temp, $threshold); - $exit_status |= 1; + my $what = sprintf("TEMP zone=%s", $zone); + if ($current_temp ne '-') { + my $off = $threshold - $current_temp; + if ($off <= 0) { + $message = sprintf("%s %sC/%sC ", $what, $current_temp, $threshold); + $exit_status |= 2 unless (exists $ignore_failed{$what}); + } elsif ($off < ($threshold/10)) { + $message = sprintf("%s %sC/%sC ", $what, $current_temp, $threshold); + $exit_status |= 1 unless (exists $ignore_failed{$what}); + } } } elsif ($line =~ /($prompt|^\s*$)/) { last; @@ -236,7 +277,7 @@ sub do_temp { } } -my @output = `echo "$command"|hpasmcli 2>&1`; +my @output = `echo "$command"|sudo hpasmcli 2>&1`; if (($? >> 8) != 0) { print "UNKNOWN: Can't exec hpasmcli: @output\n"; exit 3; @@ -252,7 +293,7 @@ for my $line (@output) { } if ($exit_status & 2) { - print "CRTICAL: $ret\n"; + print "CRITICAL: $ret\n"; exit 2; } elsif ($exit_status & 1) { print "WARNING: $ret\n";