#! /bin/sh
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin:/opt/RAYLASE/SPICE3/bin"

PROGRAM_NAME="spice3_app"
PROGRAM=/opt/RAYLASE/SPICE3/lib/RAYLASE.SPICE3.RTB
UPDATEPROGRESS_FILE="/opt/RAYLASE/SPICE3/lib/Content/update.txt"
EEPROMCACHE="/tmp/eeprom"

BOOTLOG=/home/spice3/log/boot.log
VARSYSLOG=/var/log/syslog

test -x $PROGRAM || (echo "$PROGRAM is not an executable file." && exit 0)

_FLAGS=""
flag_init(){
	local flags="$PROGRAM_NAME $PROGRAM "
	
	if ([[ -f "$EEPROMCACHE/IP_LIMIT.txt" ]]); then
		local limit=$(cat "$EEPROMCACHE/IP_LIMIT.txt")
	else
		echo "Could not find '$EEPROMCACHE/IP_LIMIT.txt' to retrieve connection limit: Will default to 1"
		local limit="1"
	fi
	flags+=" --connectionLimit=$limit "
	_FLAGS="$flags"
}
settings_init(){
	for val in "65535" "4194303"; do echo ${val} > /sys/class/engine/engine/leds_mux ; done
	powerLed 2
	echo 98 > $UPDATEPROGRESS_FILE
}

append_syslog_to_bootlog() {
	echo "append_syslog_to_bootlog sleeping for 60s..."
	sleep 60
	APPENDLOGTIMESTAMP="$(date -u '+%4Y-%2m-%2d.%2H%2M%2S')"
	echo -e "++++++++ Start of ${VARSYSLOG} (appended at ${APPENDLOGTIMESTAMP}) ++++++++"  >> "${BOOTLOG}"
	/usr/bin/tail -n 100 "$VARSYSLOG" >>  "${BOOTLOG}"
	echo -e "++++++++ End of ${VARSYSLOG} (appended at ${APPENDLOGTIMESTAMP}) ++++++++\n"  >> "${BOOTLOG}"
	echo "append_syslog_to_bootlog done."
}

start()
{
	# Define some capabilities to set time when running as non-root user.
	# https://www.redhat.com/en/blog/linux-capabilities-in-openshift
	# https://lwn.net/Articles/636533
	# Debug using: capsh --print
	# "cap_setgid", "cap_setuid" and "cap_setpcap" is only set internally for "capsh". They are not set as ambient capabilities.
	capsh --caps="cap_setgid,cap_setuid,cap_setpcap+ep cap_sys_time+epi" --user=spice3 --addamb="cap_sys_time" -- -c "start-stop-daemon -S -n $PROGRAM_NAME -x dotnetDaemon -- ${_FLAGS}"
}


case "$1" in
  start)
	echo "Starting $PROGRAM_NAME daemon: $PROGRAM_NAME"
	settings_init &
	pids="$pids $!"

	flag_init

	wait $pids
	start

	append_syslog_to_bootlog &
	echo "append_syslog_to_bootlog pid = $!"

	echo "done."
	;;
  stop)
	echo "Stopping $PROGRAM_NAME daemon: $PROGRAM_NAME"
	start-stop-daemon -K -n $PROGRAM_NAME $PROGRAM_NAME -x dotnetDaemon
	echo "."
	;;

  restart)
	echo -n "Restarting $PROGRAM_NAME daemon: $PROGRAM_NAME"
	start-stop-daemon -K -v -n $PROGRAM_NAME --oknodo -x dotnetDaemon

	settings_init &
	pids="$pids $!"

	flag_init

	wait $pids

	sleep 2
	start
	echo "."
	;;

  *)
	echo "Usage: /etc/init.d/$PROGRAM_NAME {start|stop|restart}"
	exit 1
esac

exit 0
