#!/bin/sh
# Nagios plugin for checking if vdr is reporting free disk space via SVDR
#
# TODO: GPL
#
# written by Thomas Wagner (wagner-thomas@gmx.at)

usage()
{
cat << EOF
usage:
This skript reads out the free disk space available to vdr via SVDR.
OPTIONS:
 -h	Show this message
 -H	hostname (default localhost)
 -p	port (default 6419)
 -w	warning level of free disk space in MB (default 20000)
 -c 	critical value of free disk integer number 0-100 (default 10000)
 -v	verbose
EOF
}

# NAGIOS' wanted return values
NAG_OK=0
NAG_WARN=1
NAG_CRIT=2
NAG_UNKNOWN=3

# path to binary
SVDR_BIN=/usr/bin/svdrpsend

# read arguments
WARN=20000
CRIT=10000
HOSTNAME=localhost
PORT=6419
VERBOSE=0
SVDR_CMD="stat disk"
while getopts ":hw:c:H:p:v" OPTION
do
  case $OPTION in
	h) usage
	   exit $NAG_CRIT # nothing checked, but feasible input
	   ;;
	w) WARN=$OPTARG
	   ;;
	c) CRIT=$OPTARG
	   ;;
	H) HOSTNAME=$OPTARG
	   ;;
	p) PORT=$OPTARG
	   ;;
	v) VERBOSE=1
	   ;;
	?) usage
	   exit $NAG_UNKNOWN
 	   ;;
  esac
done

# check for integer inputs; a string would be used as input "test" would result in 2 as return value
[ $WARN -ge 0 ] 2>/dev/null
if [ $? -ge 1 ]; then
	echo "Threshold for warnings must be an integer"
	exit $NAG_UNKNOWN
fi

[ $CRIT -ge 0 ] 2>/dev/null
if [ $? -ge 1 ]; then
	echo "Threshold for criticals must be an integer"
	exit $NAG_UNKNOWN
fi

if [ $CRIT -ge $WARN ]; then
	echo "Critical value for disk space must be smaller than warn level"
	exit $NAG_UNKNOWN
fi

[ $PORT -ge 0 ] 2>/dev/null
if [ $? -ge 1 ]; then
[A	echo "PORT must be a positive integer"
	exit $NAG_UNKNOWN
fi

# set path to femon executable and check for its presence
if [ ! -x $SVDR_BIN ]; then
	echo "svdrpsend not found or not executable"
	exit $NAG_UNKNOWN;
fi

#get a statusline o
TMP_FILE=`mktemp`

$SVDR_BIN -d $HOSTNAME -p $PORT $SVDR_CMD &> $TMP_FILE

if [ $VERBOSE -gt 0 ]; then
	echo "Result of: '$SVDR_BIN -d $HOSTNAME -p $PORT $SVDR_CMD > $TMP_FILE'"
	cat $TMP_FILE
fi

# get free size in MB
res=$(cat $TMP_FILE | grep 250 | sed 's/\r//g')

if [ -z "$res" ]; then
	echo "CRITICAL - No answer from vdr! Check if port is open and vdr is running."
	RETURN_VAL=$NAG_CRIT
else
	level=$(echo $res | awk '{ print $3 }'  | sed 's/MB//g')
	
	if [ $VERBOSE -gt 0 ]; then
	 echo "Result: $res"
	 echo "Disk free (MB): $level"
	fi
	
	# status output
	if [ $level -le $CRIT ]; then
		echo "CRITICAL - " $(echo $res | sed 's/|//g')"|level="$level"MB;$WARN;$CRIT"
		RETURN_VAL=$NAG_CRIT
	elif [ $level -le $WARN ]; then
	        echo "WARNING - " $(echo $res | sed 's/|//g') "|level="$level"MB;$WARN;$CRIT"
	        RETURN_VAL=$NAG_WARN
	else 

	        echo "OK - " $(echo $res | sed 's/|//g')"|level="$level"MB;$WARN;$CRIT"
	        RETURN_VAL=$NAG_OK
	fi
fi
rm $TMP_FILE
exit $RETURN_VAL
