#! /bin/sh
#
# rtcpmon: Starts rtcpmon daemon
#
# chkconfig: 345 96 02
# processname: rtcpmon
# description: RTCP Statistics Monitor
# config:
# Author: Sangoma Technologies - Johnny Ma <jma@sangoma.com>

SERVICE_PROD_NAME="RTCP Statistics Monitor"
SERVICE_NAME=rtcpmon
SERVICE_CONF_FILE=/etc/sysconfig/$SERVICE_NAME
SERVICE_USLEEP=500000
SERVICE_USLEEP_TIMEOUT=$(((20*1000000)/$SERVICE_USLEEP))

# Source function library.
. /etc/init.d/functions

# pull in sysconfig settings only if INSTALLDIR is not already present
if [ -z "$INSTALLDIR" ]
then
	if [ ! -f $SERVICE_CONF_FILE ]
	then
		echo "FATAL: There is no $SERVICE_CONF_FILE file!!"
		exit
	fi
	. $SERVICE_CONF_FILE
fi

export LD_LIBRARY_PATH="$INSTALLDIR/lib"
SERVICE_XML_CONF="$INSTALLDIR/etc/$SERVICE_NAME.xml"
SERVICE_PID_FILE=$INSTALLDIR/run/$SERVICE_NAME.pid
SERVICE_BINARY=$INSTALLDIR/bin/$SERVICE_NAME
export PYTHONPATH="$PYTHONPATH:$CUSTOM_PYTHON_PATH"
export PATH="$INSTALLDIR/bin:$PATH"
RECOVER_LOOP=30

start()
{
	rm -f $SERVICE_PID_FILE # remove stale file, if it exists
	touch /var/lock/subsys/$SERVICE_NAME
	RETVAL=0

	echo -n $"Starting $SERVICE_PROD_NAME:"

	local cmd="$SERVICE_BINARY -c $SERVICE_XML_CONF -p $SERVICE_PID_FILE"

	if [ -x $SERVICE_BINARY ]
	then
		(/usr/bin/setsid $cmd &) &> /dev/null < /dev/null
		success
	else
		rm -f /var/lock/subsys/$SERVICE_NAME
		failure
	fi

	echo
}

stop()
{
	service_pid=$(cat $SERVICE_PID_FILE)
	echo -n $"Stopping $SERVICE_PROD_NAME (pid=$service_pid):"

	$SERVICE_BINARY -p $SERVICE_PID_FILE --stop &> /dev/null

	RETVAL=$?
	if [ "$RETVAL" = 0 ]
	then
		tcnt=0;
		# at this point just finish the routine if we stop seeing the process 
		while true
		do
			kill -s 0 $service_pid &> /dev/null
			RETVAL=$?
			if [ "$RETVAL" != 0 ]
			then
				RETVAL=0
				success
				break
			fi
			usleep $SERVICE_USLEEP
			tcnt=$((tcnt+1))
			if [ $tcnt -gt $SERVICE_USLEEP_TIMEOUT ]; then
				eval "kill -9 $service_pid &> /dev/null"
				success
       			break
			fi	  
			#echo "Waiting for pid down $tcnt/$SERVICE_USLEEP_TIMEOUT"
		done
		rm -f /var/lock/subsys/$SERVICE_NAME
    	echo
	else
   		failure
   		echo 
	fi

}

initdb()
{
	$SERVICE_BINARY -c $SERVICE_XML_CONF --init-database &> /dev/null
	RETVAL=$?
	if [ "$RETVAL" = 0 ]
	then
		success
   		echo
	else
   		failure
   		echo 
	fi
}

silentstatus() {
	service_pid=`pidof $1`
	if [[ ! -z "$service_pid" ]]; then
		return 0
	else
		return 3
	fi
}

recover() {
	c=1
	stat=0
	while (( $c <= $RECOVER_LOOP )); do
		silentstatus $SERVICE_NAME
		stat=$?
		if (( stat == 3 )); then
			start
			break
		else
			sleep 1
			(( c++ ))
		fi
	done
}

case "$1" in
	start)
		if ! status -p $SERVICE_PID_FILE $SERVICE_BINARY > /dev/null; then
			start
		fi
		;;
	stop)
		if status -p $SERVICE_PID_FILE $SERVICE_BINARY > /dev/null; then
			stop
		fi
		;;
	status)
		status -p $SERVICE_PID_FILE $SERVICE_BINARY
		RETVAL=$?
		;;
	restart)
		stop
		start
		;;
	recover)
		recover
		;;
	initdb)
		initdb
		;;
	*)
		echo $"Usage: $0 {start|stop|restart|status|initdb}"
		RETVAL=1
esac
exit $RETVAL


