#!/bin/bash
#
# chkconfig: - 99 01
# description: Starts and stops Red Hat Service (resource group) Manager

### BEGIN INIT INFO
# Provides:		rgmanager
# Required-Start:	cman
# Required-Stop:	cman
# Default-Start:
# Default-Stop:
# Short-Description:	Starts and stops Red Hat Service (resource group) Manager
# Description:		Starts and stops Red Hat Service (resource group) Manager
### END INIT INFO

success()
{
    echo -ne "[  OK  ]\r"
}

failure()
{
    echo -ne "[FAILED]\r"
}

status()
{
    pid=$(pidof $1 2>/dev/null)
    rtrn=$?
    if [ $rtrn -ne 0 ]; then
        echo "$1 is stopped"
    else
        echo "$1 (pid $pid) is running..."
    fi
    return $rtrn
}

# rpm based distros
if [ -d /etc/sysconfig ]; then
	[ -f /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
	[ -f /etc/sysconfig/cluster ] && . /etc/sysconfig/cluster
	[ -f /etc/sysconfig/rgmanager ] && . /etc/sysconfig/rgmanager
	[ -z "$LOCK_FILE" ] && LOCK_FILE="/var/lock/subsys/rgmanager"
fi

# deb based distros
if [ -d /etc/default ]; then
	[ -f /etc/default/cluster ] && . /etc/default/cluster
	[ -f /etc/default/rgmanager ] && . /etc/default/rgmanager
	[ -z "$LOCK_FILE" ] && LOCK_FILE="/var/lock/rgmanager"
fi

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin

export PATH

ID="Cluster Service Manager"
RGMGRD="rgmanager"

LOG_ERR=3
LOG_WARNING=4
LOG_NOTICE=5
LOG_INFO=6

#
# log_and_print <level> <message>
#
log_and_print()
{
	if [ -z "$1" -o -z "$2" ]; then
		return 1;
	fi

	clulog -s $1 "$2"
	echo -n $2

	return 0;
}


#
# Bring down the cluster on a node.
#
stop_cluster()
{
	kill -TERM $(pidof $RGMGRD)

	while [ 0 ]; do

		if [ -n "$(pidof $RGMGRD)" ]; then
			echo -n "Waiting for services to stop: " 
			while [ -n "`pidof $RGMGRD`" ]; do
				sleep 1
			done
			success
			echo
		else
			echo "Services are stopped."
		fi

		# Ensure all NFS rmtab daemons are dead.
		killall $RMTABD > /dev/null 2>&1

		rm -f /var/run/$RGMGRD.pid

		return 0
	done
}


case $1 in
	start)
		echo -n "Starting $ID: "

		# most recent distributions use tmpfs for /var/run
		# to avoid to clean it up on every boot.
		# they also assume that init scripts will create
		# required subdirectories for proper operations
		mkdir -p /var/run/cluster

		$RGMGRD $RGMGR_OPTS
		rtrn=$?
		if [ $rtrn = 0 ]; then
			touch $LOCK_FILE
			success
		else
			failure
		fi
		echo

		exit $rtrn
		;;

	restart)
		$0 status > /dev/null 2>&1
		if [ $? -ne 1 ]; then
			$0 stop
		fi
		$0 start
		;;
		
	condrestart)
		$0 status > /dev/null 2>&1
		if [ $? -eq 0 ]; then
			$0 stop
			$0 start
		fi
		;;

	reload)
		log_and_print $LOG_NOTICE "Reloading Resource Configuration."
		kill -HUP $(pidof $RGMGRD) 2>&1
		rtrn=$?
		if [ $rtrn = 0 ]; then
			success
		else
			failure
		fi
		echo

		exit $rtrn
		;;

	status)
		status $RGMGRD
		exit $?
		;;

	stop)
		if [ -n "$(pidof $RGMGRD)" ]; then
			log_and_print $LOG_NOTICE "Shutting down $ID..."
			echo
			stop_cluster
		fi

		rm -f $LOCK_FILE
		log_and_print $LOG_NOTICE "$ID is stopped."
		echo
		;;
	*)
		echo "usage: $0 {start|restart|condrestart|reload|status|stop}"
		exit 1
		;;
esac

exit 0
