#! /bin/bash
set -e

### BEGIN INIT INFO
# Provides:          fwxserver
# Required-Start:    $local_fs $network $named $portmap $remote_fs $syslog $time
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: FileWave Server + MDM
# Description:       FileWave Server + MDM.
#                    The script launches fwxserver, the
#                    FileWave server, as a daemon. It will
#                    open ports 20005, 20006, 20015-20017
#                    and 20030 for TCP traffic.
#                    The script launches the FileWave MDM server, as a daemon. It will
#                    open ports 20443, 20445, 2195 and 5223 for TCP traffic.
### END INIT INFO

# for supervisord to always expand the environment variables. See /usr/local/etc/filewave/supervisor/supervisord-server.conf
export http_proxy=""
export https_proxy=""
export no_proxy=""
. /etc/environment

SERVICE_NAME="fw-booster"
FW_HOME=/usr/local/filewave

BOOSTER_INISCRIPT="/usr/local/etc/filewave/fw-booster"

SUPERVISORD="$FW_HOME/python/bin/supervisord"
SUPERVISORD_PID="/private/var/run/fw-supervisord-booster.pid"
SUPERVISORCTL="$FW_HOME/python/bin/supervisorctl"
SUPERVISOR_OPTIONS="-c /usr/local/etc/filewave/supervisor/supervisord-booster.conf"
SUPERVISORD_LOCK_FILE="/var/lock/subsys/supervisord-booster"

. /lib/lsb/init-functions
set +e # again, because init-functions disables it

start()
{
	"$BOOSTER_INISCRIPT" openfirewall

    echo -n $"Starting $SERVICE_NAME: "
    start_daemon -p $SUPERVISORD_PID $SUPERVISORD $SUPERVISOR_OPTIONS
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        touch ${SUPERVISORD_LOCK_FILE}
        log_success_msg "$SERVICE_NAME Started"
    else
        log_failure_msg "$SERVICE_NAME failed to start"
    fi
    return $RETVAL
}

stop()
{
    echo -n $"Stopping $SERVICE_NAME: "
    if [ -e /etc/redhat-release ]; then
        killproc -p ${SUPERVISORD_PID} -d 60 $SUPERVISORD
    else
        /sbin/start-stop-daemon --stop --retry 60 --quiet --name supervisord --pidfile ${SUPERVISORD_PID} || true
        rm -rf ${SUPERVISORD_PID}
    fi
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -rf ${SUPERVISORD_LOCK_FILE} ${SUPERVISORD_PID}
    log_success_msg "$SERVICE_NAME Stopped"
	"$BOOSTER_INISCRIPT" closefirewall
}

restart()
{
    stop
    start
}

reload()
{
    echo -n $"Reloading $SERVICE_NAME: "
    killproc -p ${SUPERVISORD_PID} $SUPERVISORD -HUP
    RETVAL=$?
    echo
    if [ $RETVAL -eq 7 ]; then
        log_failure_msg "$SERVICE_NAME reload error"
    else
        $SUPERVISORCTL $SUPERVISOR_OPTIONS status
    fi
}

force_reload()
{
    restart
}

status()
{
    PID=`pidofproc -p $SUPERVISORD_PID $SUPERVISORD`
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        echo "$SERVICE_NAME (pid $PID) is running..."
    else
        echo "$SERVICE_NAME is stopped"
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    reload)
        reload
        ;;
    force-reload)
        force_reload
        ;;
    status)
        status
        ;;
    *)
       echo $"Usage: $0 {start|stop|restart|reload|force-reload|status}"
       exit 1
esac

exit 0
