We had a case in the wild where the following "show status" resulted in an OK:
Controller Status: OK
Cache Status: Permanently Disabled
We already fixed the check to emit a WARNING when Cache Status is not
"OK" or "Not Configured" in a previous commit, but it seems there's
another thing we could check: "controller slot=N show detail". This had
a few more values we could check, and specifically:
Cache Status Details: Cable Error
Battery/Capacitor Count: 0
Emit CRITICAL for the former, and CRITICAL for the latter if the count
is 0 and the argument --no-battery hasn't been passed to us.
This is untested on systems that have no battery by design -- hopefully,
Cable Error won't be reported on these.
Signed-off-by: Faidon Liambotis <paravoid@debian.org>
my @drives;
my $nodrives = 0;
my %status;
my @drives;
my $nodrives = 0;
my %status;
my $ldallshow = runcmd("controller slot=$slot ld all show");
my @logicaldrives;
my $ldallshow = runcmd("controller slot=$slot ld all show");
my @logicaldrives;
- my $cst = runcmd("controller slot=$slot show status");
+ my $cst = runcmd("controller slot=$slot show detail");
for (@$cst) {
chomp;
next if /^$/;
next if (/^\S.*in Slot $slot/);
for (@$cst) {
chomp;
next if /^$/;
next if (/^\S.*in Slot $slot/);
- if (/^ *(.*) Status: (.*)$/) {
+ if (/^ *(Controller|Cache|Battery\/Capacitor) Status: (.*)$/) {
my $system = $1;
my $status = $2;
my $system = $1;
my $status = $2;
next if $status =~ /^(OK|Not Configured)$/;
}
next if $status =~ /^(OK|Not Configured)$/;
}
- push @{$status{$status}}, $system;
+ push @freetext, "$system: $status";
if ($status ne 'OK') {
next if ($params->{'no-battery'} && $system eq 'Battery/Capacitor');
record('WARNING');
};
if ($status ne 'OK') {
next if ($params->{'no-battery'} && $system eq 'Battery/Capacitor');
record('WARNING');
};
- } else {
- die ("Cannot read line '$_' gotten from hpssacli controller slot=$slot show status\n");
+ } elsif (/^ *(Cache Status Details): (Cable Error)/) {
+ push @freetext, $2;
+ record('CRITICAL');
+ } elsif (/^ *(Battery\/Capacitor Count): (.*)/) {
+ next if $params->{'no-battery'} || int($2) > 0;
+ push @freetext, "Battery count: $2";
+ record('CRITICAL');
- my $status = join(" - ", (map { $_.": ".join(", ", @{$status{$_}}) } keys %status));
+ my $status = join(" - ", ((map { $_.": ".join(", ", @{$status{$_}}) } keys %status), @freetext));
+
push @resultstr, "Slot $slot: $status";
};
push @resultstr, "Slot $slot: $status";
};