#!/usr/bin/perl -w use strict; if (!(opendir D, "/proc/scsi/rr174x")) { print "Critical: Unable to read status for RocketRaid\n"; exit(2); } my @controllers; while (my $f = readdir(D)) { next if ($f !~ /^\d+$/); push @controllers, $f; } close D; #[DISK 0_0] RAID_5_0 (RAID5), 1280034MB, Rebuilding 2.0% #[DISK 0_0] RAID_5_0 (RAID5), 1280034MB, Critical my %state; foreach my $controller (@controllers) { if (!(open P, ") { chomp($l); if ($l =~ /\[(.+?)\](.*Rebuilding.*)$/) { $state{$controller}->{$1}->{msg} = $l; $state{$controller}->{$1}->{status} = 1; } elsif ($l =~ /\[(.+?)\](.*Critical.*)$/) { $state{$controller}->{$1}->{msg} = $l; $state{$controller}->{$1}->{status} = 2; } } close P; } my $estate = 0; my @msgs; foreach my $c (keys %state) { foreach my $ld (keys %{$state{$c}}) { push @msgs, $state{$c}->{$ld}->{msg}; my $status = $state{$c}->{$ld}->{status}; if ($status > $estate) { $estate = $status; } } } print join(" ", @msgs) . "\n"; exit $estate; __END__ STATE=0 for i in /proc/scsi/rr174x/* do DISK=`grep "[DISK.*].*Critical" $i` ret=$? if [ $ret == 0 ]; then DISKFAILURE="$DISKFAILURE $DISK" STATE=2 fi done echo $STATE echo $DISKFAILURE