#!/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;

CTLR: for ($ctln = 0; $ctln < 3; $ctln++, close(CMD2)) {
	open(CMD2, "/usr/bin/omreport storage pdisk controller=$ctln -fmt ssv |");

	# skip to header

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

			last;
		}
	}

# read individual satus lines; end if blank line

	while (<CMD2>) {
		chop;
		next CTLR if /No Physical/;
		@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";
		}
	}
}


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

