#!/usr/bin/perl


$cmd1 = "/usr/bin/omreport chassis -fmt ssv";
$cmd2 = "/usr/bin/omreport storage pdisk controller=0 -fmt ssv";

@st = ('OK', 'WARNING', 'CRITICAL', 'UNKNOWN');

$rc = 0;
$rs = '';

open(CMD1, "$cmd1|");	# XXX

# skip to header

while (<CMD1>) {
	last if /SEVERITY/;
}

# read individual satus lines; end if blank line

while (<CMD1>) {
	chop;
	($status, $component) = split /;/;
	last if ($status eq '') and ($component eq '');
	# print "$component: $status\n";

	if ($status ne 'Ok') {
		$rc = 2;
		$rs = $rs . " $component: $status";
	}
}

close CMD1;

open(CMD2, "$cmd2|");	# XXX

# skip to header

while (<CMD2>) {
	chop;
	if (/Status/) {
		@a = split /;/;
		$n = 0;
		foreach $i (@a) {
			$names{$i} = $n++;
		}

		last;
	}
}

# read individual satus lines; end if blank line

while (<CMD2>) {
	chop;
	@a = split /;/;
	$id = $a[$names{'ID'}];
	$status = $a[$names{'Status'}];
	$fp = $a[$names{'Failure Predicted'}];

	last if ($id eq '') and ($status eq '');

	# print "$id: $status fp = $fp\n";

	if ($fp ne 'No') {
		$rs = $rs . " Disk $id: Failure predicted";
		$rc = 1 if $rc == 0;
	}

	if ($status ne 'Ok') {
		$rc = 2;
		$rs = $rs . " disk $id: $status";
	}
}

close CMD2;


$rs = ' No problems detected by Open Manage' if $rc == 0;
print "$st[$rc]:$rs\n";
exit $rc;

