#!/bin/sh
#
# bigsister	Big Sister System and Network Monitor
#
# chkconfig:	345 98 99
# description:	Big Sister is System and Network Montoring system

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

# Get network config
. /etc/sysconfig/network

# Get service config
[ -f /etc/sysconfig/bigsister ] && . /etc/sysconfig/bigsister

# Check that networking is up.
if is_no "${NETWORKING}"; then
	# nls "ERROR: Networking is down. %s can't be run." <service>
	msg_network_down Big Sister
	exit 1
fi

bs_killproc() {		# kill the named process(es)
	msg_stopping "${4-$1}"
	pid=`ps -e -o pid,comm,args 2>/dev/null | grep -w perl 2>/dev/null | grep " $1 " 2>/dev/null | grep -v grep | awk '{ print $1 }'`
	if [ "$pid" != "" ]; then 
		kill $2 $pid && ( ok ; : ) || fail
	else
		[ "$3" = "y" ] && ( died ; : ) || ok
	fi
}


# See how we were called.
case "$1" in
  start)
	# Check if the service is already running?
	if [ ! -f /var/lock/subsys/bigsister ]; then
		if is_yes "$UXMON_ASROOT" ; then
			uxmonprefix="/bin/sh"
		else
			uxmonprefix="su - bs -s /bin/sh"
		fi
		umask 022
	  	if [ -f /usr/lib/bs/bin/bsmon -a -f /etc/bs/etc/bsmon.cfg ]; then
			msg_starting "Big Sister bsmon"
			$uxmonprefix -c "/usr/bin/setsid /usr/lib/bs/bin/bsmon" > /dev/null 2>&1
			RETVAL=$?
			[ "$RETVAL" = "0" ] && ok || ( fail ; exit $RETVAL )
		fi
		if [ -f /usr/lib/bs/bin/bbd -a -f /etc/bs/adm/bb-display.cfg ]; then
			msg_starting "Big Sister bbd"
			$uxmonprefix -c "/usr/bin/setsid /usr/lib/bs/bin/bbd -b /usr/lib/bs $BBD_ARGS" >/dev/null 2>&1
			RETVAL=$?
			[ "$RETVAL" = "0" ] && ok || ( fail ; exit $RETVAL )
		fi
		for f in /etc/bs/adm/uxmon-net* ; do
			set `basename $f`
			case $1 in
			  *bak|*%|*~|*.rpmsave|*.rpmorig|*.rpmnew)
				continue
				;;
			  *)
			  	msg_starting "Big Sister uxmon $1"
				$uxmonprefix -c "/usr/bin/setsid /usr/lib/bs/uxmon/uxmon -r /usr/lib/bs/uxmon/uxmon-rules.pl -b /usr/lib/bs -c $1" >/dev/null 2>&1
				RETVAL=$?
				[ "$RETVAL" = "0" ] && ok || ( fail ; exit $RETVAL )
				;;
			esac
		done
		if [ -f /etc/bs/adm/bstrapd.cfg ]; then
			# bstrapd will only run as root
			msg_starting "Big Sister bstrapd"
			/usr/bin/setsid /usr/lib/bs/bin/bstrapd >/dev/null 2>&1
			[ "$RETVAL" = "0" ] && ok || ( fail ; exit $RETVAL )
		fi
		touch /var/lock/subsys/bigsister
	else
		msg_already_running Big Sister
		exit 1
	fi
	;;
  stop)
	if [ -f /var/lock/subsys/bigsister ]; then
		bs_killproc uxmon -QUIT y "Big Sister uxmon"
		bs_killproc bbd -QUIT n "Big Sister bbd if running"
		bs_killproc bb_event_generator -QUIT n "Big Sister bb_event_generator if running"
		bs_killproc bsmon -QUIT n "Big Sister bsmon if running"
		bs_killproc bstrapd -QUIT n "Big Sister bstrapd if running"
		rm -f /var/lock/subsys/bigsister
	else
		msg_not_running Big Sister
		exit 1
	fi
	;;
  restart|reload)
  	$0 stop
	$0 start
	;;
  *)
	msg_usage "$0 {start|stop|restart|reload}"
	exit 1
	;;
esac

exit 0
