#!/bin/bash

# Licensed under GPL. See http://www.fsf.org/licensing/licenses/gpl.html#SEC1
# Based on private work from poc@pocnet.net - (c) 2005

MYNAME=`basename $0`
PROGPATH=`echo $0 |sed -e 's,[\\/][^\\/][^\\/]*$,,'`
test -x $PROGPATH/utils.sh && . $PROGPATH/utils.sh

# Ohne Parameter blöde machen
if [ $# -lt 1 ]; then
	printf "Usage:\t${MYNAME} -w limit -c limit -u upsname -p upsvar\n"
	printf "\t${MYNAME} -u upsname -s\n"
	exit ${STATE_UNKNOWN}
fi

# Optionen parsen: ${GETOPT} unter Shell ist der größte Mist, wenn's um : Args geht
NEXT_IS_W=0
NEXT_IS_C=0
NEXT_IS_U=0
NEXT_IS_P=0
CHECK_STATE=0
#
OPTSTRING=`getopt "vw:c:u:p:s" $*`
test $? -ne 0 && exit ${STATE_UNKNOWN}
for OPTION in ${OPTSTRING}; do
	if [ ${NEXT_IS_W} -eq 1 ]; then
		WARNLEVEL=$OPTION
		NEXT_IS_W=0
	elif [ ${NEXT_IS_C} -eq 1 ]; then
		CRITLEVEL=$OPTION
		NEXT_IS_C=0
	elif [ ${NEXT_IS_U} -eq 1 ]; then
		UPSNAME=$OPTION
		NEXT_IS_U=0
	elif [ ${NEXT_IS_P} -eq 1 ]; then
		PARAM=$OPTION
		NEXT_IS_P=0
	fi

	case "${OPTION}" in
		"-v")
			echo '$Id: check_upsparam,v 1.3 2007/06/07 09:36:12 pschindler Exp $'
			exit ${STATE_UNKNOWN}
		;;
		"-w")
			NEXT_IS_W=1
		;;
		"-c")
			NEXT_IS_C=1
		;;
		"-u")
			NEXT_IS_U=1
		;;
		"-p")
			NEXT_IS_P=1
		;;
		"-s")
			CHECK_STATE=1
		;;
	esac
done

unset NEXT_IS_W NEXT_IS_C NEXT_IS_U NEXT_IS_P

if [ ${CHECK_STATE} -eq 0 ]; then
	if [ -z "${WARNLEVEL}" ]; then
		echo "You MUST supply a warning level."
		exit ${STATE_UNKNOWN}
	fi
	if [ -z "${CRITLEVEL}" ]; then
		echo "You MUST supply a critical level."
		exit ${STATE_UNKNOWN}
	fi
	if [ ${WARNLEVEL} -gt ${CRITLEVEL} ]; then
		echo "Warning level must be less or equal to crit level."
		exit ${STATE_UNKNOWN}
	fi

	VALUE=`upsc "${UPSNAME}" "${PARAM}"`
	INTVAL=`echo ${VALUE} |cut -b 1-3`

	if [ ${INTVAL} -ge ${CRITLEVEL} ]; then
		echo "UPS CRITICAL [${PARAM}: ${VALUE}]"
		exit ${STATE_CRITICAL}
	elif [ ${INTVAL} -ge ${WARNLEVEL} ]; then
		echo "UPS WARNING [${PARAM}: ${VALUE}]"
		exit ${STATE_WARNING}
	else
		echo "UPS OK [${PARAM}: ${VALUE}]"
		exit ${STATE_OK}
	fi
else
	STATSTR=`upsc "${UPSNAME}" ups.status`

	ERRNO=0

	for STATE in ${STATSTR}; do
		if [ "${STATE}" = "RB" ]; then
			(( ERRNO++ ))
		elif [ "${STATE}" = "OB" ]; then
			(( ERRNO++ ))
		elif [ "${STATE}" = "LB" ]; then
			(( ERRNO++ ))
		fi
	done

	if [ "${ERRNO}" -lt 1 ]; then
		echo "UPS Online and OK"
		exit ${STATE_OK}
	elif [ "${ERRNO}" -gt 2 ]; then
		echo "UPS Critical: ${STATSTR}"
		exit ${STATE_CRITICAL}
	elif [ "${ERRNO}" -gt 0 ]; then
		echo "UPS Warning: ${STATSTR}"
		exit ${STATE_WARNING}
	fi
fi

# EOF
