use strict;
use warnings;
+use English;
+use Getopt::Long;
# check status of various hardware devices (fans, temp, dimms, powersupply)
# requires hpasmcli
'SHOW TEMP' => \&do_temp,
);
+
+my $params = {};
+
+my $USAGE = "PROGRAM_NAME: Usage: $PROGRAM_NAME [--help] [--ps-no-redundant] [--fan-no-redundant] [--fan-high]\n";
+Getopt::Long::config('bundling');
+if (!GetOptions (
+ '--help' => \$params->{'help'},
+ '--ps-no-redundant' => \$params->{'ps-no-redundant'},
+ '--fan-no-redundant' => \$params->{'fan-no-redundant'},
+ '--fan-high' => \$params->{'fan-high'},
+ )) {
+ die ("$USAGE");
+};
+if ($params->{'help'}) {
+ print "$USAGE";
+ print "Checks hp hardware health.\n";
+ exit (0);
+};
+
+
my $prompt = "hpasmcli>";
my $exit_status = 0;
my $ret = '';
$num_fans++;
my @line = split /\s+/, $line;
+ if ($line[1] eq 'VIRTUAL') { # blade, etc
+ $message = 'FAN1: (virtual) OK ';
+ last;
+ }
+
if ($line[2] ne 'Yes') {
$message = sprintf("FAN%d: status=%s ", $fan_num, $line[2]);
$exit_status |= 2;
} elsif ($line[3] ne 'NORMAL') {
$message = sprintf("FAN%d: speed=%s ", $fan_num, $line[3]);
- $exit_status |= 1;
+ $exit_status |= 1 unless ($line[3] eq 'HIGH' && $params->{'fan-high'});
} elsif ($line[5] ne 'Yes') {
$message = sprintf("FAN%d: redundant=%s ",$fan_num, $line[5]);
- $exit_status |= 1;
+ $exit_status |= 1 unless ($params->{'fan-no-redundant'});
}
} elsif ($line =~ /($prompt|^\s*$)/) {
last;
my $redundant = $1;
if ($redundant ne 'Yes') {
$message = sprintf("PS%d not redundant ", $ps_num);
- $exit_status |= 1;
+ $exit_status |= 1 unless ($params->{'ps-no-redundant'});
}
} elsif ($line =~ /($prompt|^\s*$)/) {
last;
}
$temp_num = $1;
- $num_temp++;
my @line = split /\s+/, $line;
my $zone = $line[1];
$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;
+ if ($current_temp ne '-') {
+ 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;
+ }
}
} elsif ($line =~ /($prompt|^\s*$)/) {
last;