diff options
Diffstat (limited to '')
| -rwxr-xr-x | bundles/svtree-containers/files/bin/podman-healthcheck | 32 | ||||
| -rwxr-xr-x | bundles/svtree-containers/files/bin/podman-healthcheckd | 34 |
2 files changed, 66 insertions, 0 deletions
diff --git a/bundles/svtree-containers/files/bin/podman-healthcheck b/bundles/svtree-containers/files/bin/podman-healthcheck new file mode 100755 index 0000000..ab3dcc7 --- /dev/null +++ b/bundles/svtree-containers/files/bin/podman-healthcheck @@ -0,0 +1,32 @@ +#!/bin/sh +set -eu +[ -n "${DEBUG:-}" ] && set -x + +healthcheck() { + local container=${1:?} + + podman healthcheck run "$container" >/dev/null 2>&1 || true + + podman inspect --format '{{if .State.Health}}{{.Name}} {{.State.Health.Status}}{{end}}' "$container" | ( + read -r name status + + test -n "$name" || return + + printf '%s (%s) is %s\n' "$container" "$name" "$status" + case "$status" in + healthy) ;; + *) + # tgnotify "!!! service $container unhealthy" + ;; + esac + ) +} + +main() { + case "${1:-}" in + "") podman container ls --format '{{.ID}}' | xargs -n1 $0 ;; + *) healthcheck "$1" ;; + esac +} + +main $@ diff --git a/bundles/svtree-containers/files/bin/podman-healthcheckd b/bundles/svtree-containers/files/bin/podman-healthcheckd new file mode 100755 index 0000000..cdbef0e --- /dev/null +++ b/bundles/svtree-containers/files/bin/podman-healthcheckd @@ -0,0 +1,34 @@ +#!/bin/sh +set -eu +[ -n "${DEBUG:-}" ] && set -x + +healthcheck_with_retry() { + local container="${1:-}" + + podman inspect --format '{{with .Config.Healthcheck}}{{.StartPeriod}} {{.Timeout}} {{.Retries}}{{end}}' "$container" | + ( + read -r start_period timeout retries + test -n "$start_period$timeout$retries" || return + + sleep "$start_period" + + podman-healthcheck "$container" && return + + count=0 + while [ "$count" -lt "$retries" ]; do + sleep "$timeout" + podman-healthcheck "$container" && return + count=$((count + 1)) + done + ) + +} + +main() { + podman events --filter 'type=container' --filter 'event=start' --format '{{.ID}}' | + while read -r container; do + healthcheck_with_retry "$container" || true + done +} + +main $@ |