diff --git a/plugins/host_agent/routes.py b/plugins/host_agent/routes.py index 644dbee..d8c66b1 100644 --- a/plugins/host_agent/routes.py +++ b/plugins/host_agent/routes.py @@ -409,6 +409,8 @@ async def _fleet_rows(session) -> list[dict]: "temp_max": m.get("temp_c_max"), "net_rx_bps": m.get("net_rx_bps"), "net_tx_bps": m.get("net_tx_bps"), + "disk_read_bps": m.get("disk_read_bps"), + "disk_write_bps": m.get("disk_write_bps"), "sparks": sparks, }) rows.sort(key=lambda r: r["host"].name.lower()) diff --git a/plugins/host_agent/templates/widget_table.html b/plugins/host_agent/templates/widget_table.html index 30fac53..d543b8d 100644 --- a/plugins/host_agent/templates/widget_table.html +++ b/plugins/host_agent/templates/widget_table.html @@ -14,6 +14,24 @@
{{ svg | safe }}
{% endmacro %} +{# Human-readable throughput, matching the host-detail page. #} +{% macro fmt_bps(v) %} +{%- if v is none -%}— +{%- elif v >= 1048576 -%}{{ "%.1f"|format(v / 1048576) }} MB/s +{%- elif v >= 1024 -%}{{ "%.1f"|format(v / 1024) }} KB/s +{%- else -%}{{ "%.0f"|format(v) }} B/s +{%- endif -%} +{% endmacro %} +{# Two-line down/up (or read/write) throughput cell. #} +{% macro io_cell(label, down_sym, down_val, up_sym, up_val, title="") %} +
+
{{ label }}
+
+
{{ down_sym }} {{ fmt_bps(down_val) }}
+
{{ up_sym }} {{ fmt_bps(up_val) }}
+
+
+{% endmacro %}
{% for r in rows %} {% set stale = r.stale %} @@ -40,6 +58,17 @@ {{ metric_cell("mem", r.mem_used_pct, "%.0f%%", r.sparks.mem, metric_style(r.mem_used_pct), "Memory in use") }} {{ metric_cell("disk /", r.disk_root, "%.0f%%", r.sparks.disk, metric_style(r.disk_root), "Root filesystem (/) usage") }} {{ metric_cell("load", r.load_1m, "%.2f", r.sparks.load, "", "Load average (1m)") }} + {# Extra agent metrics — shown only when the host reports them (VMs/containers + often have no temp sensor, etc.) so absent data doesn't clutter the row. #} + {% if r.net_rx_bps is not none or r.net_tx_bps is not none %} + {{ io_cell("net", "↓", r.net_rx_bps, "↑", r.net_tx_bps, "Network throughput (down / up)") }} + {% endif %} + {% if r.disk_read_bps is not none or r.disk_write_bps is not none %} + {{ io_cell("disk i/o", "rd", r.disk_read_bps, "wr", r.disk_write_bps, "Disk I/O (read / write)") }} + {% endif %} + {% if r.temp_max is not none %} + {{ metric_cell("temp", r.temp_max, "%.0f°C", "", metric_style(r.temp_max, warn=70, crit=85), "Hottest sensor") }} + {% endif %}
{% endfor %}