#!/bin/sh
#
# sw-cp-server		   Startup script for sw-cp-server
#
# chkconfig: - 85 15
# processname: sw-cp-server
# config: /etc/sw-cp-server/config
# pidfile: /var/run/sw-cp-server.pid
# description: HTTP server for Plesk control panel
#
### BEGIN INIT INFO
# Provides: sw-cp-server
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Plesk control panel server
### END INIT INFO

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

conffile="/etc/sw-cp-server/config"

binary=/usr/sbin/sw-cp-serverd
lockfile=/var/lock/sw-cp-server.lock
pidfile=/var/run/sw-cp-server.pid
prog=$(basename $binary)
SLEEPMSEC=1000000
RETVAL=0

start() {
	[ -x $binary ] || exit 5
	[ -f $conffile ] || exit 6

	echo -n $"Starting $prog: "

	daemon --pidfile=${pidfile} ${binary} -c ${conffile}
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && touch ${lockfile}
	return $RETVAL
}

stop() {
	echo -n $"Stopping $prog: "
	killproc -p ${pidfile} ${prog}
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
	return $RETVAL
}

restart() {
	configtest -q || exit 6
	stop
	start
}

reload() {
	echo -n $"Reloading $prog: "
	killproc -p ${pidfile} ${prog} -HUP
	RETVAL=$?
	echo
}

reopen() {
	echo -n $"Reopen log files of $prog: "
	killproc -p ${pidfile} ${prog} -USR1
	RETVAL=$?
	echo
}

upgrade() {
	local oldbinpidfile=${pidfile}.oldbin

	configtest -q || return 6
	echo -n $"Staring new master $prog: "
	killproc -p ${pidfile} ${prog} -USR2
	RETVAL=$?
	echo
	/bin/usleep $SLEEPMSEC
	if [ -f ${oldbinpidfile} -a -f ${pidfile} ]; then
		echo -n $"Graceful shutdown of old $prog: "
		killproc -p ${oldbinpidfile} ${prog} -QUIT
		RETVAL=$?
		echo
	else
		echo $"Sw-cp-server upgrade failed! Attempting hard restart."
		$0 restart
		RETVAL=$?
	fi
}

configtest() {
	if [ "$#" -ne 0 ] ; then
		case "$1" in
			-q)
				FLAG=$1
				;;
			*)
				;;
		esac
		shift
	fi
	${binary} -t -c ${conffile} $FLAG
	RETVAL=$?
	return $RETVAL
}

rh_status() {
	status -p ${pidfile} ${prog}
}

rh_status_q() {
	rh_status >/dev/null 2>&1
}

# See how we were called.
case "$1" in
	start)
		rh_status_q && exit 0
		start
		;;
	stop)
		rh_status_q || exit 0
		stop
		;;
	status)
		rh_status
		RETVAL=$?
		;;
	restart)
		restart
		;;
	upgrade)
		rh_status_q || exit 7
		upgrade
		;;
	reopen)
		reopen
		;;
	condrestart|try-restart)
		rh_status_q || exit 7
		restart
		;;
	force-reload|reload)
		configtest -q || exit 6
		reload
		;;
	configtest)
		configtest
		;;
	*)
		echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|upgrade|reload|status|help|configtest|reopen}"
		RETVAL=2
esac

exit $RETVAL

