#!/bin/bash

#
# FirstClass Web Services control script.
# 

# find_pid name
find_pid()
{
	ps aux | grep -i $1 | grep -i 'python' | awk '{print $2}' | tr '\n' ' ' 
}

# send_signal pid [signal]
send_signal()
{
	# Signal the service
	if sudo kill $2 $1 ; then
		return 0
	else
		return 1
	fi
}


#Set platform dependent definitions
if [ "`uname -s`" = "Darwin" ] ; then
	SERVICE_FOLDER="/Library/FirstClass Web Services"
	USERDOCS="/Users/fcadmin/Documents"
	SERVICE_PROC="startfcws.command"
else
	SERVICE_FOLDER="/opt/FirstClass Web Services"
	USERDOCS="/home/fcadmin/documents"
	SERVICE_PROC="startfcws.sh"
fi

SERVICE_NAME="FirstClass Web Services"
SERVICE_APP="fcws"
WEBSERVER="cherry.py"
#

SERVICE_PID=`find_pid "$WEBSERVER"`
#
PRECMD="$USERDOCS/pre$SERVICE_APP"
POSTCMD="$USERDOCS/post$SERVICE_APP"

ERROR=0
ARGV="$@"
if [ "x$ARGV" = "x" ] ; then 
    ARGS="help"
fi

cd "$SERVICE_FOLDER"

for ARG in $@ $ARGS ; do
    case $ARG in
    start)
	if [ -n "$SERVICE_PID" ]; then
	    echo "$0 $ARG: $SERVICE_NAME ($SERVICE_PROC) is already running ( $SERVICE_PID)."
	    continue
	fi
	if [ -f "$PRECMD" ] ; then
	    source "$PRECMD" "$ARG"
	fi
	# Start the service"
	sudo -b "./$SERVICE_PROC" 
	sleep 5
	SERVICE_PID=`find_pid "$WEBSERVER"`
	if [ -n "$SERVICE_PID" ]; then
	    echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) started ( $SERVICE_PID)."
	    if [ -f "$POSTCMD" ] ; then
	        source "$POSTCMD" "$ARG"
	    fi
	else
	    echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) could not be started."
	    ERROR=3
	fi
	;;
    stop)
	if [ -z "$SERVICE_PID" ]; then
	    echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) is not running."
	else
	    if [ -f "$PRECMD" ] ; then
	        source "$PRECMD" "$ARG"
	    fi
	    # Halt the service
	    stoppingPIDs="$SERVICE_PID"
	    for PID in $SERVICE_PID
	    do
		send_signal $PID
	    done
	    sleep 5
	    SERVICE_PID=`find_pid "$WEBSERVER"`

	    if [ -z "$SERVICE_PID" ]; then
		echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) stopped ( $stoppingPIDs)."
	        if [ -f "$POSTCMD" ] ; then
	            source "$POSTCMD" "$ARG"
	        fi
	    else
		echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) could not be stopped ($SERVICE_PID)."
		ERROR=4
	    fi
	fi
	;;
    force)
	if [ -z "$SERVICE_PID" ]; then
	    echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) is not running."
	else
	    # Halt the service
            stoppingPIDs="$SERVICE_PID"
            for PID in $SERVICE_PID
            do
                send_signal $PID -9
            done
            sleep 5
            SERVICE_PID=`find_pid "$WEBSERVER"`
    
            if [ -z "$SERVICE_PID" ]; then
		echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) force-killed ($stoppingPIDs)."
	    else
		echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) could not be force-killed ($SERVICE_PID)."
		ERROR=4
	    fi
	fi
	;;
    restart)
	if [ -z "$SERVICE_PID" ]; then
	    echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) is not running."
	    "$0" "start"
	else
	    if [ -f "$PRECMD" ] ; then
	        source "$PRECMD" "$ARG"
	    fi
	    # Halt the service
	    if send_signal $SERVICE_PID ; then
		echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) stopped ( $SERVICE_PID)."
		sleep 10
		"$0" "start"
	    else
		echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) could not be stopped ($SERVICE_PID)."
	    	ERROR=4
	    fi
	fi
	;;
    status)
	if [ -z "$SERVICE_PID" ]; then
	    echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) is not running."
    	    ERROR=4
	else
	    echo "$0 $ARG: $SERVICE_NAME ($WEBSERVER) is running ( $SERVICE_PID)."
	fi
	;;
    *)
	echo "usage: $0 (start|stop|force|restart|status|help)"
	cat <<EOF

start      - start $SERVICE_NAME
stop       - stop $SERVICE_NAME (gracefully)
force      - stop $SERVICE_NAME (force-kill)
restart    - restart $SERVICE_NAME
status     - check whether the $SERVICE_NAME is running or not
help       - this screen

EOF
	ERROR=2
    ;;

    esac

done

exit $ERROR

