#!/usr/bin/perl

use strict;

%ENV = ( PATH => '/bin:/usr/bin:/sbin:/usr/sbin' );
my $raw = `MegaCli -AdpAllInfo -aAll` || '';

my %data;
for (split(/\n/,$raw)) {
	if (my ($k,$v) = $_ =~ /^\s*([a-z\s]+?)\s+:\s*(\d+)\s*$/i) {
		$k =~ s/\s+//g;
		$data{$k} = $v;
	}
}

my $msg = join(', ', map { "$_=$data{$_}" } qw(VirtualDrives Degraded Offline
			PhysicalDevices Disks CriticalDisks FailedDisks
			MemoryCorrectableErrors MemoryUncorrectableErrors));

# Critical if there are knackered disks
if (grep($data{$_} > 0, qw(Degraded Offline CriticalDisks FailedDisks))) {
	print "CRITICAL - $msg\n";
	exit 2;

# Warning if there are errors
} elsif (grep($data{$_} > 0, qw(MemoryCorrectableErrors MemoryUncorrectableErrors))) {
	print "WARNING - $msg\n";
	exit 1;

# Unknown if we don't appear to have at least 2 disks
} elsif (grep($data{$_} < 2, qw(Disks PhysicalDevices))) {
	print "UNKNOWN - $msg\n";
	exit 3;

# Seems to be okay
} else {
	print "OKAY - $msg\n";
	exit 0;
}


