#!/bin/sh
# 
# chkconfig: 345 80 20
# description:	Starts all zope servers or single zope server
#
#
# Source function library.
. /etc/init.d/functions

Z2=/usr/lib/zope/z2.py
[ -e "$Z2" ] || exit

#LOCKFILE=/var/lock/subsys/syslogd
RETVAL=0
. /etc/sysconfig/zope_default


pidofproc() {
	# Test syntax.

#	echo "=========== $1" 1>&2
	if [ $# = 0 ] ; then
		echo "Usage: pidofproc {program}"
		return 1
	fi

	# First try the "$INSTANCE_HOME/var/Z2.pid" file
#	echo "pidofroc $1"
	if [ -f ${INSTANCE_HOME}/var/Z2.pid ] ; then
	        if [ "$1" = "zwatchdog" ] ; then
	                pid=`sed -e 's/^\([0-9]\+\) [0-9]\+/\1/' /var/run/zwatchdog.${instance}.pid`
		else
		        if [ "$1" = "zserver" -o "$1" = "/usr/bin/python" ] ; then
		                pid=`sed -e 's/^[0-9]\+ \([0-9]\+\)/\1/' ${INSTANCE_HOME}/var/Z2.pid`
#				echo "=========== " ${INSTANCE_HOME} 1>&2
			fi
	        fi

		if [ "$pid" != "" ] ; then
			echo $pid
			return 0
		fi
	fi

	# Next try "/var/run/*.pid" files
	if [ -f /var/run/$1.pid ] ; then
	        pid=`head -1 /var/run/$1.pid`
	        if [ "$pid" != "" ] ; then
	                echo $pid
	                return 0
	        fi
	fi

	# Next try "pidof"
	pid=`pidof -o $$ -o $PPID -o %PPID -x $1`
	if [ "$pid" != "" ] ; then
	        echo $pid
	        return 0
	fi
}

start()
{
	echo -n "Starting Zope server for $1: "
	. /etc/sysconfig/zope_default
	. /etc/sysconfig/zope/$1
	if [  "$ignore" != 1 -o "$ignore_yes" == 0 ]; then
		set_environment $1;

                if [ "$ZOPE_READONLY" == 1 ] ; then
                        export ZOPE_READONLY=1
                        echo 'ReadOnly!'
                else :
                        unset ZOPE_READONLY
			export -n ZOPE_READONLY
                fi

		daemon /usr/bin/python $Z2 $LC $trace -u $user -P $port -t $threads -l /var/log/zope.$1.log -Z /var/run/zwatchdog.$1.pid
	     
		RETVAL=$?
	else :
		echo_passed
	fi;
	echo
#	[ $RETVAL -eq 0 ] && touch "$LOCKFILE"
}


set_environment() 
{
	. /etc/sysconfig/zope_default
	. /etc/sysconfig/zope/$1
	if [ $LC_ALL ]; then 
		LC="-L $LC_ALL"
	else :
		LC=""
	fi
	if [ "$ZOPE_PROFILE_PUBLISHER" == 1 ]; then 
		export PROFILE_PUBLISHER=/var/tmp/zope.$1.profile;
	else :
		unset PROFILE_PUBLISHER;
		export -n PROFILE_PUBLISHER;
	fi;
	if [ "$ZOPE_STORAGE" ]; then 
		export ZOPE_STORAGE
	else :
		export -n ZOPE_STORAGE;
	fi;
	export INSTANCE_HOME
	cd $INSTANCE_HOME
	ln -sf /var/log/zope/$1.log /var/log/zope.$1.log # -L ru_RU.KOI8-R 
	if [ "$ZOPE_TRACE" == 1 ]; then
		trace="-M /var/log/zope/$1.trace.log"
	elif [ -w "$ZOPE_TRACE"  ] ; then 
		trace="-M $ZOPE_TRACE"
		if [ -c "$ZOPE_TRACE" ] ; then 
			echo -ne "\033(K" > "$ZOPE_TRACE" 
		fi;
	else :
		trace=''
	fi
	if [ "$ZOPE_STUPID_LOG" == "1" ]; then
		export STUPID_LOG_FILE=/var/log/zope/$1.stupid.log
	elif [ -w "$ZOPE_STUPID_LOG"  ] ; then 
		export STUPID_LOG_FILE=$ZOPE_STUPID_LOG
		if [ -c "$ZOPE_STUPID_LOG" ] ; then 
			echo -ne "\033(K" > "$ZOPE_STUPID_LOG" 
		fi;
	else :
		unset STUPID_LOG_FILE;
		export -n STUPID_LOG_FILE;
	fi
	if [ "$ZOPE_STDOUT" == "1" ]; then
		ZOPE_STDOUT=/var/log/zope/$1.error.log
	elif [ -w "$ZOPE_STDOUT"  ] ; then 
		if [ -c "$ZOPE_STDOUT" ] ; then 
			echo -ne "\033(K" > "$ZOPE_STDOUT" 
		fi;
	else :
		ZOPE_STDOUT=/dev/null
		export -n STUPID_LOG_FILE;
	fi
}

debug()
{
	stop $1
	sleep 2
	ISSTOP=$?
	while true; do #
		set_environment $1;
		unset STUPID_LOG_FILE
		export -n STUPID_LOG_FILE
		/usr/bin/python $Z2 $LC $trace -u $user -P $port -t $threads -l /var/log/zope.$1.log -Z /var/run/zwatchdog.$1.pid -D;
		sleep 2;
	done;
	RETVAL=$?
	echo
	sleep 2
	start $1
#	[ $RETVAL -eq 0 ] && touch "$LOCKFILE"
}

stop()
{
	echo -n "Shutting down Zope server for $1: "
	. /etc/sysconfig/zope_default
	. /etc/sysconfig/zope/$1
	
	killproc zwatchdog
	killproc zserver
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && rm -f "$LOCKFILE"
	return $RETVAL
}

restart()
{
	stop
	start
}

# See how we were called.

command=$1
shift
if [ "$@" ]; then
   instances=$@
   ignore_yes=0
else
   instances=$(command ls /etc/sysconfig/zope/*|grep -vE "*~|^\.*$")
   ignore_yes=1
fi;


for instance in $instances; do
   instance=$(basename $instance)
   case "$command" in 
	start)
		start $instance
		;;

	debug)
		debug $instance
		;;

	stop)
		stop $instance
		;;
	status)
		status "zwatchdog.$instance"
		RETVAL=$?
		;;

	reload)
		stop $instance
		start $instance
		;;

	restart)
		stop $instance
		start $instance
		;;
	help)
		echo -e "Usage:"
		echo -e "\tSUPPRESS_SITEROOT=1 ${0##*/} [...]"
		;;

	*)
		echo "Usage: ${0##*/} {start|stop|status|restart|help}"
		RETVAL=1
		break;
   esac
done
exit $RETVAL
