#! /bin/sh
#
# init script for the nagios monitor
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nagios
NAME=nagios
DESC=nagios
NICENESS=5
NAMEDPIPE=/var/run/nagios/nagios.cmd
PIDFILE=/var/run/nagios/nagios.pid
CONFIG=/etc/nagios/nagios.cfg

test -f $DAEMON || exit 0

# LC_NUMERIC must be set to POSIX for locales that use ',' in floating point 
# numbers, otherwise some plugins will break.
export LC_NUMERIC
LC_NUMERIC=POSIX

set -e

#
#	check_started()
#
# checks not only for the pid (which could be done by start-stop-daemon), 
# but also for whether or not nagios is updating the status log (or database
# in the case of nagios-mysql and nagios-pgsql)
#
check_started () {
	if [ -f /etc/nagios/check_nagios_db ]; then
		if ! /etc/nagios/check_nagios_db > /dev/null; then
			return 1 	# isn't started
		fi
	elif [ -f /usr/lib/nagios/plugins/check_nagios ]; then
		if ! /usr/lib/nagios/plugins/check_nagios -e 15 -F /var/log/nagios/status.log -C '/usr/sbin/nagios' > /dev/null; then
			return 1    # isn't started
		fi
	fi
	if [ -f $PIDFILE ]; then
		pid=`cat $PIDFILE`
		if [ "$pid" ] && ps $pid >/dev/null; then
			return 0    # Is started
		fi
	fi
	return 1	# Isn't started
}

get_config () {
    set -- `grep ^$1 $CONFIG | sed 's@=@ @'`
    echo $2
}

check_config () {
    if $DAEMON -v $CONFIG >/dev/null 2>&1 ; then
	# First get the user/group etc Nagios is running as
	nagios_user=`get_config nagios_user`
	nagios_group=`get_config nagios_group`
	log_file=`get_config log_file`
	log_dir=`dirname $log_file`

	# Chown the log directory to this user/group so that
	# Nagios can write there.
	chown -R ${nagios_user}:$nagios_group $log_dir

	return 0    # Config is ok
    else
    	# config is not okay, so let's barf the error to the user
        $DAEMON -v $CONFIG
	return 1    # Config not ok
    fi
}

check_named_pipe () {
    if [ -p $NAMEDPIPE ]; then
	return 1   # a named pipe exists
    else
	return 0   # no named pipe exists
    fi
}

case "$1" in
  start)
	echo -n "Starting $DESC: "
	if ! check_started; then
	    if ! check_named_pipe; then
		echo "named pipe exists - removing"
		rm -f $NAMEDPIPE
	    fi

	    if check_config; then
		rm -f $NAMEDPIPE		
	    start-stop-daemon --start --quiet \
			--nicelevel $NICENESS \
		    --pidfile $PIDFILE \
		    --make-pidfile --background --exec $DAEMON -- $CONFIG
		echo "$NAME."
	    else
		echo "errors in config!"
	    fi
	else
	    echo "already running"
	fi
	;;
  stop)
	echo -n "Stopping $DESC: "
	start-stop-daemon --stop --quiet --pidfile $PIDFILE \
		--oknodo --exec $DAEMON
	echo "$NAME."
	rm -f $PIDFILE
	rm -f $NAMEDPIPE
	;;
  reload|force-reload)
	echo "Reloading $DESC configuration files."
	# Check first
	if check_config; then
	    if check_started; then
		start-stop-daemon --stop --signal 1 --quiet --pidfile \
		    $PIDFILE --exec $DAEMON
	    else
		echo "Not running."
	    fi
	else
	    echo "Errors in config file. Not reloading."
	fi
  	;;
  restart)
	$0 stop
	sleep 2
	$0 start
	;;
  *)
	N=/etc/init.d/$NAME
	echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
	exit 1
	;;
esac

exit 0
