#!/bin/sh
#
# WebKit application server
# part of Webware for Python
# www.webwareforpython.org
#
# /etc/init.d/webkit
#
# init.d script for SuSE Linux
#
### BEGIN INIT INFO
# Provides: webkit
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: WebKit Application Server (Webware for Python)
### END INIT INFO

### START LOCAL CONFIGURATION

# If you store this script in your Webware working directory
# and create a symlink to it as /etc/init.d/webkit_appname,
# it will try to guess your configuration parameters. You can
# make changes either directly here or you can also override
# the configuration in the Launch.py script.

# The name of your Webware application:
APP_NAME=`basename "$0"`

# The location of the start sript:
if [ -h "$0" ]; then
	# Get the target file if start script is given as a link:
	START_SCRIPT=`readlink -f "$0"`
else
	START_SCRIPT="$0"
fi

# The working directory or path to WebKit:
WORK_DIR=`dirname "$START_SCRIPT"`
# Make sure to have the absolute path:
test -d "$WORK_DIR" || exit 5
WORK_DIR=`cd "$WORK_DIR" 2>/dev/null && pwd`

# The app server launch script:
APP_SERVER="$WORK_DIR/AppServer"
test -x "$APP_SERVER" || exit 5

# The app server configuration:
APP_SERVER_CONFIG="$WORK_DIR/Configs/AppServer.config"
test -f "$APP_SERVER_CONFIG" || exit 5

# The WebKit app server log file
# (you can set this in Launch.py as well):
#LOG_FILE="/var/log/$APP_NAME.log"
LOG_FILE="$WORK_DIR/Logs/webkit.log"
# Use this extension if you want to move the last log away
# (also consider using logrotate or something similar):
LOG_OLD=".old"

# The app server process id file
# (you can set this in Launch.py as well):
#PID_FILE="/var/run/$APP_NAME.pid"
PID_FILE="$WORK_DIR/webkit.pid"

# The user and group to run the app server
# (you can set this in Launch.py as well).
# If undefined, it will be the user and group
# running the start script (usually root).
# You should use a low-privilege account,
# like the work dir owner, wwwrun or nobody.
# This will use the owner of the AppServer script:
WEBWARE_USER=`stat -c "%U" "$APP_SERVER"`
WEBWARE_GROUP=`stat -c "%G" "$APP_SERVER"`

# Unset the following variable if you want to store the
# pid and log files as the user running the start script
# (usually root) or set it if you want these files to be
# written after switching to WEBWARE_USER:WEBWARE_GROUP.
LAUNCH_AS_WEBWARE="yes"

# Additional options -u or -O to be passed on to Python:
PYTHONOPTS=
# Additional libraries to be included in the Python path:
PYTHONPATH=
export PYTHONPATH

### END LOCAL CONFIGURATION

# Source SuSE Linux function library:
. /etc/rc.status

rc_reset

case "$1" in
	start)
		echo -n "Starting $APP_NAME "
		# Keep backup of last log file:
		if [ "$LOG_OLD" -a -f "$LOG_FILE" ]; then
			if [ -s "$LOG_FILE" ]; then
				mv "$LOG_FILE" "$LOG_FILE$LOG_OLD"
			else
				rm "$LOG_FILE"
			fi
		fi
		# Prepare options to set user and group
		if [ "$WEBWARE_USER" ]; then
			WEBWARE_USER="-u $WEBWARE_USER"
		fi
		if [ "$WEBWARE_GROUP" ]; then
			WEBWARE_GROUP="-g $WEBWARE_GROUP"
		fi
		# Note that the pid file does not record the pid of the
		# wrapper script, but the pid of the Python app server:
		if [ "$LAUNCH_AS_WEBWARE" ]; then
			# Switch user first, then create pid and log files:
			startproc -f -l /dev/null \
				$WEBWARE_USER $WEBWARE_GROUP \
				"$APP_SERVER" $PYTHONOPTS \
				-i "$PID_FILE" -d "$WORK_DIR" -o "$LOG_FILE"
		else
			# Create pid and log files first, then switch user:
			startproc -f -l "$LOG_FILE" \
				"$APP_SERVER" $PYTHONOPTS \
				-i "$PID_FILE" -d "$WORK_DIR" \
				$WEBWARE_USER $WEBWARE_GROUP
		fi
		rc_status -v
		;;
	stop)
		echo -n "Shutting down $APP_NAME "
		# Note that we are terminating the Python app server here;
		# the app server wrapper script will follow automatically:
		if [ -f "$PID_FILE" ] ; then
			killproc -p "$PID_FILE" -TERM python
		else
			rc_failed 7
		fi
		rc_status -v
		;;
	try-restart)
		"$0" status >/dev/null && "$0" restart
		rc_status
		;;
	restart)
		"$0" stop
		"$0" start
		rc_status
		;;
	force-reload|reload)
		echo -n "Reloading $APP_NAME "
		if [ -f "$PID_FILE" ] ; then
			killproc -p "$PID_FILE" -HUP python
		else
			rc_failed 7
		fi
		rc_status -v
		;;
	status)
		echo -n "Checking for $APP_NAME "
		if [ -f "$PID_FILE" ] ; then
			checkproc -p $PID_FILE python
		else
			rc_failed 1
		fi
		rc_status -v
		;;
	probe)
		test "$APP_SERVER_CONFIG" -nt "$PID_FILE" && echo reload
		;;
	*)
		echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
		exit 1
		;;
esac

rc_exit
