From 3ffcfddb927c6831b5ec10367e107b1ae8b308bd Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Thu, 29 Jan 2026 10:16:07 -0300 Subject: [PATCH] snapshot: include top pods with node --- atlasbot/snapshot/builder.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/atlasbot/snapshot/builder.py b/atlasbot/snapshot/builder.py index a1aea51..989c359 100644 --- a/atlasbot/snapshot/builder.py +++ b/atlasbot/snapshot/builder.py @@ -945,7 +945,17 @@ def _append_namespace_io_net(lines: list[str], summary: dict[str, Any]) -> None: def _append_pod_usage(lines: list[str], summary: dict[str, Any]) -> None: metrics = summary.get("metrics") if isinstance(summary.get("metrics"), dict) else {} cpu_top = metrics.get("pod_cpu_top") if isinstance(metrics.get("pod_cpu_top"), list) else [] + cpu_top_node = ( + metrics.get("pod_cpu_top_node") + if isinstance(metrics.get("pod_cpu_top_node"), list) + else [] + ) mem_top = metrics.get("pod_mem_top") if isinstance(metrics.get("pod_mem_top"), list) else [] + mem_top_node = ( + metrics.get("pod_mem_top_node") + if isinstance(metrics.get("pod_mem_top_node"), list) + else [] + ) if cpu_top: parts = [] for entry in cpu_top: @@ -957,6 +967,18 @@ def _append_pod_usage(lines: list[str], summary: dict[str, Any]) -> None: parts.append(f"{namespace}/{pod}={_format_float(value)}") if parts: lines.append("pod_cpu_top: " + "; ".join(parts)) + if cpu_top_node: + parts = [] + for entry in cpu_top_node: + metric = entry.get("metric") if isinstance(entry, dict) else {} + namespace = metric.get("namespace") + pod = metric.get("pod") + node = metric.get("node") + value = entry.get("value") + if namespace and pod and node and value is not None: + parts.append(f"{node}:{namespace}/{pod}={_format_float(value)}") + if parts: + lines.append("pod_cpu_top_node: " + "; ".join(parts)) if mem_top: parts = [] for entry in mem_top: @@ -968,6 +990,18 @@ def _append_pod_usage(lines: list[str], summary: dict[str, Any]) -> None: parts.append(f"{namespace}/{pod}={_format_bytes(value)}") if parts: lines.append("pod_mem_top: " + "; ".join(parts)) + if mem_top_node: + parts = [] + for entry in mem_top_node: + metric = entry.get("metric") if isinstance(entry, dict) else {} + namespace = metric.get("namespace") + pod = metric.get("pod") + node = metric.get("node") + value = entry.get("value") + if namespace and pod and node and value is not None: + parts.append(f"{node}:{namespace}/{pod}={_format_bytes(value)}") + if parts: + lines.append("pod_mem_top_node: " + "; ".join(parts)) def _append_restarts(lines: list[str], summary: dict[str, Any]) -> None: