#!/bin/sh
# Version 00.00.03
# script fuer CTI  :
# Threads auf Polling ueberwachen, laufende Thrads legen nach /var/run/ die Dateien checkbusX an
# X = Busnummer/Schnittstelle
# Achtung: nur passend in Kombination mit der neuen Hardware lib (ohne 'busbegrenzung')
# Erweiterung: check running dotnet, wenn aktiviert [netcoreapp]/enable_check_netappstarted

POLLCHECKSTATE=1

CHECKPATH=/var/run
CHECKAPPFILE=/home/cti/netcoreapp/enable_check_netappstarted

BLOCKED_BUS=0

checkBusse()
{
#DEBUG   echo "check busspoll"
   FILES="$CHECKPATH/checkbus*"
	for f in $FILES
	do
# Ziffer ermitteln
		NUMBER=$(echo "$f" | tr -dc '0-9')
#		; echo $NUMBER
# debug		echo "checking $f Bus ... # $NUMBER"
		if [ -e $CHECKPATH/checkbus$NUMBER ]; then
#			echo "überwache busclass$NUMBER -debug"
			if [ -e $CHECKPATH/busclass$NUMBER ]; then
# debug 				echo "Bus $NUMBER alive"
				rm $CHECKPATH/busclass$NUMBER
			else
				BLOCKED_BUS=$NUMBER
# debug 				echo "Bus $NUMBER blocked, reboot"
				neustart
			fi

		fi
	done
}
#------------------------
checkDotnet()
{
#DEBUG   echo "check dotnetApp"
# check dotnet pid, wenn check aktiviert ist
	if [  -e ${CHECKAPPFILE} ]; then
      PID_DOTNET=$(pidof -s dotnet)
      if [ -z "$PID_DOTNET"  ]; then
         echo "<dotnet> pid not found, error restart/reboot"
         BLOCKED_BUS="dotnet app [no PID]"
         neustart
      fi
      if ! [ -r $CHECKPATH/netappstarted ]; then
   # datei existiert nicht fw_haengt beim start
         echo "<dotnet> blocked"
         BLOCKED_BUS="dotnet app [blocked]"
         neustart
   # Zombie check?
   #   else
   #   check website
      fi
#    else
#    # debug
#          echo "ignore check, dotnetApp, das muss wieder raus!"
   fi

}
#------------------------
neustart()
{
	now=$(date)
	NAME=$(basename "$0")
	REASON="blockiert: $BLOCKED_BUS"
	echo "$now :reboot System wegen $REASON"  >> /home/cti/systemstart.log
	echo "{\"source\":\"$NAME\",\"date\":\"$now\",\"reason\":\"$REASON\"}" > /home/cti/rebootinfo.json
	ProcessList=$(ps -T)
#das entfernen oder immer ueberschreiben?
   echo -en "\n $now \n==========\n $ProcessList \n==========\n" > /home/cti/processlist.log
	sleep 2
	rm $CHECKPATH/ctiapp_run
 	reboot
	exit 0
}
#------------------------
start()
{
	logger -s "Poll Check Started"
#	echo "debug =1 "
	sleep 180
#debug /test   sleep 10
	while [ $POLLCHECKSTATE -gt 0 ]
	do
		sleep 30
		checkDotnet
		if [ -e $CHECKPATH/ctiapp_run ]; then
# nur wenn Datei "ctiapp_run" vorhanden ist, dann Pruefung
# wenn nicht dann ist das System(libhw) nicht gestartet
         checkBusse
		else
			echo "$(date) ctiapp not running, wait 180 ..."
			sleep 180
#debug /test   sleep 10
		fi
	done
}

stop()
{
	POLLCHECKSTATE=0
}
#====================
# main case ...
#====================
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart)
	restart
	;;
#  mytest)	ReadBusseInfo	;;
  *)
	echo "Usage: $0 {start | stop | restart }"
	exit 1
esac

exit $?
