#!/bin/bash
# Basic support for IRIX style chkconfig
###
# chkconfig: 235 98 55
# description: Manages shoal server with chkconfig.
###

# set non-default path to shoal-agent executable
# eg. "/opt/bin/shoal-server"
EXECUTABLEPATH="shoal-server"

# Non-default python.
PYTHON=""

SERVICE=shoal_server
LOG=/var/log/${SERVICE}.log
PIDFILE=/var/run/$SERVICE.pid
COMMAND=$1
shift

for i in "$PIDFILE" "$LOG"; do
    # If the file doesn't exist, check that we have write access to its parent
    # directory to be able to create it.
    test -e "$i" || i=`dirname "$i"`
    test -w "$i" || {
        echo >&2 "$0: error: Cannot write to $i"
        exit 4
    }
done

start () {
    if [ -f $PIDFILE ]; then
        PID=`cat $PIDFILE`
        ps $PID >/dev/null

        if [ $? -eq 0 ]; then
            PID=`cat $PIDFILE`
            echo $"$SERVICE is already running with PID ${PID}."
            return 1
        else
            echo $"$SERVICE didn't shut down cleanly last time."
            rm -f $PIDFILE
        fi
    fi
    echo "Starting $EXECUTABLEPATH"
    ${PYTHON} ${EXECUTABLEPATH} >> $LOG 2>&1 &
    echo $! > $PIDFILE
}

# stop [signum]
stop () {
    if [ -f $PIDFILE ]; then
        echo -n $"Stopping $SERVICE:"
        PID=`cat $PIDFILE`
        /bin/kill $PID
        while ps -p $PID >/dev/null; do sleep 1; done
        if [ $? -eq 0 ]; then
            rm -f $PIDFILE >/dev/null 2>&1
        fi
    fi
}

status () {
        if [ -f $PIDFILE ]; then
            PID=`cat $PIDFILE`
            ps $PID >/dev/null

            if [ $? -eq 0 ]; then
                PID=`cat $PIDFILE`
                echo $"$SERVICE is running with PID ${PID}."
            else
                echo $"$SERVICE has exited unexpectedly."
            fi
        else
            echo "$SERVICE isn't running."
        fi
}

forcekill () {
    if [ -f $PIDFILE ]; then
        echo -n $"Killing $SERVICE:"
        /bin/kill -9 `cat $PIDFILE`
        if [ $? -eq 0 ]; then
            rm -f $PIDFILE >/dev/null 2>&1
        fi
    fi
}

case $COMMAND in
    start) start
        ;;
    force-restart)
        forcekill
        start
        ;;
    restart)
        stop
        start
        ;;
    stop) stop
        ;;
    status) status
            exit $?
        ;;
    *)  echo >&2 "usage: $0 <start|stop|restart|status|force-restart>"
        exit 1
        ;;
esac

