#!/bin/bash
### BEGIN INIT INFO
# Provides:          httpd-avs
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: AVS
# Description:       Start/Stop Apache Virtual Servers
### END INIT INFO
#
# Platform:    Ubuntu
# update-rc.d: httpd-avs start 15 2 3 4 5 . stop 85 0 1 6 .
# description: Apache is a World Wide Web server.  It is used to serve \
#              HTML files and CGI.
# processname: httpd-avs

# Variables
AVSDIR=/usr/local/avs
HTTPD_AVS=httpd-avs
HTTPD_PREFIX="httpd-"
APACHECTL=bin/apache2ctl
PS="/bin/ps -ef"
GREP=/bin/grep
KILL="/bin/kill -9"
AWK=/usr/bin/awk
LOGGER=/usr/bin/logger
RM=/bin/rm

# Functions

# Start all servers
START ()
{
	# Disable regular apache
	/usr/sbin/service apache2 stop
	/usr/sbin/update-rc.d -f apache2 remove

	cd $AVSDIR
	for SITE in ${HTTPD_PREFIX}*;
	do
		echo "Starting $SITE..."
		$SITE/$APACHECTL start
		sleep 1

		# Check results
		$PS|$GREP -v $GREP|$GREP -q $SITE

		# Log failures to the syslog
		if [ ! "$?" = "0" ];
	        then
			echo "Instance $SITE failed to start."
			$LOGGER -p local4.info "WARNING: httpd instance $SITE failed to start."
		else
			echo "Instance $SITE started."
		fi
	done
}

# Stop all servers
STOP ()
{
	cd $AVSDIR
	for SITE in ${HTTPD_PREFIX}*;
        do
                echo "Stopping $SITE..."
		$SITE/$APACHECTL stop
		if [ "$?" = "0" ];
		then
			echo "Instance $SITE stopped."
		else
			echo "Instance $SITE failed to stop."
		fi
	done

	# Check results
	echo "Checking for hung httpd processes..."
	sleep 5
	$PS|$GREP -v $GREP|$GREP -v $HTTPD_AVS|$GREP -q httpd

	# If there are hung httpd processes, kill them
	if [ "$?" = "0" ];
	then
		echo "Some httpd processes not stopping; killing them..."
		for PROCESS in "`$PS|$GREP -v $GREP|$GREP -v $HTTPD_AVS|$GREP httpd|$AWK '{print $2}'`";
		do
			$KILL $PROCESS
		done
	fi

	# Do a final check; log information to syslog either way
	$PS|$GREP -v $GREP|$GREP -v $HTTPD_AVS|$GREP -q httpd
        if [ "$?" = "0" ];
        then
		echo "Failed to kill all httpd instances."
		$LOGGER -p local4.info "NOTICE: Failed to kill all httpd instances."
		exit 1
	fi
	echo "All httpd instances stopped."
	$LOGGER -p local4.info "All httpd instances stopped."
}

# Script
case "$1" in
	start)
		START
		;;
	stop)
		STOP
		;;
	restart)
		STOP
		START
		;;
	*)
		echo "Usage: $0 [stop|start|restart]"
		;;
esac