Merge pull request #10 from beatz174-bit/codex/check-docker-exporter.py-for-excessive-requests

Reduce upstream registry lookups in docker exporter
This commit is contained in:
beatz174-bit
2026-04-07 22:21:46 +10:00
committed by GitHub
+33 -13
View File
@@ -411,6 +411,9 @@ def check_containers():
svc_map = parse_compose_services(compose_files, project_name, project_root)
containers = client.containers.list()
pending_metrics = []
remote_targets = set()
for container in containers:
proj = container.labels.get("com.docker.compose.project")
if not proj:
@@ -423,30 +426,47 @@ def check_containers():
if svc in svc_map:
compose_image = svc_map[svc]["image"]
update_flag = 0
local_digest = get_local_digest(running)
remote_target = compose_image or running
remote_digest = get_remote_digest(remote_target)
# If we cannot determine a local digest, we cannot compare and should
# avoid spending a registry lookup for this container.
if local_digest:
remote_targets.add(remote_target)
pending_metrics.append({
"container_name": container.name,
"service": svc,
"compose_image": compose_image,
"running_image": running,
"project_name": proj,
"remote_target": remote_target,
"local_digest": local_digest,
})
remote_digests = {target: get_remote_digest(target) for target in remote_targets}
for payload in pending_metrics:
local_digest = payload["local_digest"]
remote_target = payload["remote_target"]
remote_digest = remote_digests.get(remote_target)
update_flag = 1 if (local_digest and remote_digest and local_digest != remote_digest) else 0
logger.info(
"Digest comparison: container=%s service=%s running=%s target=%s local=%s remote=%s",
container.name,
svc,
running,
payload["container_name"],
payload["service"],
payload["running_image"],
remote_target,
local_digest,
remote_digest,
)
if local_digest and remote_digest and local_digest != remote_digest:
update_flag = 1
set_container_update_metric(
container_name=container.name,
compose_image=compose_image,
running_image=running,
project_name=proj,
container_name=payload["container_name"],
compose_image=payload["compose_image"],
running_image=payload["running_image"],
project_name=payload["project_name"],
update_flag=update_flag,
)