#!/bin/sh
#
# slavealloc
#
# chkconfig:   345 85 15
# description: slave allocator daemon

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

NAME=production-1080
BASEDIR=/builds/slavealloc/$NAME
lockfile=/var/lock/subsys/slavealloc-$NAME
pidfile=$BASEDIR/twistd.pid
LOGFILE=$BASEDIR/slavealloc.log
TACFILE=$BASEDIR/slavealloc.tac
USER=slavealloc
GROUP=slavealloc
VIRTUALENV=/tools/slavealloc

start() {
    [ -x $VIRTUALENV/bin/twistd ] || exit 5
    [ -f $TACFILE ] || exit 6
    echo -n "starting slavealloc $NAME"
    cd $BASEDIR # --rundir doesn't work with the customized .tac logging
    daemon $VIRTUALENV/bin/twistd  \
		    --pidfile=$pidfile \
		    --rundir=$BASEDIR \
		    --python=$TACFILE \
		    --logfile=$LOGFILE \
		    --uid=$USER \
		    --gid=$GROUP || echo "FAILED"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n "stopping slavealloc $NAME"
    kill `cat "${pidfile}"`
    echo
    rm -f $lockfile
    return $retval
}

restart() {
    stop && start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    if [ -f $pidfile ]; then
	if kill -0 `cat $pidfile`; then
	    echo "running"
	    return 0
        else
	    echo "dead but pidfile remains"
	    return 1
    	fi
    else
	if [ -f $lockfile ]; then
	    echo "dead but lockfile remains"
	    return 2
        else
	    echo "not running"
	    return 3
    	fi
    fi
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?
