#!/bin/sh

### BEGIN INIT INFO
# Provides:          shinken
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: shinken
# Description:       shinken monitoring daemon
### END INIT INFO

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

NAME="shinken"
MODULES="scheduler poller reactionner broker arbiter"
LOCKFILE=/var/lock/subsys/$NAME

# Read configuration variable file if it is present
[ -r /etc/sysconfig/shinken ] && . /etc/sysconfig/shinken

do_start() {
    # Check if it is already running
    if [ ! -f $LOCKFILE ]; then
        rc=0
        for module in $MODULES; do
            gprintf "Starting %s:" "$module" 
            if [ $module != "arbiter" ]; then
                args="-c /etc/shinken/${module}d.ini"
            else
                args="-c /etc/nagios/nagios.cfg -c /etc/shinken/shinken-specific.cfg"
            fi
            daemon "shinken-${module} -d $args >/dev/null 2>&1"
            rc=$(($rc + $?))
            echo
        done

        if [ $rc -eq 0 ]; then
            # everything OK
            touch $LOCKFILE
        fi
    else
        gprintf "%s is already running\n" "$NAME"
    fi
}

do_stop() {
    rc=0
    for module in $MODULES; do
        if [ $module != "arbiter" ]; then
            pidfile=/var/lib/shinken/${module}d.pid
        else
            pidfile=$(awk -F = '/^lock_file/ {print $2}' /etc/nagios/nagios.cfg)
        fi
        if [ -f $pidfile ]; then
            gprintf "Stopping %s:" "$module"
            killproc -p $pidfile shinken-$module
            rc=$(($rc + $?))
            echo
        fi
    done

    rm -f $LOCKFILE
}

do_status() {
    for module in $MODULES; do
        if [ $module != "arbiter" ]; then
            pidfile=/var/lib/shinken/${module}d.pid
        else
            pidfile=$(awk -F = '/^lock_file/ {print $2}' /etc/nagios/nagios.cfg)
        fi
        status -p $pidfile shinken-$module
    done
}


do_check() {
    /usr/bin/shinken-arbiter -v \
        -c /etc/nagios/nagios.cfg \
        -c /etc/shinken/shinken-specific.cfg
    return $?
}

case "$1" in
    start)
        do_start
        ;;
    stop)
        do_stop
        ;;
    restart)
        do_stop
        do_start
        ;;
    status)
        do_status
        ;;
    check)
        do_check
        ;;
    *)
        gprintf "Usage: %s {start|stop|restart|status|check}\n" "$0"
        RETVAL=1
        ;;
esac

exit $RETVAL
