#!/bin/sh
#
# Start-up script for the Webclient Cluster 
# Copyright notice: Copyright (c) 2005 - 2024 Veryant
#
# Determine the version of ISCOBOL to use.
#
# If ISCOBOL has been set by the user, use that, otherwise, determine
# the location of this script (which is known to be $ISCOBOL/bin/webclient-cluster)
# and derive the value of $ISCOBOL from that.
#
#
# Use following variables to override default settings:
# WEBCLIENT_CL_HOME
# WEBCLIENT_CL_OPTS
# WEBCLIENT_CL_JAVA_EXE
# WEBCLIENT_CL_JAVA_OPTS
# WEBCLIENT_CL_LOG_FILE
# WEBCLIENT_CL_PID_FILE
# 
# for example: 
# WEBCLIENT_CL_HOME=/home/webclient-cluster WEBCLIENT_CL_JAVA_EXE=/var/share/jdk8/bin/java ./webclient-cluster start

if [ -z "${ISCOBOL}" ]
then
    D=`dirname $0`
    B=`basename $0`
    abspath="`cd \"${D}\" 2>/dev/null && pwd || echo \"${D}\"`/${B}"
    _BIN_DIR=`dirname ${abspath}`
    ISCOBOL=`dirname ${_BIN_DIR}`
fi

if [ -f "$ISCOBOL/bin/default_java.conf" ]
then
. $ISCOBOL/bin/default_java.conf
fi


HOME=$ISCOBOL/webclient/cluster/cluster-server
 
#export OPTS="-h 0.0.0.0 -j $HOME/jetty.properties -c $HOME/webclient-cluster.config"
export OPTS="-j $HOME/jetty.properties -c $HOME/webclient-server.config"
export JAVA_EXE=
export JAVA_OPTS=-Xmx2g


if [ -f "$ISCOBOL/bin/webclient-cluster.options" ]
then
   . $ISCOBOL/bin/webclient-cluster.options
fi
if [ -n "$WEBCLIENT_CL_HOME" ]; then
    HOME="$WEBCLIENT_CL_HOME"
fi  

export LOG=$HOME/webclient-cluster.out
export PID_PATH_NAME=$HOME/webclient-cluster.pid

if [ -n "$WEBCLIENT_CL_OPTS" ]; then
    OPTS=$WEBCLIENT_CL_OPTS
fi  
if [ -n "$WEBCLIENT_CL_JAVA_EXE" ]; then
    JAVA_EXE=$WEBCLIENT_CL_JAVA_EXE
fi  
if [ -n "$WEBCLIENT_CL_JAVA_OPTS" ]; then
    JAVA_OPTS=$WEBCLIENT_CL_JAVA_OPTS
fi 
if [ -n "$WEBCLIENT_CL_LOG_FILE" ]; then
    LOG=$HOME/$WEBCLIENT_CL_LOG_FILE
fi 
if [ -n "$WEBCLIENT_CL_PID_FILE" ]; then
    PID_PATH_NAME=$HOME/$WEBCLIENT_CL_PID_FILE
fi 

cd $HOME
SCRIPTPATH=$ISCOBOL/bin/webclient-cluster

#
# Determine the version of the JRE to use.
#
# If the variable ISCOBOL_JRE_ROOT has been set, use that, otherwise
# if ISCOBOL_JDK_ROOT is set, use that, otherwise derive the location 
# of the JRE from the version of 'java' that is on the user's path
#

if [ -z "${WEBCLIENT_CL_JAVA_EXE}" ]
then
 if [ -z "${ISCOBOL_JRE_ROOT}" ]
 then
  if [ -z "${ISCOBOL_JDK_ROOT}" ]
  then

    _JAVA_LOCATION=`type java | cut -f3 -d' '` 

    while [ -h "$_JAVA_LOCATION" ]; do
       ls=`ls -ld "$_JAVA_LOCATION"`
       link=`expr "$ls" : '.*-> \(.*\)$'`
       if expr "$link" : '/.*' > /dev/null; then
         _JAVA_LOCATION="$link"
       else
         _JAVA_LOCATION=`dirname "$_JAVA_LOCATION"`/"$link"
       fi
    done  

    if [ -z "$_JAVA_LOCATION" ]
    then
        echo "ERROR: Could not locate JRE. Please ensure that 'java' is"
        echo "on your PATH or set ISCOBOL_JRE_ROOT"
        exit 1
    fi

    _JRE_BINDIR=`dirname $_JAVA_LOCATION`
    ISCOBOL_JRE_ROOT=`dirname $_JRE_BINDIR`
    if [ ! -f "$ISCOBOL_JRE_ROOT/bin/java" ]
    then
        ISCOBOL_JRE_ROOT=`dirname $ISCOBOL_JRE_ROOT`
        if [ ! -f "$ISCOBOL_JRE_ROOT/bin/java" ]
        then
            echo "ERROR: Could not locate java runtime."
            echo "Please ensure that ISCOBOL_JRE_ROOT is set correctly."
            exit 1
        fi
    fi
  else
    # if ISCOBOL_JDK_ROOT is set, then use it
    ISCOBOL_JRE_ROOT=$ISCOBOL_JDK_ROOT/jre
  fi
 fi
 
 if [ -z "${_JRE_BINDIR}" ]
 then
  JAVA_EXE=$ISCOBOL_JRE_ROOT/bin/java
 else
  JAVA_EXE=$_JRE_BINDIR/java
 fi
 else
  JAVA_EXE=$WEBCLIENT_CL_JAVA_EXE
fi # endif $WEBCLIENT_CL_JAVA_EXE

# See how we were called.
case "$1" in
    run)
        if [ ! -f $PID_PATH_NAME ] || [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
            $JAVA_EXE $JAVA_OPTS -jar $HOME/webclient.war -j jetty.properties $OPTS 2>> $LOG >> $LOG &
            echo $! > $PID_PATH_NAME
            wait $(cat $PID_PATH_NAME)
        else
            echo "Webclient Cluster is already running with pid $(cat $PID_PATH_NAME)"
        fi
        ;;
    start)
        # Start daemon.
        if [ ! -f $PID_PATH_NAME ] || [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
            echo "Starting Webclient Cluster... "
            $SCRIPTPATH run  &
            echo "Webclient Cluster started"
        else
            echo "Webclient Cluster is already running with pid $(cat $PID_PATH_NAME)"
        fi
        ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            echo "Webclient Cluster stopping ..."
            kill -9 $(cat $PID_PATH_NAME);
            sleep 1
            if [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
                echo "Webclient Cluster stopped ..."
                rm $PID_PATH_NAME
            else
                echo "Stopping Webclient Cluster failed."
                exit 1
            fi
        else
            echo "Webclient Cluster is not running ..."
        fi
    ;;
    status)
        if [ -f $PID_PATH_NAME ]; then
            if [ `ps axo pid | grep "^ *$(cat $PID_PATH_NAME)$" | wc -l` -eq 0 ]; then
                rm $PID_PATH_NAME
            else
                echo "Webclient Cluster is running with pid $(cat $PID_PATH_NAME)."
            fi
        else
            echo "Webclient Cluster is not running ..."
        fi
    ;;
    restart)
        $SCRIPTPATH stop
        $SCRIPTPATH start
    ;;
    env)
        echo "ISCOBOL:$ISCOBOL"
        echo "HOME:$HOME"
        echo "OPTS:$OPTS"
        echo "JAVA_EXE:$JAVA_EXE"
        echo "JAVA_OPTS:$JAVA_OPTS"
        echo "LOG:$LOG"
        echo "PID:$PID_PATH_NAME"
        echo "SCRIPT:$SCRIPTPATH$0" 
    ;;

    *)
        echo "Usage: $0 {run|start|stop|restart|status|env}"
        exit 1
esac

exit 0
