diff --git a/atlasbot/snapshot/builder.py b/atlasbot/snapshot/builder.py index 4027296..10d02ca 100644 --- a/atlasbot/snapshot/builder.py +++ b/atlasbot/snapshot/builder.py @@ -705,6 +705,32 @@ def _append_namespace_requests(lines: list[str], summary: dict[str, Any]) -> Non lines.append("namespace_mem_requests_top: " + "; ".join(parts)) +def _append_namespace_io_net(lines: list[str], summary: dict[str, Any]) -> None: + metrics = summary.get("metrics") if isinstance(summary.get("metrics"), dict) else {} + net_top = metrics.get("namespace_net_top") if isinstance(metrics.get("namespace_net_top"), list) else [] + io_top = metrics.get("namespace_io_top") if isinstance(metrics.get("namespace_io_top"), list) else [] + if net_top: + parts = [] + for entry in net_top: + metric = entry.get("metric") if isinstance(entry, dict) else {} + namespace = metric.get("namespace") + value = entry.get("value") + if namespace: + parts.append(f"{namespace}={_format_rate_bytes(value)}") + if parts: + lines.append("namespace_net_top: " + "; ".join(parts)) + if io_top: + parts = [] + for entry in io_top: + metric = entry.get("metric") if isinstance(entry, dict) else {} + namespace = metric.get("namespace") + value = entry.get("value") + if namespace: + parts.append(f"{namespace}={_format_rate_bytes(value)}") + if parts: + lines.append("namespace_io_top: " + "; ".join(parts)) + + 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 [] @@ -873,6 +899,7 @@ def summary_text(snapshot: dict[str, Any] | None) -> str: _append_node_usage_stats(lines, summary) _append_namespace_usage(lines, summary) _append_namespace_requests(lines, summary) + _append_namespace_io_net(lines, summary) _append_pod_usage(lines, summary) _append_restarts(lines, summary) _append_job_failures(lines, summary)