blob: 389f7d2ee0d2d3c28ca8b74bd3264443a7fe433d [file] [log] [blame]
#!/bin/bash
###
# ============LICENSE_START=======================================================
# ONAP POLICY
# ================================================================================
# Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============LICENSE_END=========================================================
##
SNAME="Policy Management"
PNAME=policy-management
CLASS=org.onap.policy.drools.system.Main
function start() {
um_start
if [[ ${RETVAL} != 0 ]]; then
update_monitor off
else
update_monitor on
fi
}
# unmonitored start, does not change monitor status (immutable)
function um_start() {
status
if [ "$_RUNNING" = "1" ]; then
echo $_STATUS
RETVAL=0
return
fi
mkdir -p $_LOGS
if [ -e $_LOGS/$PNAME.out.1 ]; then mv $_LOGS/$PNAME.out.1 $_LOGS/$PNAME.out.2; fi
if [ -e $_LOGS/$PNAME.err.1 ]; then mv $_LOGS/$PNAME.err.1 $_LOGS/$PNAME.err.2; fi
if [ -e $_LOGS/$PNAME.out ]; then mv $_LOGS/$PNAME.out $_LOGS/$PNAME.out.1; fi
if [ -e $_LOGS/$PNAME.err ]; then mv $_LOGS/$PNAME.err $_LOGS/$PNAME.err.1; fi
CP=$(ls $_DIR/lib/*.jar | xargs -I X printf ":%s" X)
# pick up any new changes in the environment every time we start
source ${POLICY_HOME}/etc/profile.d/env.sh
${POLICY_HOME}/bin/configure-maven
JVM_OPTS=(${JVM_OPTIONS})
# If 'system.properties' exists, convert it into "-D" JVM arguments.
# Note that the following also handles property values with spaces.
IFS=$'\n'
systemProperties=($(
if [[ -f $_DIR/config/system.properties ]] ; then
sed -n -e 's/^[ \t]*\([^ \t#]*\)[ \t]*=[ \t]*\(.*\)$/-D\1=\2/p' \
$_DIR/config/system.properties
fi
))
cd $_DIR
(
if [[ "${cfg}" != "" ]] ; then
# need to make sure that we don't pass the lock file descriptor
# to subprocesses
exec {cfg}>&-
fi
nohup $JAVA_HOME/bin/java "${JVM_OPTS[@]}" -cp $_DIR/config:$_DIR/lib:$CP "${systemProperties[@]}" "$@" $CLASS > >( while read line; do echo "$(date): ${line}"; done > $_LOGS/$PNAME.out) 2> >( while read line; do echo "$(date): ${line}"; done > $_LOGS/$PNAME.err) &
_PID=$!
echo $_PID > $_PIDFILE
)
sleep 5
status
echo $_STATUS
if [ "$_RUNNING" = "1" ]; then
RETVAL=0
else
echo "Failed to start"
remove_pid_file
RETVAL=1
fi
}
function stop() {
um_stop
update_monitor off
}
# unmonitored stop, does not change monitor status (immutable)
function um_stop() {
status
if [ "$_RUNNING" = "0" ]; then
echo $_STATUS
remove_pid_file
else
if [[ -n ${TELEMETRY_PASSWORD} ]]; then
http_proxy= timeout 10 curl -k --silent --user ${TELEMETRY_USER}:${TELEMETRY_PASSWORD} -X DELETE https://localhost:${TELEMETRY_PORT}/policy/pdp/engine -o /dev/null
else
http_proxy= timeout 10 curl -k --silent -X DELETE https://localhost:${TELEMETRY_PORT}/policy/pdp/engine -o /dev/null
fi
sleep 5
echo "Stopping $SNAME..."
_PID_TO_KILL=$_PID;
echo "$SNAME (pid=${_PID_TO_KILL}) is stopping..."
kill -TERM $_PID_TO_KILL 2> /dev/null
sleep 5
check_status_of_pid $_PID_TO_KILL
if [ "$_RUNNING" = "1" ]; then
kill -TERM $_PID_TO_KILL
fi
while [ "$_RUNNING" = "1" ]; do
sleep 2
check_status_of_pid $_PID_TO_KILL
done
remove_pid_file
echo "$SNAME has stopped."
fi
RETVAL=0
}
function status() {
if [ -f "${_PIDFILE}" ]; then
_PID=`cat "${_PIDFILE}"`
check_status_of_pid $_PID
else
_STATUS="$SNAME (no pidfile) is NOT running"
_RUNNING=0
fi
if [[ $_RUNNING = 1 ]]; then
RETVAL=0
else
RETVAL=1
fi
}
function check_status_of_pid ()
{
if [ -n "$1" ] && kill -0 $1 2>/dev/null ; then
_STATUS="$SNAME (pid $1) is running"
_RUNNING=1
else
_STATUS="$SNAME (pid $1) is NOT running"
_RUNNING=0
fi
}
function remove_pid_file ()
{
if [ -f "${_PIDFILE}" ]; then
rm "${_PIDFILE}"
fi
}
function update_monitor() {
STATUS=$1
if [[ -f ${POLICY_HOME}/etc/monitor/monitor.cfg ]]; then
/bin/sed -i.bak \
-e "s/^${CONTROLLER}=.*/${CONTROLLER}=${STATUS}/g" \
${POLICY_HOME}/etc/monitor/monitor.cfg
fi
}
# main
_DIR=${POLICY_HOME}
_LOGS=${POLICY_LOGS}
if [[ -z ${POLICY_LOGS} ]]; then
_LOGS="${POLICY_HOME}"/logs
fi
CONTROLLER=policy-management-controller
RETVAL=0
_PIDFILE=${POLICY_HOME}/PID
case "$1" in
status)
status
echo "$_STATUS"
;;
start)
if flock ${cfg} ; then
start
fi {cfg}>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock
;;
umstart)
um_start
;;
stop)
if flock ${cfg} ; then
stop
fi {cfg}>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock
;;
umstop)
um_stop
;;
restart)
if flock ${cfg} ; then
stop
sleep 2
start
fi {cfg}>>${POLICY_HOME}/etc/monitor/monitor.cfg.lock
;;
*)
echo "error: invalid option $@"
echo "Usage: $0 status|start|stop|restart"
RETVAL=1
;;
esac
exit ${RETVAL}