#!/bin/sh
# written by Steve Murphy, with inspiration from Dmitry Vayntrub's check_uptime.sh
#
# The plugin will query asterisk for the number of calls processed
# and allows you to set warn/crit values for that number
#
#######################################################################
VERSION="check_asterisk_actcalls v1.00"

# Exit-Codes:
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

usage()
{
cat << EOF
usage: $0 [-c OPTION]|[-w OPTION] [-C OPTION]|[-W OPTION] [ -V ]

This script checks how many calls that asterisk has processed (total)  and optionally verifies if that 
number is below MINIMUM or above MAXIMUM tresholds

OPTIONS:
   -h   Help
   -c   CRITICAL MIN calls
   -w   WARNING  MIN calls
   -C   CRITICAL MAX calls
   -W   WARNING  MAX calls
   -V   Version
EOF
}

while getopts c:w:C:W:Vv OPTION
do
     case $OPTION in
	c)
	   MIN_CRITICAL=`echo $OPTARG | grep -v "^-"`
	   [ ! "$?" = 0 ] && echo "Error: missing or illegal option value" && \
	   exit $STATE_UNKNOWN
	   ;;
	w)
	   MIN_WARNING=`echo $OPTARG | grep -v "^-"`
	   [ ! "$?" = 0 ] && echo "Error: missing or illegal option value" && \
	   exit $STATE_UNKNOWN
	   ;;
	C)
	   MAX_CRITICAL=`echo $OPTARG | grep -v "^-"`
	   [ ! "$?" = 0 ] && echo "Error: missing or illegal option value" && \
	   exit $STATE_UNKNOWN
	   ;;
	W)
	   MAX_WARNING=`echo $OPTARG | grep -v "^-"`
	   [ ! "$?" = 0 ] && echo "Error: missing or illegal option value" && \
	   exit $STATE_UNKNOWN
	  ;;
	V)
	   echo $VERSION
	   exit $STATE_OK
	   ;;
	v)
	   VERBOSE=1
	   ;;
	?)
	   usage
	   exit $STATE_UNKNOWN
	   ;;
     esac
done

## The my_aster_showcall is setuid, and does not use system; it uses execl. who would have guessed?

CALLS_PROC=`/usr/lib/nagios/plugins/my_aster_showcall | grep processed | awk '{ print $1 }'`
PERFDATA="|TotCallsProc=$CALLS_PROC"

if [ $MIN_CRITICAL ] && [ $CALLS_PROC -lt $MIN_CRITICAL ] ; then
	echo "CRITICAL - calls processed ($CALLS_PROC) less than threshold of $MIN_CRITICAL$PERFDATA"
	exit $STATE_CRITICAL

  elif [ $MIN_WARNING ] && [ $CALLS_PROC -lt $MIN_WARNING ] ; then
	echo "WARNING - calls processed ($CALLS_PROC) less than threshold of $MIN_WARNING$PERFDATA"
	exit $STATE_WARNING

  elif [ $MAX_CRITICAL ] && [ $CALLS_PROC -gt $MAX_CRITICAL ] ; then
	echo "CRITICAL - calls processed ($CALLS_PROC) greater than threshold of $MAX_CRITICAL$PERFDATA"
	exit $STATE_CRITICAL

  elif [ $MAX_WARNING ] && [ $CALLS_PROC -gt $MAX_WARNING ] ; then
	echo "WARNING - calls processed ($CALLS_PROC) greater than threshold of $MAX_WARNING$PERFDATA"
	exit $STATE_WARNING

  else
	echo "OK - Number of calls processed is $CALLS_PROC$PERFDATA"
	exit $STATE_OK
fi
