# This script shuts down (ONLY!) the Controller, by stopping and killing the related containers. # It is used during testing. # It does not shuts down the whole service! The workers will keep running and their work will be lost. # For error-handling, we cannot use the "set -e" since: it has problems https://mywiki.wooledge.org/BashFAQ/105 # So we have our own function, for use when a single command fails. handle_error () { echo -e "\n\n$1\n\n"; exit $2 } # Change the working directory to the script's directory, when running from another location. cd "${0%/*}" || handle_error "Could not change-dir to this script's dir!" 1 forceControllerShutdown=0 if [[ $# -eq 1 ]]; then forceControllerShutdown=$1 elif [[ $# -gt 1 ]]; then echo -e "Wrong number of arguments given: ${#}\nPlease execute it like: shutdownService.sh <forceControllerShutdown: 0 | 1>"; exit 2 fi # We may have no arguments, if we do not want to force the Controller to shutdown. # Shutdown Prometheus, if it's running. sudo docker compose -f ./prometheus/docker-compose-prometheus.yml down if [[ forceControllerShutdown -eq 1 ]]; then echo "Shutting down the Controller.." sudo docker compose -f docker-compose.yml down else echo "Shutting down the Service.." sudo apt install -y curl curl -X POST -i 'http://localhost:1880/api/shutdownService' # Follow the logs until shutdown. sudo docker logs -f urls_controller || handle_error "Could not get the logs of docker-container \"urls_controller\"!" 3 # Using "regex anchors" to avoid false-positives. Works even if the container is not running, thus showing the error-log. fi # In case we need to hard-remove the containers, use the following commands: #sudo docker stop $(sudo docker ps -aqf "name=^(?:urlscontroller-urls_controller|prometheus-(?:prometheus|grafana))-1$") || true # There may be no active containers #sudo docker rm $(sudo docker ps -aqf "name=^(?:urlscontroller-urls_controller|prometheus-(?:prometheus|grafana))-1$") || true # All containers may be already removed.