1 # NagCollect -- Nagios Data Collector for Passive Checks
2 # Copyright (c)2009-2011 Alexander Barton, alex@barton.de
6 if [ `uname` = "Darwin" ]; then
7 tmp=`mktemp "/tmp/$$.XXXX"`
8 LC_ALL=C diskutil checkRAID >"$tmp" 2>/dev/null
10 # Apple Software-RAID detected
11 statusString1=`grep "^Status:" "$tmp" | uniq`
12 status=`echo $statusString1 | sed -e 's/Status: //g'`
13 statusString=`grep "^Status:" "$tmp"`
14 statusText=`echo $statusString | sed -e 's/Status: //g' | sed -e 's/ /, /g'`
15 if [ "$status" != "Online" ]; then
17 TEXT="$TEXT SW-RAID is $statusText."
19 [ -z "$STATUS" ] && STATUS=0
20 TEXT="$TEXT SW-RAID status is good."
23 LC_ALL=C raidutil list status 2>/dev/null | grep "RAID " >"$tmp"
25 # Apple Hardware-RAID detected
30 v=`echo "$x" | cut -d' ' -f1`
31 s=`echo "$x" | cut -b67- | sed -e 's/://g'`
32 s2=`echo "$x" | cut -b78-`
34 && status="$status, $v:$s" \
36 [ "$s2" = "Good" ] && good=$good+1 || bad=bad+1
38 if [ $bad -eq 0 -a $good -ge 1 ]; then
39 [ -z "$STATUS" ] && STATUS=0
40 TEXT="$TEXT Apple HW-RAID is good: $status."
41 elif [ $bad -gt 0 ]; then
43 TEXT="$TEXT Apple HW-RAID status: $status."
45 [ -z "$STATUS" -o "$STATUS" = "1" ] && STATUS=1
46 TEXT="$TEXT Apple HW-RAID status is unknown ($status)!?"
49 LC_ALL=C promiseutil -C array -a list -v 2>/dev/null </dev/tty \
50 | grep -A8 '^LdId' | grep '^[0-9]' >"$tmp"
52 # Promise Hardware-RAID detected
57 v=`echo "$x" | awk "{ print \\$2 }"`
58 z=`echo "$x" | awk "{ print \\$3 }"`
59 s=`echo "$x" | awk "{ print \\$4 }"`
61 && status="$status, $v($z):$s" \
63 [ "$s" = "OK" ] && good=$good+1 || bad=bad+1
65 if [ $bad -eq 0 -a $good -ge 1 ]; then
66 [ -z "$STATUS" ] && STATUS=0
67 TEXT="$TEXT Promise HW-RAID is good: $status."
68 elif [ $bad -gt 0 ]; then
70 TEXT="$TEXT Promise HW-RAID status: $status."
72 [ -z "$STATUS" -o "$STATUS" = "1" ] && STATUS=1
73 TEXT="$TEXT Promise HW-RAID status is unknown ($status)!?"
77 elif [ `uname` = "Linux" -a -r /proc/mdstat ]; then
78 status=$(cat /proc/mdstat | grep -E "(^md|^ [0-9])" \
79 | while read info1; do
81 dev=`echo $info1 | cut -d' ' -f1`
82 stat=`echo $info2 | cut -d'[' -f 3 | cut -d']' -f1`
85 if [ -n "$status" ]; then
86 if [ "`echo $status | tr -d 'md0123456789: U'`" = "" ]; then
87 [ -z "$STATUS" ] && STATUS=0
88 TEXT="$TEXT SW-RAID is good: $status."
91 TEXT="$TEXT SW-RAID status: $status."
96 if [ -n "$TEXT" ]; then
98 0) TEXT="OK -${TEXT}"; ;;
99 1) TEXT="WARNING -${TEXT}"; ;;
100 2) TEXT="ERROR -${TEXT}"; ;;
101 *) TEXT="UNKNOWN -${TEXT}"; ;;