Author: glen                         Date: Wed Sep  9 14:09:42 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- update from 
http://www.monitoringexchange.org/cgi-bin/jump.cgi?ID=1692&view=File2;d=1
  (http://www.monitoringexchange.org/cgi-bin/page.cgi?g=Detailed/1692.html;d=1)

---- Files affected:
packages/nagios-plugin-check_raid:
   check_raid (1.2 -> 1.3) 

---- Diffs:

================================================================
Index: packages/nagios-plugin-check_raid/check_raid
diff -u packages/nagios-plugin-check_raid/check_raid:1.2 
packages/nagios-plugin-check_raid/check_raid:1.3
--- packages/nagios-plugin-check_raid/check_raid:1.2    Wed Sep  9 16:03:41 2009
+++ packages/nagios-plugin-check_raid/check_raid        Wed Sep  9 16:09:37 2009
@@ -22,6 +22,7 @@
 my($VERSION) = "2.0";
 my($message, $status);
 my(@ignore);
+my($SUDO) = "/usr/bin/sudo";
 
 #####################################################################
 sub print_usage () {
@@ -77,7 +78,7 @@
 
        foreach $f ( glob('/proc/megaide/*/status') ) {
                if( -r $f ) { $CMD = "<$f"; }
-               else { $CMD = "sudo cat $f |"; }
+               else { $CMD = "$SUDO cat $f |"; }
                open MEGAIDE,$CMD or next;
                while( $l = <MEGAIDE> ) {
                        if( $l =~ /Status\s*:\s*(\S+).*Logical 
Drive.*:\s*(\d+)/i ) {
@@ -120,7 +121,8 @@
        my($l);
        my($s,$n,$f);
 
-       open LSRAID,"/sbin/lsraid -A -p |" or return;
+       return if(! -x "/sbin/lsraid");
+       open LSRAID,"/sbin/lsraid -A -p 2>/dev/null |" or return;
        while( $l = <LSRAID> ) {
                chomp $l;
                if( $l =~ /\/dev\/(\S+) \S+ (\S+)/ ) {
@@ -140,12 +142,13 @@
        my($l,@f);
        my($s,$n,$f);
 
-       open LSVG,"/usr/sbin/lsvg |" or return;
+       return if(! -x "/usr/sbin/lsvg");
+       open LSVG,"/usr/sbin/lsvg 2>/dev/null |" or return;
        while( $l = <LSVG> ) { chomp $l; push @vg, $l; }
        close LSVG;
        foreach $vg ( @vg ) {
                next if(!valid($vg)); # skip entire VG
-               open LSVG,"/usr/sbin/lsvg -l $vg |" or return;
+               open LSVG,"/usr/sbin/lsvg -l $vg 2>/dev/null |" or return;
                while( $l = <LSVG> ) { 
                        @f = split " ",$l;
                        ($n,$s) = ($f[0],$f[5]);
@@ -165,8 +168,12 @@
        my($s,$n,$c);
        my($CMD);
 
-       $CMD = "/usr/local/bin/ipssend getconfig 1 LD";
-       $CMD = "sudo $CMD" if( $> );
+       $CMD = "/usr/local/nrpe/ipssend";
+       $CMD = "/usr/local/bin/ipssend" if(-f "/usr/local/bin/ipssend");
+       $CMD = "/usr/bin/ipssend" if(-f "/usr/bin/ipssend");
+       return if(! -f $CMD);
+       $CMD .= " getconfig 1 LD";
+       $CMD = "$SUDO $CMD" if( $> );
 
        open IPS,"$CMD |" or return;
        while( $l = <IPS> ) { 
@@ -175,7 +182,7 @@
                next if(!valid($n));    
                if( $l =~ /Status .*: (\S+)\s+(\S+)/ ) {
                        ($s,$c) = ($1,$2);
-                       if( $c =~ /SYN/i ) { # resynching
+                       if( $c =~ /SYN|RBL/i ) { # resynching
                                $status = $ERRORS{WARNING} if(!$status);
                        } elsif( $c !~ /OKY/i ) { # not OK
                                $status = $ERRORS{CRITICAL};
@@ -185,6 +192,110 @@
        }
        close IPS;
 }
+sub check_aaccli {
+       my($dsk,$stat);
+       my($aaccli)="";
+       $aaccli = "/usr/local/nrpe/aaccli" if(-f "/usr/local/nrpe/aaccli");
+       $aaccli = "/usr/local/bin/aaccli" if(-f "/usr/local/bin/aaccli");
+       $aaccli = "/usr/sbin/aaccli" if(-f "/usr/sbin/aaccli");
+       chdir "/tmp";
+       if(!$aaccli) { $message .= "aaccli:not_installed "; return; }
+       open AACCLI,"|$SUDO $aaccli >/dev/null 2>&1";
+       print AACCLI "open aac0\n";
+       print AACCLI "logfile start $$.log\n";
+       print AACCLI "container list /full\n";
+       print AACCLI "logfile end\n";
+       print AACCLI "exit\n";
+       close AACCLI;
+#File foo receiving all output.
+#
+#AAC0>
+#COMMAND: container list /full=TRUE
+#Executing: container list /full=TRUE
+#Num          Total  Oth Stripe          Scsi   Partition                      
                 Creation
+#Label Type   Size   Ctr Size   Usage   C:ID:L Offset:Size   State   RO Lk 
Task    Done%  Ent Date   Time
+#----- ------ ------ --- ------ ------- ------ ------------- ------- -- -- 
------- ------ --- ------ --------
+# 0    Mirror 74.5GB            Open    0:02:0 64.0KB:74.5GB Normal            
            0  051006 13:48:54
+# /dev/sda             Auth             0:03:0 64.0KB:74.5GB Normal            
            1  051006 13:48:54
+#
+#
+#AAC0>
+#COMMAND: logfile end
+#Executing: logfile end
+       open STAT,"<$$.log";
+       while ( <STAT> ) {
+               if( /(\d:\d\d?:\d+)\s+\S+:\S+\s+(\S+)/ ) {
+                       ($dsk,$stat) = ($1,$2);
+                       next if(!valid($dsk));
+                       $dsk =~ s/:/\//g;
+                       next if(!valid($dsk));
+                       $message .= "aac:$dsk:$stat ";
+                       $status = $ERRORS{CRITICAL} if($stat eq "Broken");
+                       $status = $ERRORS{WARNING} if(!$status and $stat eq 
"Rebuild");
+                       $status = $ERRORS{WARNING} if(!$status and $stat eq 
"Bld/Vfy");
+                       $status = $ERRORS{CRITICAL} if($stat eq "Missing");
+                       $status = $ERRORS{WARNING} if(!$status and $stat eq 
"Verify");
+                       $status = $ERRORS{WARNING} if(!$status and $stat eq 
"VfyRepl");
+               }
+       }
+       close STAT;
+       unlink "$$.log";
+}
+sub check_afacli {
+       $message .= "afacli:not_supported ";
+}
+sub check_mpt {
+       my($cmd) = "/usr/local/nrpe/mpt-status";
+       my($dsk,$stat);
+
+       $cmd = "/usr/local/bin/mpt-status" if(-f "/usr/local/bin/mpt-status");
+       $cmd = "/usr/bin/mpt-status" if(-f "/usr/bin/mpt-status");
+       return if(! -f $cmd);
+
+       open CMD,"$SUDO $cmd|" or return;       
+       while ( <CMD> ) {
+               next if(! /vol_id\s*(\d+).*state\s+(\S+),/ );
+               ($dsk,$stat) = ($1,$2);
+               next if(!valid($dsk));
+               $message .= "mpt:$dsk:$stat ";
+               if(!$status and $stat =~ /INITIAL|INACTIVE|RESYNC/) {
+                       $status = $ERRORS{WARNING} ;
+               } elsif($stat =~ /DEGRADED/) {
+                       $status = $ERRORS{CRITICAL} ;
+               } elsif(!$status and $stat !~ /ONLINE/) {
+                       $status = $ERRORS{UNKNOWN} ;
+               }
+       }
+       close CMD;
+}
+sub check_megaraid { 
+       my($f,$l);
+       my($s,$n);
+       my($CMD);
+
+       foreach $f ( glob('/proc/megaraid/*/raiddrives*') ) {
+               if( -r $f ) { $CMD = "<$f"; }
+               else { $CMD = "$SUDO /bin/cat $f |"; }
+               open MEGARAID,$CMD or next;
+               while( $l = <MEGARAID> ) {
+                       if( $l =~ /logical drive\s*:\s*(\d+).*, 
state\s*:\s*(\S+)/i ) {
+                               ($n,$s)=($1,$2);
+                               next if(!valid($n));
+                               if($s ne 'optimal') {
+                                       $status = $ERRORS{CRITICAL};
+                                       $message .= "Megaraid:$n:$s ";
+                               } else {
+                                       $message .= "Megaraid:$n:$s ";
+                               }
+                               last;
+                       }
+               }
+               close MEGARAID;
+       }
+}
+
+
+###########################################################################
 sub sudoers {
        my($f);
 
@@ -196,8 +307,13 @@
        print "Updating file $f\n";
        open SUDOERS, ">>$f";
        print SUDOERS "ALL  ALL=(root) NOPASSWD:/usr/local/bin/ipssend 
getconfig 1 LD\n" if( -f "/usr/local/bin/ipssend" );
+       print SUDOERS "ALL  ALL=(root) NOPASSWD:/usr/local/bin/aaccli container 
list /full\n" if( -f "/usr/local/bin/aaccli" );
        print SUDOERS "ALL  ALL=(root) NOPASSWD:/bin/cat 
/proc/megaide/0/status\n" if( -d "/proc/megaide/0" );
        print SUDOERS "ALL  ALL=(root) NOPASSWD:/bin/cat 
/proc/megaide/1/status\n" if( -d "/proc/megaide/1" );
+       print SUDOERS "ALL  ALL=(root) NOPASSWD:/usr/local/bin/mpt-status\n" 
if( -d "/proc/mpt" );
+       foreach my $mr ( glob('/proc/mega*/*/raiddrives*') ) {
+               print SUDOERS "ALL  ALL=(root) NOPASSWD:/bin/cat $mr\n" if( -d 
$mr );
+       }
 
        close SUDOERS;
        print "sudoers file updated.\n";
@@ -232,12 +348,19 @@
 
 $status = $ERRORS{OK}; $message = '';
 
-check_megaide if( -d "/proc/megaide" ); # Linux, hardware RAID
-check_mdstat  if( -f "/proc/mdstat" ); # Linux, software RAID
-check_lsraid  if( -x "/sbin/lsraid" ); #  Linux, software RAID
-check_metastat if( -x "/usr/sbin/metastat" ); # Solaris, software RAID
-check_vg      if( -x "/usr/sbin/lsvg" ); # AIX LVM
-check_ips     if( -x "/usr/local/bin/ipssend"  ); # Serveraid
+check_megaide if( -d "/proc/megaide" );           # MegaIDE RAID controller
+check_mdstat  if( -f "/proc/mdstat" );            # Linux LVM 
+check_mpt     if( -d "/proc/mpt"  );              # LSILogic MPT ServeRAID 
+check_megaraid if( -d "/proc/megaraid"  );        # MegaRAID
+check_aaccli  if( -d "/proc/scsi/aacraid"  );     # Adaptec ServeRAID
+check_lsraid  if( -x "/sbin/lsraid" );            # Linux, software RAID
+check_metastat if( -x "/usr/sbin/metastat" );     # Solaris, software RAID
+check_vg      if( -x "/usr/sbin/lsvg" );          # AIX LVM
+check_ips     if( -x "/usr/local/bin/ipssend"
+                                       or -x "/usr/bin/ipssend"  );  # 
Serveraid IPS
+check_afacli  if( -x "/usr/local/bin/afacli" 
+                                       or -x "/usr/bin/afacli" );    # Adaptec 
RAID
+# Cant do megaRAID controller, it needs X and java (yuck)
 
 if( $message ) {
        if( $status == $ERRORS{OK} ) {
================================================================

---- CVS-web:
    
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/nagios-plugin-check_raid/check_raid?r1=1.2&r2=1.3&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to