# NagCollect -- Nagios Data Collector for Passive Checks # Copyright (c)2009-2011 Alexander Barton, alex@barton.de SERVICE="RAID_p" if [ `uname` = "Darwin" ]; then tmp=`mktemp "/tmp/$$.XXXX"` tmp2=`mktemp "/tmp/$$-2.XXXX"` LC_ALL=C diskutil checkRAID >"$tmp" 2>/dev/null if [ $? -eq 0 ]; then # Apple Software-RAID detected 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="$TEXT SW-RAID is $statusText." else [ -z "$STATUS" ] && STATUS=0 TEXT="$TEXT SW-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 [ -z "$STATUS" ] && STATUS=0 TEXT="$TEXT Apple HW-RAID is good: $status." elif [ $bad -gt 0 ]; then STATUS=2 TEXT="$TEXT Apple HW-RAID status: $status." else [ -z "$STATUS" -o "$STATUS" = "1" ] && STATUS=1 TEXT="$TEXT Apple HW-RAID status is unknown ($status)!?" fi fi LC_ALL=C screen -D -m sh -c "promiseutil -C array -a list -v >$tmp2" grep -A8 '^LdId' "$tmp2" | grep '^[0-9]' >"$tmp" if [ $? -eq 0 ]; then # Promise Hardware-RAID detected declare -i good=0 declare -i bad=0 status="" while read x; do v=`echo "$x" | awk "{ print \\$2 }"` z=`echo "$x" | awk "{ print \\$3 }"` s=`echo "$x" | awk "{ print \\$4 }"` [ -n "$status" ] \ && status="$status, $v($z):$s" \ || status="$v($z):$s" [ "$s" = "OK" ] && good=$good+1 || bad=bad+1 done <"$tmp" if [ $bad -eq 0 -a $good -ge 1 ]; then [ -z "$STATUS" ] && STATUS=0 TEXT="$TEXT Promise HW-RAID is good: $status." elif [ $bad -gt 0 ]; then STATUS=2 TEXT="$TEXT Promise HW-RAID status: $status." else [ -z "$STATUS" -o "$STATUS" = "1" ] && STATUS=1 TEXT="$TEXT Promise HW-RAID status is unknown ($status)!?" fi fi rm -f "$tmp" "$tmp2" 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` stat=`echo $info2 | cut -d'[' -f 3 | cut -d']' -f1` echo -n " $dev:$stat" done) if [ -n "$status" ]; then if [ "`echo $status | tr -d 'md0123456789: U'`" = "" ]; then [ -z "$STATUS" ] && STATUS=0 TEXT="$TEXT SW-RAID is good: $status." else STATUS=2 TEXT="$TEXT SW-RAID status: $status." fi fi fi if [ -n "$TEXT" ]; then case "$STATUS" in 0) TEXT="OK -${TEXT}"; ;; 1) TEXT="WARNING -${TEXT}"; ;; 2) TEXT="ERROR -${TEXT}"; ;; *) TEXT="UNKNOWN -${TEXT}"; ;; esac fi