diff options
Diffstat (limited to 'tca-cdap-container/restart.sh')
-rw-r--r-- | tca-cdap-container/restart.sh | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/tca-cdap-container/restart.sh b/tca-cdap-container/restart.sh new file mode 100644 index 0000000..c9c1d56 --- /dev/null +++ b/tca-cdap-container/restart.sh @@ -0,0 +1,231 @@ +#!/bin/bash +# ================================================================================ +# Copyright (c) 2018 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========================================================= + +set -e + +CDAP_HOST='localhost' +CDAP_PORT='11015' +TCA_NAMESPACE='cdap_tca_hi_lo' +TCA_APPNAME='dcae-tca' + +TCA_ARTIFACT='dcae-analytics-cdap-tca' +TCA_ARTIFACT_VERSION='2.2.0' +TCA_FILE_PATH='/opt/tca' +TCA_JAR="${TCA_FILE_PATH}/${TCA_ARTIFACT}-${TCA_ARTIFACT_VERSION}.jar" +TCA_APP_CONF="${TCA_FILE_PATH}/tca_app_config.json" +TCA_CONF="${TCA_FILE_PATH}/tca_config.json" +TCA_PREF="${TCA_FILE_PATH}/tca_app_preferences.json" +TCA_CONF_TEMP='/tmp/tca_config.json' +TCA_APP_CONF_TEMP='/tmp/tca_app_config.json' +TCA_PREF_TEMP='/tmp/tca_preferences.json' + +TCA_PATH_APP="${CDAP_HOST}:${CDAP_PORT}/v3/namespaces/${TCA_NAMESPACE}/apps/${TCA_APPNAME}" +TCA_PATH_ARTIFACT="${CDAP_HOST}:${CDAP_PORT}/v3/namespaces/${TCA_NAMESPACE}/artifacts" + +if [ -z "$CONSUL_HOST" ]; then CONSUL_HOST='consul'; fi +if [ -z "$CONSUL_PORT" ]; then CONSUL_PORT='8500'; fi +if [ -z "$CONFIG_BINDING_SERVICE" ]; then CONFIG_BINDING_SERVICE='config_binding_service'; fi + + +function tca_stop { + # stop programs + echo + echo "Stopping TCADMaaPMRPublisherWorker, TCADMaaPMRSubscriberWorker, and TCAVESCollectorFlow ..." + echo + curl -s -X POST "http://${TCA_PATH_APP}/workers/TCADMaaPMRPublisherWorker/stop" + curl -s -X POST "http://${TCA_PATH_APP}/workers/TCADMaaPMRSubscriberWorker/stop" + curl -s -X POST "http://${TCA_PATH_APP}/flows/TCAVESCollectorFlow/stop" + echo "done" + echo +} + +function tca_load_artifact { + echo + echo "Loading artifact ..." + curl -s -X POST --data-binary @"${TCA_JAR}" "http://${TCA_PATH_ARTIFACT}/${TCA_ARTIFACT}" + echo +} + +function tca_load_conf { + echo + echo "Loading configuration ..." + curl -s -X PUT -d @${TCA_APP_CONF} http://${TCA_PATH_APP} + echo + + # load preferences + echo + echo "Loading preferences ..." + curl -s -X PUT -d @${TCA_PREF} http://${TCA_PATH_APP}/preferences + echo +} + + +function tca_delete { + echo + echo "Deleting application dcae-tca ..." + curl -s -X DELETE http://${TCA_PATH_APP} + echo + + # delete artifact + echo + echo "Deleting artifact dcae-analytics-cdap-tca version ${TCA_ARTIFACT_VERSION} ..." + curl -s -X DELETE "http://${TCA_PATH_ARTIFACT}/${TCA_ARTIFACT}/versions/${TCA_ARTIFACT_VERSION}" + echo +} + +function tca_start { + echo + echo "Starting TCADMaaPMRPublisherWorker, TCADMaaPMRSubscriberWorker, and TCAVESCollectorFlow ..." + curl -s -X POST "http://${TCA_PATH_APP}/workers/TCADMaaPMRPublisherWorker/start" + curl -s -X POST "http://${TCA_PATH_APP}/workers/TCADMaaPMRSubscriberWorker/start" + curl -s -X POST "http://${TCA_PATH_APP}/flows/TCAVESCollectorFlow/start" + echo +} + + +function tca_status { + echo + echo "TCADMaaPMRPublisherWorker status: " + curl -s "http://${TCA_PATH_APP}/workers/TCADMaaPMRPublisherWorker/status" + echo + echo "TCADMaaPMRSubscriberWorker status: " + curl -s "http://${TCA_PATH_APP}/workers/TCADMaaPMRSubscriberWorker/status" + echo + echo "TCAVESCollectorFlow status" + curl -s "http://${TCA_PATH_APP}/flows/TCAVESCollectorFlow/status" + echo; echo +} + + +function tca_poll_policy { + #CBS_HOST=$(curl -s "${CONSUL_HOST}:${CONSUL_PORT}/v1/catalog/service/${CBS_SERVICE_NAME}" |jq .[0].ServiceAddress |sed -e 's/\"//g') + #CBS_PORT=$(curl -s "${CONSUL_HOST}:${CONSUL_PORT}/v1/catalog/service/${CBS_SERVICE_NAME}" |jq .[0].ServicePort |sed -e 's/\"//g') + + CBS_HOST='bd-service-dcaegen2-platform-cbs.default' + CBS_PORT='10000' + if [ -z "${CBS_HOST}" ] || [ -z "${CBS_PORT}" ]; then + echo 'CBS HOST or PORT not defined' + return + fi + + + MY_NAME=${SERVICE_NAME:-tca} + #MY_NAME=$(hostname |rev |cut -f 3- -d '-' |rev) + + URL1="${CBS_HOST}:${CBS_PORT}/service_component/${MY_NAME}" + URL2="$URL1:preferences" + + echo "Retrieving configuration file at ${URL1}" + curl -s "$URL1" | jq . --sort-keys > "${TCA_CONF_TEMP}" + echo "Retrieving preferences file at ${URL1}" + curl -s "$URL2" | jq . --sort-keys > "${TCA_PREF_TEMP}" + + if [ ! -e "${TCA_CONF_TEMP}" ] || [ "$(ls -sh ${TCA_CONF_TEMP} |cut -f1 -d' ' |sed -e 's/[^0-9]//g')" -lt "1" ]; then + echo "Fail to receive configuration" + return + fi + if [ ! -e "${TCA_PREF_TEMP}" ] || [ "$(ls -sh ${TCA_PREF_TEMP} |cut -f1 -d' ' |sed -e 's/[^0-9]//g')" -lt "1" ]; then + echo "Fail to receive preferences" + return + fi + + CONF_CHANGED="" + # extract only the config section from APP CONF (which has both artifact and config sections) + jq .config --sort-keys ${TCA_APP_CONF} > ${TCA_CONF} + if ! diff ${TCA_CONF} ${TCA_CONF_TEMP} ; then + echo "TCA config changed" + # generating the new app conf using current app conf's artifact section and the new downloaded config + jq --argfile CONFVALUE ${TCA_CONF_TEMP} '.config = $CONFVALUE' <${TCA_APP_CONF} > ${TCA_APP_CONF_TEMP} + + mv ${TCA_APP_CONF_TEMP} ${TCA_APP_CONF} + CONF_CHANGED=1 + fi + + PERF_CHANGED="" + # update the subscriber ConsumerID, if not already unique, + # so replicas appear as different consumers in the consumer group + HOSTID=$(head -1 /etc/hostname | rev |cut -f1-2 -d'-' |rev) + CONSUMERID=$(jq .subscriberConsumerId ${TCA_PREF_TEMP} |sed -e 's/\"//g') + if ! (echo "$CONSUMERID" |grep "$HOSTID"); then + CONSUMERID="${CONSUMERID}-${HOSTID}" + jq --arg CID ${CONSUMERID} '.subscriberConsumerId = $CID' < "${TCA_PREF_TEMP}" > "${TCA_PREF_TEMP}2" + mv "${TCA_PREF_TEMP}2" "${TCA_PREF_TEMP}" + fi + if ! diff ${TCA_PREF} ${TCA_PREF_TEMP} ; then + echo "TCA preference updated" + mv ${TCA_PREF_TEMP} ${TCA_PREF} + PERF_CHANGED=1 + fi + + if [[ "$PERF_CHANGED" == "1" || "$CONF_CHANGED" == "1" ]]; then + tca_stop + tca_delete + tca_load_artifact + tca_load_conf + tca_start + tca_status + fi +} + + +export PATH=${PATH}:/opt/cdap/sdk/bin + +# starting CDAP SDK in background +cdap sdk start + + + +echo "Waiting CDAP ready on port 11015 ..." +while ! nc -z ${CDAP_HOST} ${CDAP_PORT}; do + sleep 0.1 # wait for 1/10 of the second before check again +done +echo "CDAP has started" + + +echo "Creating namespace cdap_tca_hi_lo ..." +curl -s -X PUT "http://${CDAP_HOST}:${CDAP_PORT}/v3/namespaces/cdap_tca_hi_lo" + + +# stop programs +tca_stop + + +# delete application +tca_delete + + +# load artifact +tca_load_artifact +tca_load_conf + + +# start programs +tca_start + + +# get status of programs +tca_status + + + +while echo -n +do + echo "======================================================" + date + tca_poll_policy + sleep 30 +done |