]> arthur.barton.de Git - nagcollect.git/blobdiff - client/lib/tests/RAID.tst
RAID.tst: suppress warning and error messages
[nagcollect.git] / client / lib / tests / RAID.tst
index d536e121a56034626cad2f8aa1e1a6334504e4a0..d814588d4f83dd27316e8e84b84d97502850f525 100644 (file)
@@ -1,25 +1,53 @@
 # NagCollect -- Nagios Data Collector for Passive Checks
-# Copyright (c)2009 Alexander Barton, alex@barton.de
+# Copyright (c)2009-2011 Alexander Barton, alex@barton.de
 
 SERVICE="RAID_p"
 
 if [ `uname` = "Darwin" ]; then
        tmp=`mktemp "/tmp/$$.XXXX"`
-       LC_ALL=C diskutil checkRAID >"$tmp"
+       LC_ALL=C diskutil checkRAID >"$tmp" 2>/dev/null
        if [ $? -eq 0 ]; then
                # Apple Software-RAID detected
-               statusText=`grep "^Status:" "$tmp"`
-               status=`echo $statusText | cut -d' ' -f2-`
+               statusString1=`grep "^Status:" "$tmp" | uniq`
+               status=`echo $statusString1 | sed -e 's/Status: //g'`
+               statusString=`grep "^Status:" "$tmp"`
+               statusText=`echo $statusString | sed -e 's/Status: //g' | sed -e 's/ /, /g'`
                if [ "$status" != "Online" ]; then
                        STATUS=2
-                       TEXT="ERROR - RAID is $status"
+                       TEXT="ERROR - RAID is $statusText"
                else
                        STATUS=0
                        TEXT="OK - RAID status is good."
                fi
        fi
+       LC_ALL=C raidutil list status 2>/dev/null | grep "RAID " >"$tmp"
+       if [ $? -eq 0 ]; then
+               # Apple Hardware-RAID detected
+               declare -i good=0
+               declare -i bad=0
+               status=""
+               while read x; do
+                       v=`echo "$x" | cut -d' ' -f1`
+                       s=`echo "$x" | cut -b67- | sed -e 's/://g'`
+                       s2=`echo "$x" | cut -b78-`
+                       [ -n "$status" ] \
+                               && status="$status, $v:$s" \
+                               || status="$v:$s"
+                       [ "$s2" = "Good" ] && good=$good+1 || bad=bad+1
+               done <"$tmp"
+               if [ $bad -eq 0 -a $good -ge 1 ]; then
+                       STATUS=0
+                       TEXT="OK - HW-RAID is good: $status"
+               elif [ $bad -gt 0 ]; then
+                       STATUS=2
+                       TEXT="ERROR - HW-RAID status: $status"
+               else
+                       STATUS=1
+                       TEXT="ERROR - HW-RAID status is unknown!? ($status)"
+               fi
+       fi
        rm -f "$tmp"
-elif [ `uname` = "Linux" ]; then
+elif [ `uname` = "Linux" -a -r /proc/mdstat ]; then
        status=$(cat /proc/mdstat | grep -E "(^md|^      [0-9])" | while read info1; do
                read info2
                dev=`echo $info1 | cut -d' ' -f1`