#!/usr/bin/sh
#
# /etc/init.d/baltrad-node -- startup script for the baltrad node
#
### BEGIN INIT INFO
# Provides:          baltrad-node
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Baltrad node.
# Description:       Start the Tomcat servlet engine used by baltrad node.
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin
CATALINA_HOME=/usr/share/baltrad/baltrad-node-tomcat
CATALINA_BASE=/var/lib/baltrad/baltrad-node-tomcat
NODE_PIDDIR="/var/run/baltrad"
CATALINA_PID="$NODE_PIDDIR/baltrad-node-tomcat.pid"
CATALINA_SH="$CATALINA_HOME/bin/catalina.sh"
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+DisableExplicitGC -Dlog4j2.configurationFile=file:///etc/baltrad/dex.log4j2.properties"

BALTRAD_USER=baltrad
BALTRAD_GROUP=baltrad

if [ `id -u` -ne 0 ]; then
  echo "You need root privileges to run this script"
  exit 1
fi

# Make sure tomcat is started with system locale
if [ -r /etc/default/locale ]; then
	. /etc/default/locale
	export LANG
fi

if [ ! -d "$NODE_PIDDIR" ]; then
  echo "Creating dirname $NODE_PIDDIR"
  mkdir "$NODE_PIDDIR"
fi
if [ -d "$NODE_PIDDIR" ]; then
  chown $BALTRAD_USER:$BALTRAD_GROUP "$NODE_PIDDIR"
  if [ $? -ne 0 ]; then
    echo "Failed to create pid file directory, defaulting to /tmp/baltrad-node-tomcat.pid"
    CATALINA_PID=/tmp/baltrad-node-tomcat.pid
  fi
fi

find_java_home()
{
  for jv in 21; do
    tmpdir=/usr/lib/jvm/jre-${jv}-openjdk
    if [ -d "${tmpdir}" ]; then
      if [ -x "${tmpdir}/jre/bin/java" ]; then
        JAVA_HOME="${tmpdir}/jre"
        return
      elif [ -x "${tmpdir}/bin/java" ]; then
        JAVA_HOME="${tmpdir}"
        return
      fi
    fi
  done
}
JAVA_HOME=
find_java_home
if [ -z "$JAVA_HOME" ]; then
  echo "No JAVA_HOME found"
fi
export JAVA_HOME

catalina_sh() {
  COMMAND="set -a; JAVA_HOME=\"$JAVA_HOME\"; \
	CATALINA_HOME=\"$CATALINA_HOME\"; \
	CATALINA_BASE=\"$CATALINA_BASE\"; \
	JAVA_OPTS=\"$JAVA_OPTS\"; \
	CATALINA_PID=\"$CATALINA_PID\"; \
	CATALINA_TMPDIR=\"$CATALINA_TMPDIR\"; \
	LANG=\"$LANG\"; \
	\"$CATALINA_SH\" $@"
  
  #echo "$COMMAND"
  #touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
  su $BALTRAD_USER -s /bin/bash -c "$COMMAND"
  status="$?"
  return $status
}

case "$1" in
  start)
    echo "Starting Baltrad node..."
    catalina_sh start
    if [ $? -ne 0 ]; then
      echo "failed."
    else
      echo "done."
    fi
 	;;
  stop)
    echo "Stopping Baltrad node..."
    if [ -f "$CATALINA_PID" ]; then
      SERVER_PID=`cat $CATALINA_PID`
      EXISTS=`ps --pid $SERVER_PID -o comm=`
      if [ "$EXISTS" = "java" ]; then
        catalina_sh stop
      fi
      rm -f "$CATALINA_PID"
    fi
	;;
  status)
    if [ -f "$CATALINA_PID" ]; then
      SERVER_PID=`cat $CATALINA_PID`
      EXISTS=`ps --pid $SERVER_PID -o comm=`
      if [ "$EXISTS" = "java" ]; then
        echo "Running"
      else
        echo "Stopped"
      fi
    else
      echo "Stopped"
    fi
    ;;
  restart)
    $0 stop
    sleep 1
    $0 start
	;;
  *)
    echo "Usage: $0 {start|stop|status|restart}"
	exit 1
	;;
esac

exit 0
