#!/bin/bash

### BEGIN INIT INFO
# Provides:          mod_gearman_worker
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop the mod_gearman worker daemon
### END INIT INFO

# Check if Mod-Gearman is enabled in OMD. If not terminate.
cd /omd/sites/monitor
. /omd/sites/monitor/lib/omd/init_profile
. /omd/sites/monitor/.profile
. /omd/sites/monitor/etc/omd/site.conf
if [ "$CONFIG_MOD_GEARMAN" != "on" -o "$CONFIG_GEARMAN_WORKER" != "on" ] ; then
    exit 5
fi

DAEMON=/omd/sites/monitor/bin/mod_gearman_worker-go
NAME=gearman_worker
CONFIG=/omd/sites/monitor/etc/mod-gearman/worker.cfg
PIDFILE=/omd/sites/monitor/tmp/run/gearman_worker.pid
USER=monitor
USERID=`id -u`

# create state dir
if [ "$USERID" -eq 0 ]; then
  mkdir -p $(dirname $PIDFILE)
  chown $USER: $(dirname $PIDFILE)
fi

__init_hook $0 $1 pre
case "$1" in
    start)
        echo -n "Starting $NAME..."
        mkdir -p /omd/sites/monitor/tmp/run
        mkdir -p /omd/sites/monitor/var/log/gearman
        rm -f /omd/sites/monitor/var/log/mod-gearman/gearman
        CMD="$DAEMON -d --config=$CONFIG --pidfile=$PIDFILE"

        # worker opens lot of connections, so increase default ulimit to our hard limit
        ulimit -n $(ulimit -Hn) >/dev/null 2>&1

        if [ "$USERID" -eq 0 ]; then
            su -s $SHELL - $USER -c  "$CMD"
        else
            $CMD
        fi
        if [ $? -eq 0 ]; then
            echo "OK"
            __init_hook $0 $1 post 0
        else
            echo "failed"
            __init_hook $0 $1 post 1
        fi
        ;;
    stop)
        echo -n "Stopping $NAME..."
        pid=`cat $PIDFILE 2>/dev/null`
        if [ -z $pid ]; then
            echo ". Not running."
        else
            kill $pid
            for x in 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5; do
                echo -n "."
                ps -p $pid > /dev/null 2>&1 && sleep 1;
            done
            ps -p $pid > /dev/null 2>&1;
            if [ $? -ne 0 ]; then
                echo "OK"
                __init_hook $0 $1 post 0
                exit 0;
            else
                echo "failed"
                __init_hook $0 $1 post 1
                exit 1;
            fi
        fi
        ;;
    reload|force-reload)
        echo "Reloading $NAME configuration files"
        pid=`cat $PIDFILE 2>/dev/null`
        if [ "$pid" != "" ]; then
            kill -HUP $pid
        fi
    ;;
    status)
        pid=`cat $PIDFILE 2>/dev/null`
        if [ "$pid" != "" ]; then
            ps -p $pid > /dev/null 2>&1
            if [ $? -eq 0 ]; then
                echo "$NAME is running with pid $pid"
                exit 0;
            fi
        fi
        echo "$NAME is not running"
        exit 1;
    ;;
    restart)
        $0 stop && sleep 1 && $0 start
        exit $?
        ;;
    check)
        ;;
    *)
        echo "Usage: $NAME {start|stop|status|restart}"
        exit 1
        ;;
esac

exit 0
