#!/bin/bash

function help-message() {
    echo
    echo "(c) 2010,2012 Instituto Superior Tecnico"
    echo "License GPL 2"
    echo "Author: Jose Calhariz <jose.calhariz@ist.utl.pt>"
    echo
    usage
}

function usage() {
    echo "-f file"
    echo "    path to the configuration, by default /etc/smartd.conf"
    echo "-h"
    echo "    print this help message"
    echo "-p plugin"
    echo "    nagios plugin to check a single disk, by default /usr/lib/tp-nagios-plugins/check_smart"
    }

CONF=/etc/smartd.conf
PLUG=/usr/lib/tp-nagios-plugins/check_smart
export RETURN=0
export MESSAGE=
OUTPUT=`mktemp /tmp/chksmart.XXXXXXXX`
while ( test $# -ge 1 ) ; do
    case $1 in
	-h)
	    help-message
	    shift
	    exit 0
	    ;;
	-f)
	    CONF="$2"
	    shift 2
	    ;;
	-p)
	    PLUG="$2"
	    shift 2
	    ;;
	*)
	    usage
	    exit 1
    esac
done

egrep -v "^#" "$CONF" | sed -e :a -e '$b;N;s/\\\n//;ba' | while read -a a ; do 
    # echo ${#a}    
    # echo "\"${a[@]}\""
    unset DEV
    unset TYPE
    for (( i = 0 ;  i < ${#a} ; i ++ )); do
        # echo $i
	# echo ${a[ $i ]}
	case ${a[ $i ]} in
	    /dev/*)
		DEV="${a[ $i ]}"
		;;
	    -d)
		TYPE="${a[ $(( ++ i  )) ]}"
		;;
	    *)
		
	esac
    done
#    echo $DEV $TYPE
    if test $(( i )) -ge 1 ; then
	#echo smartctl "$DEV" -d "$TYPE"
        if test -b "$DEV" ; then
            ${PLUG} -d "$DEV" -i "$TYPE" >> ${OUTPUT}
            ret=$?
        else
            ret=0
        fi
	if test $ret -gt $RETURN ; then
	    case $ret in
		0)
		    ;;
		1)
		    MESSAGE="Warning $DEV -d $TYPE"
		    RETURN=1
		    ;;
		2)
		    MESSAGE="Critical $DEV -d $TYPE"
		    RETURN=2
		    ;;
		*)
		    RETURN=$ret
		    MESSAGE="Code $ret with $DEV -d $TYPE"
	    esac
	fi
	echo $MESSAGE > ${OUTPUT}.message
	echo $RETURN > ${OUTPUT}.return
    fi
done

RETURN=`cat ${OUTPUT}.return`
if test $RETURN -eq 0 ; then
    MESSAGE="All Disks OK"
else
    MESSAGE=`cat ${OUTPUT}.message`
fi
rm ${OUTPUT} ${OUTPUT}.return ${OUTPUT}.message
echo $MESSAGE
exit $RETURN
