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