#!/bin/sh

# chkconfig: 345 98 02
# description: Check_MK Event Console Daemon

### BEGIN INIT INFO
# Provides:       mkeventd
# Required-Start:
# Required-Stop:
# Default-Start:  2 3 5
# Default-Stop:
# Description:    Start Check_MK Event Console Daemon
### END INIT INFO

SOCKETDIR=/var/spool/check_mk/mkeventd
DAEMON=/usr/bin/mkeventd
VARDIR=/var/lib/mkeventd
CONFDIR=/etc/check_mk
MKEVENTD_SYSLOG=off
RUNUSER=nagios
LIVESTATUS=/var/spool/check_mk/livestatus.cmd
# DEBUG="--debug --foreground"

PIDFILE=$SOCKETDIR/pid
STATUS_SOCKET=$SOCKETDIR/status
STATEFILE=$VARDIR/status
OPTS="-C $CONFDIR --statedir $VARDIR --logdir $VARDIR -P $SOCKETDIR/events -E $SOCKETDIR/eventsocket -S $STATUS_SOCKET --pidfile $PIDFILE $DEBUG"
THE_PID=$(cat $PIDFILE 2>/dev/null)

case "$1" in
    start)
        if [ "$MKEVENTD_SYSLOG" = on ] ; then
            echo -n 'Starting mkeventd with integrated syslog...'
            if kill -0 $THE_PID >/dev/null 2>&1; then
                echo 'Already running.'
                exit 0
            fi
            su -s /bin/sh - $RUNUSER -c "${DAEMON}_open514 --syslog --syslog-fd 3 $OPTS"
        else
            echo -n 'Starting mkeventd...'
            if kill -0 $THE_PID >/dev/null 2>&1; then
              echo 'Already running.'
              exit 0
            fi
            su -s /bin/sh - $RUNUSER -c "$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.5
                    echo -n .
                    N=$((N + 1))
                    if [ $N -gt 20 ] ; 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 && $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 $VARDIR/{status,master_config,slave_status,history/*}
            echo OK
            exit 0
        fi
    ;;
    *)
	echo "Usage: $0 {start|stop|restart|reload|status|flush}"
    ;;
esac
