#!/bin/sh
# 
# chkconfig: 345 99 01
# description: Nagios network monitor
#
# File : nagios
#
# Author : Jorge Sanchez Aymar (jsanchez@lanchile.cl)
# 
# Changelog :
#
# 1999-07-09 Karl DeBisschop <kdebisschop@infoplease.com>
#  - setup for autoconf
#  - add reload function
# 1999-08-06 Ethan Galstad <egalstad@nagios.org>
#  - Added configuration info for use with RedHat's chkconfig tool
#    per Fran Boon's suggestion
# 1999-08-13 Jim Popovitch <jimpop@rocketship.com>
#  - added variable for nagios/var directory
#  - cd into nagios/var directory before creating tmp files on startup
# 1999-08-16 Ethan Galstad <egalstad@nagios.org>
#  - Added test for rc.d directory as suggested by Karl DeBisschop
# 2000-07-23 Karl DeBisschop <kdebisschop@users.sourceforge.net>
#  - Clean out redhat macros and other dependencies
# 2003-01-11 Ethan Galstad <egalstad@nagios.org>
#  - Updated su syntax (Gary Miller)
#
# Description: Starts and stops the Nagios monitor
#              used to provide network services status.
#

. /lib/svc/share/smf_include.sh

# SMF_FMRI is the name of the target service. This allows multiple instances
# to use the same script.

getproparg() {
    val=`svcprop -p $1 $SMF_FMRI`
    [ -n "$val" ] && echo $val
}

status_nagios ()
{
    if test -x $NagiosCGI/daemonchk.cgi; then
	if $NagiosCGI/daemonchk.cgi -l $NagiosRunFile; then
	    return 0
	else
	    return 1
	fi
    else
	if ps -p $NagiosPID > /dev/null 2>&1; then
	    return 0
	else
	    return 1
	fi
    fi
    return 1
}


killproc_nagios ()
{

    kill $2 $NagiosPID

}


pid_nagios ()
{
    if test ! -f $NagiosRunFile; then
	echo "No lock file found in $NagiosRunFile"
	exit 1
    fi
    NagiosPID=`head -n 1 $NagiosRunFile`
}


NagiosBin=`getproparg nagios/bin`
NagiosCfgFile=`getproparg nagios/cfgfile`
NagiosStatusFile=`getproparg nagios/statusfile`
NagiosRetentionFile=`getproparg nagios/retensionfile`
NagiosCommandFile=`getproparg nagios/`
NagiosVarDir=`getproparg nagios/vardir`
NagiosRunFile=`getproparg nagios/runfile`
NagiosLockDir=`getproparg nagios/lockdir`
NagiosLockFile=`getproparg nagios/lockfile`
NagiosCGIDir=`getproparg nagios/cgidir`
NagiosUser=`getproparg nagios/user`
NagiosGroup=`getproparg nagios/group`

if [ -z $SMF_FMRI ]; then
    echo "Error: SMF framework variables are not initialized"
    exit $SMF_EXIT_ERR
fi

# Check that nagios exists.
if [ ! -x $NagiosBin ]; then
    echo "Executable file $NagiosBin not found.  Exiting."
    exit $SMF_EXIT_ERR_CONFIG
fi

# Check that nagios.cfg exists.
if [ ! -f $NagiosCfgFile ]; then
    echo "Configuration file $NagiosCfgFile not found.  Exiting."
    exit $SMF_EXIT_ERR_CONFIG
fi

# See how we were called.
case "$1" in

    start)
	echo -n "Starting nagios:"
	$NagiosBin -v $NagiosCfgFile > /dev/null 2>&1;
	if [ $? -eq 0 ]; then
	    su - $NagiosUser -c "touch $NagiosVarDir/nagios.log $NagiosRetentionFile"
	    rm -f $NagiosCommandFile
	    touch $NagiosRunFile
	    chown $NagiosUser:$NagiosGroup $NagiosRunFile
	    $NagiosBin -d $NagiosCfgFile
	    if [ -d $NagiosLockDir ]; then touch $NagiosLockDir/$NagiosLockFile; fi
	    echo " done."
	    exit 0
	else
	    echo "CONFIG ERROR!  Start aborted.  Check your Nagios configuration."
	    exit $SMF_EXIT_ERR_CONFIG
	fi
	;;

    stop)
	echo -n "Stopping nagios: "

	pid_nagios
	killproc_nagios nagios

 		# now we have to wait for nagios to exit and remove its
 		# own NagiosRunFile, otherwise a following "start" could
 		# happen, and then the exiting nagios will remove the
 		# new NagiosRunFile, allowing multiple nagios daemons
 		# to (sooner or later) run - John Sellens
		#echo -n 'Waiting for nagios to exit .'
 	for i in 1 2 3 4 5 6 7 8 9 10 ; do
 	    if status_nagios > /dev/null; then
 		echo -n '.'
 		sleep 1
 	    else
 		break
 	    fi
 	done
 	if status_nagios > /dev/null; then
 	    echo ''
 	    echo 'Warning - nagios did not exit in a timely manner'
 	else
 	    echo 'done.'
 	fi

	rm -f $NagiosStatusFile $NagiosRunFile $NagiosLockDir/$NagiosLockFile $NagiosCommandFile
	;;

    refresh)
	printf "Running configuration check..."
	$NagiosBin -v $NagiosCfgFile > /dev/null 2>&1;
	if [ $? -eq 0 ]; then
	    echo "done."
	    if test ! -f $NagiosRunFile; then
		$0 start
	    else
		pid_nagios
		if status_nagios > /dev/null; then
		    printf "Reloading nagios configuration..."
		    killproc_nagios nagios -HUP
		    echo "done"
		else
		    $0 stop
		    $0 start
		fi
	    fi
	else
	    echo " CONFIG ERROR!  Reload aborted.  Check your Nagios configuration."
	    exit $SMF_EXIT_ERR_CONFIG

	fi
	;;

    *)
	echo "Usage: $0 {start|stop|refresh}"
	exit 1
	;;

esac

# End of this script
exit $SMF_EXIT_OK
