#!/bin/sh

### BEGIN INIT INFO
# Provides:             bhsvc
# Required-Start:       $remote_fs
# Required-Stop:        $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    NAKIVO Backup & Replication Transporter service
### END INIT INFO

#default to Linux
#. /etc/init.d/functions

SVC_NAME='NAKIVO Backup & Replication Transporter service'
SVC_LCK="/var/lock/nkv-bhsvc"
SVC_PATH="%SVC_PATH%"
SVC_PORT=%SVC_PORT%

start()
{
    # Check for already running service
    if [ -f "$SVC_LCK" ]; then
        PID=`ps %PS_FLAGS% | grep -vE '(grep)|(postgres)|(nkv-)|(defunct)' | grep 'bhsvc' | sed -n '/^[[:space:]]*\([[:digit:]]\+\).*/s//\1/p'`
        if [ "x$PID" != "x" ]; then
            echo "$SVC_NAME is already running (pid $PID)"
            return 0
        fi

        rm -f "$SVC_LCK" >/dev/null 2>&1
    fi

    echo -n "Starting $SVC_NAME: "
    "$SVC_PATH/bhsvc" %SVC_OPTIONS% "$SVC_PORT" >/dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo 'failed'
        return 1
    fi

    sleep 1 >/dev/null 2>&1
    PID=`ps %PS_FLAGS% | grep -vE '(grep)|(nkv-)|(defunct)' | grep 'bhsvc' | sed -n '/^[[:space:]]*\([[:digit:]]\+\).*/s//\1/p'`
    if [ "x$PID" = "x" ]; then
        echo "failed"
        return 1
    fi

    touch "$SVC_LCK" >/dev/null 2>&1
    echo "$PID"
    return 0
}

stop()
{
    if [ -f $SVC_LCK ]; then
        rm -f "$SVC_LCK" >/dev/null 2>&1

        PID=`ps %PS_FLAGS% | grep -vE '(grep)|(nkv-)|(defunct)' | grep 'bhsvc' | sed -n '/^[[:space:]]*\([[:digit:]]\+\).*/s//\1/p'`
        if [ "x$PID" != "x" ]; then
            echo "Stopping $SVC_NAME: $PID"
            kill $PID >/dev/null 2>&1
            while ps %PS_FLAGS% | grep -qE "^ *$PID "; do
                sleep 1 >/dev/null 2>&1
            done

            sleep 10
            return 0
        fi
    fi

    echo "$SVC_NAME is stopped"
}

status()
{
    if [ -f $SVC_LCK ]; then
        PID=`ps %PS_FLAGS% | grep -vE '(grep)|(nkv-)|(defunct)' | grep 'bhsvc' | sed -n '/^[[:space:]]*\([[:digit:]]\+\).*/s//\1/p'`
        if [ "x$PID" != "x" ]; then
            echo "$SVC_NAME is running (pid $PID)"
            return 0
        else
            echo "$SVC_NAME is not running"
            return 2
        fi
    fi

    echo "$SVC_NAME is stopped"
    return 3
}

case "$1" in
    'start')
        start
        exit $?
    ;;

    'stop')
        stop
        exit 0
    ;;

    'status')
        status
        exit $?
    ;;

    'restart')
        stop
        start
        exit $?
    ;;

    *)
        echo "usage: $0 start|stop|status"
        exit 1
    ;;
esac
