#!/bin/bash
#
# maxscale:   The MariaDB Corporation MaxScale database proxy
#
# description:  MaxScale provides database specific proxy functionality
#
# processname: maxscale
#
### BEGIN INIT INFO
# Provides: maxscale
# Required-Start: $syslog $local_fs
# Required-Stop: $syslog $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: The maxscale database proxy
# Description: MaxScale is a database proxy server that can be used to front end
# database clusters offering different routing, filtering and protocol choices
### END INIT INFO

#############################################
# MaxScale HOME, PIDFILE, LIB
#############################################

export MAXSCALE_PIDFILE=@MAXSCALE_VARDIR@/run/maxscale/maxscale.pid
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:@CMAKE_INSTALL_PREFIX@/@MAXSCALE_LIBDIR@/maxscale

###############################
# LSB Exit codes (non-Status)
###############################
_RETVAL_GENERIC=1
_RETVAL_NOT_INSTALLED=5
_RETVAL_NOT_RUNNING=7

###############################
# LSB Status action Exit codes
###############################
_RETVAL_STATUS_OK=0
_RETVAL_STATUS_NOT_RUNNING=3

# Sanity checks.
[ -x @CMAKE_INSTALL_PREFIX@/@MAXSCALE_BINDIR@/maxscale ] || exit $_RETVAL_NOT_INSTALLED

# Source additional command line arguments.
[ -f /etc/default/maxscale ] &&  . /etc/default/maxscale

#################################
# stop/start/status related vars
#################################
NAME=maxscale
DAEMON=@CMAKE_INSTALL_PREFIX@/@MAXSCALE_BINDIR@/maxscale
DAEMON_OPTS="--user=maxscale $MAXSCALE_OPTIONS"

# Source function library.
. /lib/lsb/init-functions

# we can rearrange this easily
processname=maxscale
servicename=maxscale

RETVAL=0

start() {

    if [ ! -d @MAXSCALE_VARDIR@/log/maxscale ]
    then
        mkdir -p @MAXSCALE_VARDIR@/log/maxscale
    fi

    if [ ! -d @MAXSCALE_VARDIR@/cache/maxscale ]
    then
        mkdir -p @MAXSCALE_VARDIR@/cache/maxscale
    fi

    if [ ! -d @MAXSCALE_VARDIR@/lib/maxscale ]
    then
        mkdir -p @MAXSCALE_VARDIR@/lib/maxscale
    fi

    if [ ! -d @MAXSCALE_VARDIR@/run/maxscale ]
    then
        mkdir -p @MAXSCALE_VARDIR@/run/maxscale
    fi

    chown -R maxscale:maxscale @MAXSCALE_VARDIR@/log/maxscale
    chown -R maxscale:maxscale @MAXSCALE_VARDIR@/lib/maxscale
    chown -R maxscale:maxscale @MAXSCALE_VARDIR@/cache/maxscale
    chown -R maxscale:maxscale @MAXSCALE_VARDIR@/run/maxscale
    chmod 0755 @MAXSCALE_VARDIR@/log/maxscale
    chmod 0755 @MAXSCALE_VARDIR@/lib/maxscale
    chmod 0755 @MAXSCALE_VARDIR@/cache/maxscale
    chmod 0755 @MAXSCALE_VARDIR@/run/maxscale

    ulimit -HSn 65535
    log_daemon_msg "Starting MaxScale"
    start_daemon -p "$MAXSCALE_PIDFILE" $DAEMON $DAEMON_OPTS 2> /dev/null > /dev/null

    sleep 2

    status_of_proc -p "$MAXSCALE_PIDFILE" "$DAEMON" $NAME

    log_end_msg $?
}

stop() {
        log_daemon_msg "Stopping MaxScale"

        maxscale_wait_stop

        log_end_msg $?
}

reload() {
        log_daemon_msg "Reloading MaxScale"
        
        kill -HUP $(cat "$MAXSCALE_PIDFILE")

        log_end_msg $?
}

maxscale_wait_stop() {
        PIDTMP=$(pidofproc -p "$MAXSCALE_PIDFILE" "$DAEMON")
        kill -TERM "${PIDTMP:-}" 2> /dev/null;
        if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
                local i=0
                while kill -0 "${PIDTMP:-}" 2> /dev/null;  do
                        if [ $i = '60' ]; then
                                break
                                STATUS=2
                        fi
                        [ "$VERBOSE" != no ] && log_progress_msg "."
                        sleep 1
                        i=$(($i+1))
                done
                return $STATUS
        else
            return $STATUS
        fi
}

# See how we were called.
case "$1" in
    start)
	start
        ;;
    stop)
        stop
        ;;
    status)
	# return 0 on success
	# return 3 on any error

        log_daemon_msg "Checking MaxScale"
        status_of_proc -p "$MAXSCALE_PIDFILE" "$DAEMON" $NAME
        RETVAL=$?

        if [ $RETVAL -ne 0 ]; then
                [ $RETVAL -eq 1 ]

                RETVAL=$_RETVAL_STATUS_NOT_RUNNING
        else
                RETVAL=$_RETVAL_STATUS_OK
        fi

        log_end_msg $RETVAL
        ;;
    restart)
        stop
        start
        ;;
    reload)
	reload
        RETVAL=$?
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|reload}"
        ;;
esac
exit $RETVAL
