60 lines
1.6 KiB
Bash
Executable File
60 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd)
|
|
ENV_FILE="$ROOT/.env.load"
|
|
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
echo "Missing $ENV_FILE; no observability project was selected." >&2
|
|
exit 1
|
|
fi
|
|
|
|
set -a
|
|
# shellcheck source=/dev/null
|
|
. "$ENV_FILE"
|
|
set +a
|
|
|
|
: "${LOAD_PROJECT:?LOAD_PROJECT is missing from .env.load}"
|
|
|
|
if [[ "$LOAD_PROJECT" == "who_need_help" ]]; then
|
|
echo "Refusing to stop services in the staging Compose project." >&2
|
|
exit 1
|
|
fi
|
|
|
|
runtime_dir="$ROOT/tmp/observability/$LOAD_PROJECT"
|
|
export OBSERVABILITY_RUNTIME_DIR="$runtime_dir"
|
|
|
|
compose=(
|
|
docker compose
|
|
--env-file "$ENV_FILE"
|
|
-p "$LOAD_PROJECT"
|
|
-f compose.yaml
|
|
-f compose.load.yaml
|
|
-f compose.observability.yaml
|
|
--profile observability
|
|
)
|
|
|
|
for service in alert-receiver alertmanager prometheus grafana; do
|
|
while IFS= read -r container_id; do
|
|
[[ -z "$container_id" ]] && continue
|
|
observed_project=$(
|
|
docker inspect --format '{{index .Config.Labels "com.docker.compose.project"}}' \
|
|
"$container_id"
|
|
)
|
|
observed_service=$(
|
|
docker inspect --format '{{index .Config.Labels "com.docker.compose.service"}}' \
|
|
"$container_id"
|
|
)
|
|
|
|
if [[ "$observed_project" != "$LOAD_PROJECT" ||
|
|
"$observed_service" != "$service" ]]; then
|
|
echo "Container scope mismatch for $container_id." >&2
|
|
exit 1
|
|
fi
|
|
done < <("${compose[@]}" ps --all -q "$service")
|
|
done
|
|
|
|
"${compose[@]}" stop grafana prometheus alertmanager alert-receiver
|
|
|
|
echo "Stopped only the isolated observability services; app and metric volumes remain."
|