From c2076590677152576b787ce98c7d36bc8306fbed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= Date: Fri, 6 Mar 2026 21:20:08 +0100 Subject: [PATCH] Update docker library --- app.py | 46 +++++++++++++++++++++++++++++----------------- requirements.txt | 2 +- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/app.py b/app.py index 208b28b..67d1b19 100644 --- a/app.py +++ b/app.py @@ -2,12 +2,19 @@ import time from typing import Dict import docker import prometheus_client -from prometheus_client.core import REGISTRY, CounterMetricFamily, InfoMetricFamily, StateSetMetricFamily +from prometheus_client.core import ( + REGISTRY, + CounterMetricFamily, + InfoMetricFamily, + StateSetMetricFamily, +) +from prometheus_client.registry import Collector -class ContainerCollector(object): - docker_client: docker.Client - def __init__(self, docker_client: docker.Client): +class ContainerCollector(Collector): + docker_client: docker.DockerClient + + def __init__(self, docker_client: docker.DockerClient): self.docker_client = docker_client def collect(self): @@ -22,20 +29,25 @@ class ContainerCollector(object): labels=["container", "device"], ) - m_container_status = InfoMetricFamily("docker_container_info", "Container info.", labels=["container"]) - - for container in self.docker_client.containers(all=True): - container_name = container.get("Names", [""])[0].strip("/") - container_id = container.get("Id") - container_status = container.get('State','').lower() - - m_container_status.add_metric([container_name], dict(status=container_status)) - - #print(container_name, container_id) - stats = self.docker_client.stats(container_id, stream=False) + m_container_status = InfoMetricFamily( + "docker_container_info", "Container info.", labels=["container"] + ) + + for container in self.docker_client.containers.list(all=True): + container_name = container.name + container_status = container.status + container_health = container.health + + m_container_status.add_metric( + [container_name], dict(status=container_status, health=container_health) + ) + + # print(container_name, container_id) + # stats = self.docker_client.stats(container_id, stream=False) + stats = container.stats(stream=False) # print(stats) for interface, ifstats in stats.get("networks", {}).items(): - #print(interface, ifstats) + # print(interface, ifstats) for stat, value in ifstats.items(): if stat in nw_counters: @@ -48,7 +60,7 @@ class ContainerCollector(object): yield metric -REGISTRY.register(ContainerCollector(docker.Client())) +REGISTRY.register(ContainerCollector(docker.DockerClient())) prometheus_client.start_http_server(9101) diff --git a/requirements.txt b/requirements.txt index 2a4b295..6b85c15 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -docker-py == 1.10.6 +docker == 7.1.0 prometheus-client == 0.17.1 urllib3 >= 1.26.0, < 2.0.0