{# hosts/overview_widget.html — the dashboard Hosts widget (#5251): a verdict, then one row per host, worst first, with its resources under one header. Load is shown against the host's cores and graded per core. Reachability and uptime belong to the Monitors widget, so they aren't repeated here. #} {% from "_macros.html" import status_dot %} {% if not rows %}
No hosts yet.{% if session.user_id %} Add one →{% endif %}
{% else %} {% set problems = rows | selectattr("state", "in", ["down", "crit", "stale", "warn"]) | list %}
{%- if not problems %}All {{ rows|length }} host{{ 's' if rows|length != 1 }} healthy. {%- elif problems|length == 1 %}{% set p = problems[0] %}{{ p.host.name }}: {% if p.state == 'down' %}a monitor is down.{% elif p.state == 'stale' %}its agent stopped reporting.{% else %}{{ p.worst[0] }} high.{% endif %} {%- else %}{{ problems|length }} of {{ rows|length }} hosts need a look.{% endif -%}
{% for r in rows %} {% set a = r.agent %}{% set fresh = a.get('fresh') %} {% for v, kind in ((a.get('cpu_pct'), 'cpu'), (a.get('mem_used_pct'), 'mem'), (a.get('disk_root'), 'disk')) %} {% endfor %} {% endfor %}
HostCPUMemDisk /Load
{{- status_dot(r.state) -}} {% if session.user_id %}{{ r.host.name }}{% else %}{{ r.host.name }}{% endif %} {%- if r.state == 'down' %}a monitor is down {%- elif r.state == 'stale' %}agent last reported {{ a.last_at|ago }}; figures are from then {%- elif not a %}no agent{% endif %} {% if v is none %}—{% else %}{{ "%.0f"|format(v) }}%{% endif %} {%- if a.get('load_1m') is none %}—{% elif a.get('cores') %}{{ "%.1f"|format(a.load_1m) }} / {{ a.cores }} cores{% else %}{{ "%.1f"|format(a.load_1m) }}{% endif -%}
{% endif %}