#!/bin/sh
#
# BOOTH daemon init script for LSB-compliant Linux distributions.
#
# booth-arbitrator      BOOTH arbitrator daemon
#
# chkconfig: - 20 20
# processname:  boothd
# pidfile:      /var/run/boothd.pid
# description:  Cluster Ticket Registry
### BEGIN INIT INFO
# Provides: booth
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop BOOTH arbitrator daemon
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
NAME="boothd"
DAEMON=/usr/sbin/$NAME
DESC="booth arbitration daemon"

# Don't run if not installed
test -f $DAEMON || exit 0

# Evaluate the config for the Debian scripts
RUN_ARBITRATOR=no
PIDFILE=/var/run/$NAME.pid
OPTIONS="daemon -c /etc/booth/booth.conf"

if [ -r /etc/default/booth ]; then
  . /etc/default/booth
fi


# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --test --start --quiet \
                --pidfile $PIDFILE --name $NAME --startas $DAEMON \
                >/dev/null \
                || return 1

        start-stop-daemon --start --quiet \
                --pidfile $PIDFILE --name $NAME --startas $DAEMON \
                -- $OPTIONS \
                || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        PID=$(perl -lne 'print $1 if /booth_pid=(\d+)/' /var/run/booth/booth.pid 2>/dev/null)
        [ "$PID" ] || return 1
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
                --pid $PID --name $NAME
        return "$?"
}

case "$1" in
  start)
        if [ "$RUN_ARBITRATOR" != "yes" ]; then
                log_warning_msg "To run $DESC, please set RUN_ARBITRATOR to 'yes' in /etc/default/booth"
                log_end_msg 0
                exit 0
        fi
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        if [ "$RUN_ARBITRATOR" != "yes" ]; then
                log_warning_msg "To run $DESC, please set RUN_ARBITRATOR to 'yes' in /etc/default/booth"
                log_end_msg 0
                exit 0
        fi
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;

  status)
        echo -n "Status of $DESC: "
        if [ ! -r "$PIDFILE" ]; then
                echo "$NAME is not running."
                exit 3
        fi
        if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then
                echo "$NAME is running."
                exit 0
        else
                echo "$NAME is not running but $PIDFILE exists."
                exit 1
        fi
        ;;


  restart|force-reload)
        if [ $RUN_ARBITRATOR != "yes" ]; then
                log_warning_msg "To run $DESC, please set RUN_ARBITRATOR to 'yes' in /etc/default/booth"
                exit 0
        fi
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;

  *)
        N=/etc/init.d/$NAME
        # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
        log_success_msg "Usage: $N {start|stop|restart|force-reload}"
        exit 1
        ;;
esac
