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 tmp2=`mktemp "/tmp/$$-2.XXXX"`
9 LC_ALL=C diskutil checkRAID >"$tmp" 2>/dev/null
11 # Apple Software-RAID detected
12 statusString1=`grep "^Status:" "$tmp" | uniq`
13 status=`echo $statusString1 | sed -e 's/Status: //g'`
14 statusString=`grep "^Status:" "$tmp"`
15 statusText=`echo $statusString | sed -e 's/Status: //g' | sed -e 's/ /, /g'`
16 if [ "$status" != "Online" ]; then
18 TEXT="$TEXT SW-RAID is $statusText."
20 [ -z "$STATUS" ] && STATUS=0
21 TEXT="$TEXT SW-RAID status is good."
24 LC_ALL=C raidutil list status 2>/dev/null | grep "RAID " >"$tmp"
26 # Apple Hardware-RAID detected
31 v=`echo "$x" | cut -d' ' -f1`
32 s=`echo "$x" | cut -b67- | sed -e 's/://g'`
33 s2=`echo "$x" | cut -b78-`
35 && status="$status, $v:$s" \
37 [ "$s2" = "Good" ] && good=$good+1 || bad=bad+1
39 if [ $bad -eq 0 -a $good -ge 1 ]; then
40 [ -z "$STATUS" ] && STATUS=0
41 TEXT="$TEXT Apple HW-RAID is good: $status."
42 elif [ $bad -gt 0 ]; then
44 TEXT="$TEXT Apple HW-RAID status: $status."
46 [ -z "$STATUS" -o "$STATUS" = "1" ] && STATUS=1
47 TEXT="$TEXT Apple HW-RAID status is unknown ($status)!?"
50 LC_ALL=C screen -D -m sh -c "promiseutil -C array -a list -v >$tmp2"
51 grep -A8 '^LdId' "$tmp2" | grep '^[0-9]' >"$tmp"
53 # Promise Hardware-RAID detected
58 v=`echo "$x" | awk "{ print \\$2 }"`
59 z=`echo "$x" | awk "{ print \\$3 }"`
60 s=`echo "$x" | awk "{ print \\$4 }"`
62 && status="$status, $v($z):$s" \
64 [ "$s" = "OK" ] && good=$good+1 || bad=bad+1
66 if [ $bad -eq 0 -a $good -ge 1 ]; then
67 [ -z "$STATUS" ] && STATUS=0
68 TEXT="$TEXT Promise HW-RAID is good: $status."
69 elif [ $bad -gt 0 ]; then
71 TEXT="$TEXT Promise HW-RAID status: $status."
73 [ -z "$STATUS" -o "$STATUS" = "1" ] && STATUS=1
74 TEXT="$TEXT Promise HW-RAID status is unknown ($status)!?"
78 elif [ `uname` = "Linux" -a -r /proc/mdstat ]; then
79 status=$(cat /proc/mdstat | grep -E "(^md|^ [0-9])" \
80 | while read info1; do
82 dev=`echo $info1 | cut -d' ' -f1`
83 stat=`echo $info2 | cut -d'[' -f 3 | cut -d']' -f1`
86 if [ -n "$status" ]; then
87 if [ "`echo $status | tr -d 'md0123456789: U'`" = "" ]; then
88 [ -z "$STATUS" ] && STATUS=0
89 TEXT="$TEXT SW-RAID is good: $status."
92 TEXT="$TEXT SW-RAID status: $status."
97 if [ -n "$TEXT" ]; then
99 0) TEXT="OK -${TEXT}"; ;;
100 1) TEXT="WARNING -${TEXT}"; ;;
101 2) TEXT="ERROR -${TEXT}"; ;;
102 *) TEXT="UNKNOWN -${TEXT}"; ;;