#!/bin/sh
# event script to manage httpd in a cluster environment

[ -n "$CTDB_BASE" ] || \
    export CTDB_BASE=$(cd -P $(dirname "$0") ; dirname "$PWD")

. $CTDB_BASE/functions

detect_init_style

case $CTDB_INIT_STYLE in
    redhat)
	service_name="httpd"
	service_config="http"
	;;
    suse|debian|*)
	service_name="apache2"
	service_config="apache2"
	;;
esac

# RHEL5 sometimes use a SIGKILL to terminate httpd, which then leaks
# semaphores.  This is a hack to clean them up.
cleanup_httpd_semaphore_leak() {
    killall -q -0 "$service_name" ||
    for i in $(ipcs -s | awk '$3 == "apache" { print $2 }') ; do
	ipcrm -s $i
    done
}

##########

service_start ()
{
    cleanup_httpd_semaphore_leak
    service $service_name start
}
service_stop ()
{
    service $service_name stop
    killall -q -9 $service_name || true
}

service_reconfigure ()
{
    service $service_name restart
}

loadconfig

ctdb_start_stop_service

is_ctdb_managed_service || exit 0

ctdb_service_check_reconfigure

case "$1" in
    startup)
	ctdb_service_start
	;;

    shutdown)
	ctdb_service_stop
	;;

    monitor)
	if ctdb_check_tcp_ports 80 >/dev/null 2>/dev/null ; then
	    ctdb_counter_init
	else
	    ctdb_counter_incr

	    ctdb_check_counter warn -eq 2 || {
		echo "HTTPD is not running. Trying to restart HTTPD."
		service_stop
		service_start
		exit 0
	    }
            ctdb_check_counter warn -ge 5 || {
		echo "HTTPD is not running. Trying to restart HTTPD."
		service_stop
		service_start
		exit 1
	    }
	fi
	;;

    *)
	ctdb_standard_event_handler "$@"
	;;
esac

exit 0

