46 lines
1.3 KiB
Bash
Executable File
46 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Euo pipefail
|
|
|
|
CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/hermes-stack-maintenance/config.env"
|
|
STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/hermes-stack-maintenance"
|
|
NOTIFIER="$HOME/.local/libexec/hermes-stack-notify"
|
|
mkdir -p "$STATE_DIR"
|
|
# shellcheck disable=SC1090
|
|
source "$CONFIG_FILE"
|
|
|
|
set +u
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$HERMES_ENV" || true
|
|
set +a
|
|
set -u
|
|
|
|
state_file="$STATE_DIR/signal-health-state"
|
|
signal_url="${SIGNAL_HTTP_URL:-}"
|
|
[[ -n "$signal_url" ]] || exit 0
|
|
|
|
check_signal() {
|
|
local status
|
|
status="$(curl --silent --output /dev/null --max-time 5 \
|
|
--write-out '%{http_code}' "${signal_url%/}/api/v1/check" || true)"
|
|
[[ "$status" =~ ^2[0-9][0-9]$ ]]
|
|
}
|
|
|
|
if check_signal; then
|
|
current=healthy
|
|
else
|
|
systemctl --user restart "$SIGNAL_SERVICE" || true
|
|
sleep 5
|
|
check_signal && current=healthy || current=unhealthy
|
|
fi
|
|
|
|
previous="$(cat "$state_file" 2>/dev/null || true)"
|
|
if [[ "$current" == unhealthy && "$previous" != unhealthy ]]; then
|
|
"$NOTIFIER" "Hermes-Stack: signal-cli ist nicht erreichbar; Neustart wurde versucht." || true
|
|
elif [[ "$current" == healthy && "$previous" == unhealthy ]]; then
|
|
"$NOTIFIER" "Hermes-Stack: signal-cli ist wieder erreichbar." || true
|
|
fi
|
|
|
|
printf '%s\n' "$current" >"$state_file"
|
|
[[ "$current" == healthy ]]
|