docker-healthcheck/docker-healthcheck.py
2023-12-13 04:17:07 +01:00

41 lines
1.1 KiB
Python

# /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()