From 276e157dcf072f8b9fa1eb116eaf9ea3dc524810 Mon Sep 17 00:00:00 2001 From: Lu Baumann Date: Wed, 13 Dec 2023 04:17:07 +0100 Subject: [PATCH] added script --- .gitignore | 3 ++- docker-healthcheck.py | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 docker-healthcheck.py diff --git a/.gitignore b/.gitignore index 5d381cc..60ae14d 100644 --- a/.gitignore +++ b/.gitignore @@ -158,5 +158,6 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ +checks.yaml diff --git a/docker-healthcheck.py b/docker-healthcheck.py new file mode 100644 index 0000000..1e9dc35 --- /dev/null +++ b/docker-healthcheck.py @@ -0,0 +1,40 @@ +# /usr/bin/env python3 + +import requests +import yaml +import docker +import docker.errors + + +def read_checks() -> dict: + with open("./checks.yaml") as f: + checks = yaml.safe_load(f) + return checks + + +def main() -> None: + checks = read_checks() + if "self" in checks: + requests.get(checks["self"]) + + client = docker.from_env() + for container_id in checks: + if container_id == "self": + continue + try: + container = client.containers.get(container_id) + container_status = container.attrs["State"]["Status"] + if container_status in ["healthy", "running"]: + requests.post(checks[container_id]) + else: + requests.post( + checks[container_id] + "/fail", + f"Container has status '{container_status}' which is not one of 'healthy' or 'running'" + ) + except docker.errors.NotFound: + if "self" in checks: + requests.post(checks["self"] + "/fail", f"Container '{container_id}' not found.") + + +if __name__ == "__main__": + main()