#! /bin/bash
# -----------------------------------------------------------------------------
# init.d script to run ON.Lab test cell warden
## -----------------------------------------------------------------------------
### BEGIN INIT INFO
# Provides:          warden
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: ON.Lab Test Cell Warden
# Description:       Warden is a broker for sharing test cell infrastructure among ON.Lab developers.
### END INIT INFO

WARDEN_USER="sdn"
WARDEN_HOME="/home/$WARDEN_USER/warden"
WARDEN_VERSION="1.6.0-SNAPSHOT"
DEBUG="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"

cd $WARDEN_HOME

start () {
    # Start warden if it's not already running
    if ! status >/dev/null; then
        echo "Starting Warden"
        startwarden
    else
        echo "Warden is already running"
    fi
}

startwarden () {
    start-stop-daemon --signal INT --start --chuid $WARDEN_USER \
        --pidfile $WARDEN_HOME/warden.pid --make-pidfile \
        --background --chdir $WARDEN_HOME \
        --exec /usr/bin/java -- -jar onlab-warden-$WARDEN_VERSION.jar \
            &>$WARDEN_HOME/std.log
}

stop () {
    if status >/dev/null; then
        echo "Stopping Warden"
        start-stop-daemon --signal INT --stop --chuid $WARDEN_USER \
            --pidfile $WARDEN_HOME/warden.pid
        rm warden.pid
    else
        echo "Warden is not running"
    fi
}

restart () {
    stop
    start
}

status () {
    start-stop-daemon --signal INT --status --chuid $WARDEN_USER \
        --pidfile $WARDEN_HOME/warden.pid
}

case $1 in
    start)
        start
    ;;
    stop | force-stop)
        stop
        ;;
    restart)
        shift
        restart "$@"
        ;;
    status)
        status && echo "Warden is running" || echo "Warden is stopped"
        exit $?
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}" >&2
        exit 1
        ;;
esac

exit 0
