#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          kuwatcher
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop kuwatcher program
### END INIT INFO
#
# (c) Lorenzo Canovi (KUBiC Labs, CH) <packager@kubiclabs.com>
# for copyright see /usr/share/doc/kuwatcher/copyright
#
set -e

PROGNAME="kuwatcher"
DESC="[ku] Watcher daemon"
DAEMON="/usr/sbin/kuwatcher"

# init options
#
KUWATCHER_ENABLE="false"
KUWATCHER_OPTS=''
KUWATCHER_NICE_PARM=''

test -x $DAEMON || exit 0

. /lib/lsb/init-functions
[ -f /etc/default/rcS ] && . /etc/default/rcS

default="/etc/default/$PROGNAME"

[ -s $default ] && {
  . $default
  case "X$KUWATCHER_ENABLE" in
    Xtrue|Xfalse)   ;;
    Xinetd)
    	exit 0
	;;
    *)
    	log_failure_msg "$default: \$KUWATCHER_ENABLE must be 'true' or 'false', $DAEMON not started"
	exit 1
	;;
  esac
  case "X$KUWATCHER_NICE" in
    X[0-9])         KUWATCHER_NICE_PARM="--nicelevel $KUWATCHER_NICE";;
    X[1-9][0-9])    KUWATCHER_NICE_PARM="--nicelevel $KUWATCHER_NICE";;
    X) ;;
    *)	log_warning_msg "$default: \$KUWATCHER_NICE must be a number from 0 to 19 (inclusive), $DAEMON not started"
	;;
  esac
}

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

do_start()
{
	$KUWATCHER_ENABLE || return 0

	is_running && {
		log_warning_msg "daemon $DAEMON already running"
		return 0
	}

        log_daemon_msg "Starting $DESC" "$PROGNAME"
        if start-stop-daemon --start --quiet --background \
                --pidfile /var/run/$PROGNAME.pid --make-pidfile \
                $KUWATCHER_NICE_PARM --exec $DAEMON \
                -- --daemon --reset $KUWATCHER_OPTS
        then
        	rc=0
                sleep 1
                is_running || {
                	log_failure_msg "daemon $DAEMON failed to start"
                	rc=1
                }
	else
                rc=1
	fi
	if [ $rc -eq 0 ]; then
                log_end_msg 0
	else
                log_end_msg 1
                rm -f /var/run/$PROGNAME.pid
	fi
}


do_stop()
{
	local retry=10

	if is_running
	then
        	log_daemon_msg "Stopping $DESC" "$PROGNAME"
		start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/$PROGNAME.pid
		sleep 3
		while is_running
		do
			[ $retry = 0 ] && {
				grepkill $DAEMON
				break
			}
			echo "   retrying ($retry) ..."
			retry=`expr $retry - 1 || :` # ?? expr return status 1 when computing 1 - 1
			sleep 1
		done
		if is_running
		then
        		log_end_msg 1
		else
			log_end_msg 0
		fi
	else
		log_warning_msg "daemon $DAEMON is not running"
	fi
	rm -f /var/run/$PROGNAME.pid
}

is_running()
{
	local running="`ps axwwwwwww | grep $DAEMON | fgrep -v grep`"
	[ "$running" = "" ] && return 1
	return 0

	#if [ -f /var/run/$PROGNAME.pid ]
	#then
		#kill -0 $(cat /var/run/$PROGNAME.pid) >/dev/null 2>&1
	#else
		#return 1
	#fi
}


grepkill()
{
	local prog=$1
	local sig=${2:-"9"}
	local pid=

	echo -n "  try to kill -$sig $DAEMON ... "
	pid="`ps axwwww | grep -- "$prog" | grep -v grep | awk '{ print $1 }'`"

	[ "$pid" = "" ] && {
		echo "not found"
		return 0
	}
	echo "pid=$pid"
	kill -$sig $pid
}




case "$1" in
  start)	do_start ;;
  stop)		do_stop ;;
  restart)
  	do_stop
	sleep 2
	do_start
	;;
  reload|force-reload)
        #log_warning_msg "reloading $PROGNAME daemon: not needed, as the daemon re-reads the configs every run"
	do_stop
	do_start
	;;
  status)
	if is_running
	then
		echo "$PROGNAME is running"
	else
		echo "$PROGNAME is not running"
	fi
	;;
  *)
	echo "usage: /etc/init.d/$PROGNAME {start|stop|reload|force-reload|restart|status}"
	exit 1
esac

exit 0
