#!/bin/sh
#
# heartbeat	Starts heartbeat.
#
# chkconfig:	345 40 60
# description:	Heartbeat.

HA_DIR=/etc/ha.d
CONFIG=$HA_DIR/ha.cf
. $HA_DIR/shellfuncs

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

# Get service config
[ -f /etc/sysconfig/heartbeat ] && . /etc/sysconfig/heartbeat

if [ ! -f $CONFIG ]; then
	nls "Heartbeat not configured: $CONFIG not found."
	exit 1
fi

CrmEnabled() {
	case `ha_parameter crm | tr '[A-Z]' '[a-z]'` in
		y|yes|enable|on|true|1|manual)
			true;;
		*)
			false;;
	esac
}

StandbyHA() {
  auto_failback=`ha_parameter auto_failback | tr 'A-Z' 'a-z'`
  nice_failback=`ha_parameter nice_failback | tr 'A-Z' 'a-z'`

  case "$auto_failback" in
    *legacy*)	echo "auto_failback is set to legacy.  Cannot enter standby."
		exit 1;;
  esac
  case "$nice_failback" in
    *off*)	echo "nice_failback is disabled.  Cannot enter standby."
		exit 1;;
  esac
  case "${auto_failback}${nice_failback}" in
    "")	echo "auto_failback defaulted to legacy.  Cannot enter standby."
		exit 1;;
  esac

  echo "auto_failback: $auto_failback"
  if
    $HA_BIN/heartbeat -s >/dev/null 2>&1
  then
    show "Attempting to enter standby mode"; busy
    if
      $HA_BIN/hb_standby
    then
      # It's impossible to tell how long this will take.
      started
    else
      fail
    fi
  else
    msg_not_running heartbeat
  fi
}

RunStartStop() {
# Run pre-startup script if it exists
if [ -f $HA_DIR/resource.d/startstop ]; then
	$HA_DIR/resource.d/startstop "$@"
fi
}

start() {
	$HA_BIN/ha_logd -s 2>&1 >/dev/null
	if [ $? -ne 0 ]; then
		msg_starting ha_logd
		daemon --pidfile /var/run/logd.pid $HA_BIN/ha_logd -d
	else
		msg_already_running "ha_logd"
	fi
	if $HA_BIN/heartbeat -s 2>&1 >/dev/null; then 
		msg_already_running "Heartbeat"
	else
		RunStartStop pre-start
		if ! CrmEnabled; then
			$HA_NOARCHBIN/ResourceManager verifyallidle
		fi
		for d in /var/run/heartbeat/{crm,ccm}; do
			if ! [ -d $d ]; then
				mkdir -p $d
				chown hacluster:haclient $d
				chmod 750 $d
			fi
		done
		msg_starting "Heartbeat"
		daemon --pidfile /var/run/heartbeat.pid $HA_BIN/heartbeat 2>&1
		touch /var/lock/subsys/heartbeat
		RETVAL=$?
		RunStartStop post-start $RETVAL
	fi
}

stop() {
	RunStartStop "pre-stop"
	$HA_BIN/heartbeat -s 2>&1 >/dev/null
	if [ $? -eq 0 ]; then
		msg_stopping "Heartbeat"
		busy
		$HA_BIN/heartbeat -k
		RETVAL=$?
		[ $RETVAL -eq 0 ] && ok || fail
	else
		msg_not_running heartbeat
	fi
	RunStartStop post-stop $RETVAL
	$HA_BIN/ha_logd -s 2>&1 >/dev/null
	if [ $? -eq 0 ]; then
		msg_stopping ha_logd
		busy
		$HA_BIN/ha_logd -k
		RETVAL=$?
		[ $RETVAL -eq 0 ] && ok || fail
	else
		msg_not_running ha_logd
	fi
	rm -f /var/lock/subsys/heartbeat /var/run/heartbeat.pid /var/run/logd.pid 2>/dev/null
}

RETVAL=0
case "$1" in
  start)
	start
	;;
  standby)
	StandbyHA
	RETVAL=$?
	;;
  status)
	$HA_BIN/heartbeat -s
	RETVAL=$?
	;;
  stop)
	stop
	;;
  restart)
	stop
	start
	;;
  force-reload|reload)
	msg_reloading "Heartbeat"
	busy
	$HA_BIN/heartbeat -r
	RETVAL=$?
	[ $RETVAL -eq 0 ] && ok || fail
	;;
  *)
	msg_usage "$0 {start|stop|status|standby|restart|reload|force-reload}"
	exit 3
	;;
esac

exit $RETVAL
