#!/bin/bash

umask 0022
TZ=GMT0
COMPONENT=dmaapbc
APP_ROOT=/opt/app/$COMPONENT
USER=root
export TZ
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/java/jdk/jdk180/bin
export PATH
CLASSPATH=`echo $APP_ROOT/etc $APP_ROOT/lib/*.jar | tr ' ' ':'` 
export CLASSPATH
CONTAINER_CONFIG=/opt/app/config/conf
MAIN=org.onap.dmaap.dbcapi.server.Main 



pids() {
	set -x
	ps -ef | grep java | grep $MAIN | sed -e 's/[^ ]* *//' -e 's/ .*//'
	set +x
}

config() {
	set -x
	if [ ! -d $APP_ROOT ]
	then
		echo "Expected app root directory $APP_ROOT does not exist"
		exit 1
	fi
	if [ !  -f $CONTAINER_CONFIG ]
	then
		echo "Expected env file $CONTAINER_CONFIG not found"
		exit 1
	fi
	cd $APP_ROOT
	source $CONTAINER_CONFIG

	if [ "$DMAAPBC_WAIT_TO_EXIT" != "Y" ]
	then
		echo "Creating $APP_ROOT/ok_to_exit so no waiting..."
		> $APP_ROOT/ok_to_exit
	else
		echo "Not creating $APP_ROOT/ok_to_exit"
	fi	
	# comment out till certs are available
	#if [ ! -f $APP_ROOT/misc/cert-client-init.sh ]
	#then
	#	echo "Did not find $APP_ROOT/misc/cert-client-init.sh to append to truststore"
	#	exit 1
	#fi
	#$APP_ROOT/misc/cert-client-init.sh
	. misc/dmaapbc.properties.tmpl > etc/dmaapbc.properties
    . misc/PolicyEngineApi.properties.tmpl > config/PolicyEngineApi.properties
	set +x
}

start() {
	set -x
	ID=`id -n -u`
	GRP=`id -n -g`
	if [ "$ID" != "$USER" ]
	then
		echo $COMPONENT must be started as user $USER not $ID
		exit 1
	fi
	if [ "$GRP" != "$USER" ]
	then
		echo $COMPONENT must be started as group $USER not $GRP
		exit 1
	fi
	cd $APP_ROOT

# disable until we use certs
#	if etc/havecert
#	then
		echo >/dev/null
#	else
#		echo No certificate file available.  Cannot start
#		exit 0
#	fi
	PIDS=`pids`
	if [ "$PIDS" != "" ]
	then
		echo $COMPONENT already running
		exit 0
	fi
	rm -f $APP_ROOT/etc/SHUTDOWN

	# JVM flags
#old line from Dockerfile...keep for reference only
	FLAGS="-cp etc:lib/* -Dlog4j.configuration=etc/log4j.properties -Ddmaapbc.properties=etc/dmaapbc.properties  -Dlogback.configurationFile=etc/logback.xml -Dhttps.protocols=TLSv1.2 -Dhttps.cipherSuites=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
	#nohup java $FLAGS $MAIN </dev/null >/dev/null 2>&1 &
	nohup java $FLAGS $MAIN </dev/null  &
	sleep 5
	PIDS=`pids`
	set +x
}

stop() {
	ID=`id -n -u`
	GRP=`id -n -g`
	if [ "$ID" != "$USER" ]
	then
		echo $COMPONENT must be stopped as user $USER not $ID
		exit 1
	fi
	if [ "$GRP" != "$USER" ]
	then
		echo $COMPONENT must be stopped as group $USER not $GRP
		exit 1
	fi
	touch $APP_ROOT/etc/SHUTDOWN
	PIDS=`pids`
	if [ "$PIDS" != "" ]
	then
		sleep 5
		kill -9 $PIDS
		sleep 5
		echo $COMPONENT stopped
	else
		echo $COMPONENT not running
	fi
}

status() {
	PIDS=`pids`
	if [ "$PIDS" != "" ]
	then
		echo $COMPONENT running
	else
		echo $COMPONENT not running
	fi
}

set -x
case "$1" in
'deploy')
	config
	start
	wait
	;;
'start')
	start
	;;
'stop')
	stop
	;;
'restart')
	stop
	sleep 20
	start
	;;
'status')
	status
	;;
*)
	echo "Usage: $0 { start | stop | restart }"
	exit 1
	;;
esac
		ls -l $APP_ROOT/logs/EELF
		echo "------------ tail -100 error.log ---------------"
		tail -100  $APP_ROOT/logs/EELF/error.log
		echo "------------ tail -100 server.log ---------------"
		tail -100  $APP_ROOT/logs/EELF/server.log
		echo "------------ tail -100 application.log ---------------"
		tail -100 $APP_ROOT/logs/EELF/application.log

		echo "Check $APP_ROOT/ok_to_exit"
		while [ ! -f $APP_ROOT/ok_to_exit ]
		do
			echo "$APP_ROOT/ok_to_exit does not exist.  Sticking around for debugging..."
			sleep 10
		done
exit 0
