atlasbot: surface node age summary
This commit is contained in:
parent
46855343ce
commit
91468a48b4
@ -74,6 +74,7 @@ def build_summary(snapshot: dict[str, Any] | None) -> dict[str, Any]:
|
|||||||
summary.update(_build_nodes(snapshot))
|
summary.update(_build_nodes(snapshot))
|
||||||
summary.update(_build_pressure(snapshot))
|
summary.update(_build_pressure(snapshot))
|
||||||
summary.update(_build_hardware(nodes_detail))
|
summary.update(_build_hardware(nodes_detail))
|
||||||
|
summary.update(_build_node_ages(nodes_detail))
|
||||||
summary.update(_build_capacity(metrics))
|
summary.update(_build_capacity(metrics))
|
||||||
summary.update(_build_pods(metrics))
|
summary.update(_build_pods(metrics))
|
||||||
summary.update(_build_namespace_pods(snapshot))
|
summary.update(_build_namespace_pods(snapshot))
|
||||||
@ -135,6 +136,19 @@ def _build_hardware(nodes_detail: list[dict[str, Any]]) -> dict[str, Any]:
|
|||||||
return {"hardware": {key: sorted(value) for key, value in hardware.items()}}
|
return {"hardware": {key: sorted(value) for key, value in hardware.items()}}
|
||||||
|
|
||||||
|
|
||||||
|
def _build_node_ages(nodes_detail: list[dict[str, Any]]) -> dict[str, Any]:
|
||||||
|
ages: list[dict[str, Any]] = []
|
||||||
|
for node in nodes_detail or []:
|
||||||
|
if not isinstance(node, dict):
|
||||||
|
continue
|
||||||
|
name = node.get("name")
|
||||||
|
age = node.get("age_hours")
|
||||||
|
if name and isinstance(age, (int, float)):
|
||||||
|
ages.append({"name": name, "age_hours": age})
|
||||||
|
ages.sort(key=lambda item: -(item.get("age_hours") or 0))
|
||||||
|
return {"node_ages": ages[:5]} if ages else {}
|
||||||
|
|
||||||
|
|
||||||
def _build_pods(metrics: dict[str, Any]) -> dict[str, Any]:
|
def _build_pods(metrics: dict[str, Any]) -> dict[str, Any]:
|
||||||
pods = {
|
pods = {
|
||||||
"running": metrics.get("pods_running"),
|
"running": metrics.get("pods_running"),
|
||||||
@ -355,6 +369,22 @@ def _append_hardware(lines: list[str], summary: dict[str, Any]) -> None:
|
|||||||
lines.append("hardware: " + "; ".join(sorted(parts)))
|
lines.append("hardware: " + "; ".join(sorted(parts)))
|
||||||
|
|
||||||
|
|
||||||
|
def _append_node_ages(lines: list[str], summary: dict[str, Any]) -> None:
|
||||||
|
ages = summary.get("node_ages") if isinstance(summary.get("node_ages"), list) else []
|
||||||
|
if not ages:
|
||||||
|
return
|
||||||
|
parts = []
|
||||||
|
for entry in ages[:3]:
|
||||||
|
if not isinstance(entry, dict):
|
||||||
|
continue
|
||||||
|
name = entry.get("name")
|
||||||
|
age = entry.get("age_hours")
|
||||||
|
if name and isinstance(age, (int, float)):
|
||||||
|
parts.append(f"{name}={_format_float(age)}h")
|
||||||
|
if parts:
|
||||||
|
lines.append("node_age_top: " + "; ".join(parts))
|
||||||
|
|
||||||
|
|
||||||
def _append_pressure(lines: list[str], summary: dict[str, Any]) -> None:
|
def _append_pressure(lines: list[str], summary: dict[str, Any]) -> None:
|
||||||
pressure = summary.get("pressure_nodes")
|
pressure = summary.get("pressure_nodes")
|
||||||
if not isinstance(pressure, dict) or not pressure:
|
if not isinstance(pressure, dict) or not pressure:
|
||||||
@ -767,6 +797,7 @@ def summary_text(snapshot: dict[str, Any] | None) -> str:
|
|||||||
_append_nodes(lines, summary)
|
_append_nodes(lines, summary)
|
||||||
_append_pressure(lines, summary)
|
_append_pressure(lines, summary)
|
||||||
_append_hardware(lines, summary)
|
_append_hardware(lines, summary)
|
||||||
|
_append_node_ages(lines, summary)
|
||||||
_append_capacity(lines, summary)
|
_append_capacity(lines, summary)
|
||||||
_append_pods(lines, summary)
|
_append_pods(lines, summary)
|
||||||
_append_namespace_pods(lines, summary)
|
_append_namespace_pods(lines, summary)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user