#!/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 [ ! -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  -Dhttps.protocols=TLSv1.2 -Dhttps.cipherSuites=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
	nohup java $FLAGS $MAIN </dev/null >/dev/null 2>&1 &
	sleep 5
	PIDS=`pids`
	if [ "$PIDS" = "" ]
	then
		echo $COMPONENT startup failed
		ls -l $APP_ROOT/logs/EELF
		echo "------------ error.log ---------------"
		cat $APP_ROOT/logs/EELF/error.log
		echo "------------ server.log ---------------"
		cat $APP_ROOT/logs/EELF/server.log
		echo "------------ tail -100 application.log ---------------"
		tail -100 $APP_ROOT/logs/EELF/application.log
	else
		echo $COMPONENT started
	fi
	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
exit 0
