#!/bin/sh 
#
# $Id$
#
# use to check whether all ser processes are running; if not, restart
# and issue an alert; run from cron daemon for best results :-)
#


NOTIFY=sr@iptel.org
SERHOME=/home/srouter
export SERDIR=$SERHOME/sip_router
BIN=$SERDIR/ser
COREDIR=$SERHOME/core
CORE=$COREDIR/core
ETC=/etc/sr.cfg

PROCCNT=`ps -C sr --no-headers -o pid | wc -l`
CH=`grep "^children" $ETC | awk -F= ' { print $2 } '`
ALL=`expr $CH + 1`
TMP=/tmp/seralert.$$


if [ $PROCCNT -ne $ALL ] ; then 
	# try again first -- it might have been a temporary
	# failure during 'sr restart'

	# two seconds longer failure is not too bad...UAs will
	# just retransmit and user are used to longer call
	# set-up times from GSM...
	sleep 2 
	PROCCNT=`ps -C sr --no-headers -o pid | wc -l`
fi

if [ $PROCCNT -ne $ALL ] ; then 

	cd $SERDIR
	echo "Alarm: ser restart occured on `date` at $HOSTNAME" > $TMP
	if [ -r $BIN -a -r $CORE ] ; then
		echo "----------------------------------" >> $TMP
		DATE=`date "+%Y-%m-%d--%H-%M"`
		NEWCORE=$COREDIR/core.$DATE
		mv $CORE $NEWCORE
		echo core stored in $NEWCORE >> $TMP
		gdb $BIN $NEWCORE -x test/bt.gdb -batch >> $TMP
		chmod a+r $NEWCORE
       ( cd $SERDIR; tar cf - . ) | gzip > $COREDIR/ser.$DATE.tgz

	else
		echo "no core found" >> $TMP
	fi

	/etc/init.d/sr restart
	mail -s "ser restart occured" $NOTIFY < $TMP
	rm -f $TMP
fi
