#!/bin/bash

unset LANG

PIDFILE=$OMD_ROOT/tmp/run/mkeventd/pid
STATUS_SOCKET=$OMD_ROOT/tmp/run/mkeventd/status
DAEMON=$OMD_ROOT/bin/mkeventd
STATEFILE=$OMD_ROOT/var/mkeventd/status
THE_PID=$(cat $PIDFILE 2>/dev/null)
# OPTS="--debug"
OPTS=""

. $OMD_ROOT/etc/omd/site.conf
if [ "$CONFIG_MKEVENTD" != on ] ; then
    exit 5
fi

case "$1" in
    start)
        if [ "$CONFIG_MKEVENTD_SYSLOG" = on ] \
           || [ "$CONFIG_MKEVENTD_SYSLOG_TCP" = on ] \
           || [ "$CONFIG_MKEVENTD_SNMPTRAP" = on ]; then

            ADD_TXT=
            if [ "$CONFIG_MKEVENTD_SYSLOG" = on ]; then
                ADD_TXT+='syslog-udp,'
                OPTS+=' --syslog --syslog-fd 3'
            fi
            if [ "$CONFIG_MKEVENTD_SYSLOG_TCP" = on ]; then
                ADD_TXT+='syslog-tcp,'
                OPTS+=' --syslog-tcp --syslog-tcp-fd 4'
            fi
            if [ "$CONFIG_MKEVENTD_SNMPTRAP" = on ]; then
                ADD_TXT+='snmptrap,'
                OPTS+=' --snmptrap --snmptrap-fd 5'
            fi

            echo -n "Starting mkeventd (builtin: ${ADD_TXT%*,})..."
            if kill -0 $THE_PID >/dev/null 2>&1; then
              echo 'Already running.'
              exit 0
            fi


            ${DAEMON}_open514 $OPTS
        else
            echo -n 'Starting mkeventd...'
            if kill -0 $THE_PID >/dev/null 2>&1; then
              echo 'Already running.'
              exit 0
            fi
            $DAEMON $OPTS
        fi
        echo OK
    ;;
    stop)
        echo -n 'Stopping mkeventd...'
        if [ -z "$THE_PID" ] ; then
            echo 'Not running.'
        else
            echo -n "killing $THE_PID..."
            kill $THE_PID 2>/dev/null
            if [ $? -eq 0 ]; then
                # Only wait for pidfile removal when the signal could be sent
                N=0
                while [ -e "$PIDFILE" ] ; do
                    sleep 0.05
                    if [ $((N % 20)) -eq 0 ]; then
                        echo -n .
                    fi
                    N=$((N + 1))
                    if [ $N -gt 200 ] ; then
                        echo "PID file did not vanish."
                        exit 1
                    fi
                done
            else
                # Remove the stale pidfile to have a clean state after this
                rm $PIDFILE
            fi
            echo 'OK'
        fi
    ;;
    restart)
        $0 stop && sleep 1 && $0 start
    ;;
    reload)
        echo -n 'Reloading mkeventd...'
        if [ -z "$THE_PID" ] ; then
            echo 'Not running.'
            exit 1
        else
            echo "killing $THE_PID with SIGHUP..."
            kill -1 $THE_PID
        fi
    ;;
        
    status)
        echo -n 'Checking status of mkeventd...'
        if [ -z "$THE_PID" ] ; then
            echo "not running (PID file missing)"
            exit 1
        elif ! kill -0 $THE_PID ; then
            echo "not running (PID file orphaned)"
            exit 1
        else
            echo "running"
            exit 0
        fi
    ;;
    flush)
        if [ -n "$THE_PID" ] && kill -0 $THE_PID ; then  
            echo -n "Flushing current state and history..."
            result=$(echo "COMMAND FLUSH" | unixcat $STATUS_SOCKET)
            if [ "$result" = "None" ] ; then
                echo OK
                exit 0
            else
                echo "ERROR: $result"
                exit 1
            fi
        else
            echo -n "Deleting status and history files..."
            rm -f $OMD_ROOT/var/mkeventd/{status,master_config,slave_status,history/*}
            echo OK
            exit 0
        fi
    ;;
    *)
        echo "Usage: $0 {start|stop|restart|reload|status|flush}"
    ;;
esac
