#! /bin/sh
#
# inisever      Control the Thirdlane API Service
#
# chkconfig: 2345 90 10
# description: Thirdlane API Service
# processname: roadrunnerd
# config: /etc/sysconfig/apiservice
# pidfile: /var/run/roadrunnerd.pid

# Source function library.
. /etc/rc.d/init.d/functions

[ -f /etc/sysconfig/apiservice ] && . /etc/sysconfig/apiservice

API_USER=${API_USER:=api}
API_GROUP=${API_GROUP:=api}
API_GROUPS=${API_GROUPS:=bin nginx prosody}

RETVAL=0
PROCNAME=roadrunnerd
PROC_ID=API::Service::Supervisor
PID_FILE=$API_HOME/var/run/roadrunner.pid
API_WRAPPER=$API_HOME/roadrunner/bin/wrapper.sh
CONF=$API_HOME/etc/roadrunner.conf
SVC_PID=""

echo `date +'%F %T.%N'` $PROCNAME $1 >>/tmp/thirdlane_daemons.log

declare -a SUP_GROUPS=(${API_GROUPS})

SUP_GROUPS=${SUP_GROUPS[*]/#/-G }

case "$1" in
  start)
        echo -n "Starting Thirdlane API Service: "
        let available_memory="$(free -m | grep Mem: | awk '{print $2}')+$(free -m | grep Swap: | awk '{print $2}')"
        if [ $available_memory -lt 3000 ]
        then
            RETVAL=1
            echo_failure
            echo "Can't start service, it require server to have at least 3 Gb of Virtual memory."
        else
            if [ -f $PID_FILE ]
            then
                SVC_PID=$(cat ${PID_FILE})
                PID_FILE="/proc/${SVC_PID}/cmdline"

                if [ -f $PID_FILE ]
                then
                    SVC_CMD=$(cat ${PID_FILE})
                    if [ "$SVC_CMD" = "$PROC_ID" ]
                    then
                        echo_success
                        touch /var/lock/subsys/apiservice
                        RETVAL=1
                    fi
                fi
            fi

            if [ $RETVAL -eq 0 ]
            then
                runuser --login --shell /bin/bash ${SUP_GROUPS} --group ${API_GROUP} --session-command "$API_HOME/roadrunner/bin/roadrunnerctl --command=start --config=$CONF" ${API_USER} > /dev/null
                RETVAL=$?
                if [ $RETVAL -eq 0 ]
                then
                    echo_success
                    touch /var/lock/subsys/apiservice
                else
                    echo_failure
                fi
            else
                RETVAL=0
            fi
        fi
        echo
        ;;
  stop)
        echo -n "Stopping Thirdlane API Service: "

        if [ -f $PID_FILE ]
        then
            SVC_PID=$(cat ${PID_FILE})
            PID_FILE="/proc/${SVC_PID}/cmdline"

            if [ -f $PID_FILE ]
            then
                SVC_CMD=$(cat ${PID_FILE})
                if [ "$SVC_CMD" = "$PROC_ID" ]
                then
                    runuser --login --shell /bin/bash ${SUP_GROUPS} --group ${API_GROUP} --session-command "$API_HOME/roadrunner/bin/roadrunnerctl --command=down --service=all --config=$CONF" ${API_USER} > /dev/null
                    sleep 5
                    runuser --login --shell /bin/bash ${SUP_GROUPS} --group ${API_GROUP} --session-command "$API_HOME/roadrunner/bin/roadrunnerctl --command=stop --config=$CONF" ${API_USER} > /dev/null
                    sleep 2

                    rm -f /var/lock/subsys/apiservice
                    RETVAL=0
                fi
            fi
        fi

        echo_success

        rm -f /var/lock/subsys/apiservice

        echo
        ;;
  status)
        echo -n "Thirdlane API Service: "
        runuser --login --shell /bin/bash ${SUP_GROUPS} --group ${API_GROUP} --session-command "$API_HOME/roadrunner/bin/roadrunnerctl --command=status --config=$CONF" ${API_USER} > /dev/null
        RETVAL=$?
        if [ $RETVAL -eq 0 ]
        then
                echo "is running"
        else
                echo "is stopped"
                rm -f /var/lock/subsys/apiservice
        fi
        echo
        ;;
  restart|reload)
        $0 stop
        $0 start
        RETVAL=$?
        ;;
  *)
        echo "Usage: apiservice {start|stop|status|restart}"
        exit 1
esac

exit $RETVAL

