#5255 "SNMP — Devices: status in words and key readings". - Verdict first: "All N devices answering", "ups: no reply since 14m ago", "N of M devices not answering", or "N not polled yet". - Devices that stopped answering come first, then those never polled, then the rest. - One header row: Device / Readings / Polled. - The name is the link; the separate "detail →" is gone. - The hollow dot is replaced by words: "no data yet", or "no reply since …; readings are from then". - Key readings: the first two in config order, gauges ahead of counters. Units come from the label suffix: _centisecs as a duration, _pct, _dV as volts, _octets as bytes total. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
38 lines
2.3 KiB
HTML
38 lines
2.3 KiB
HTML
{# plugins/snmp/templates/snmp/widget.html — the dashboard SNMP widget (#5255):
|
|
a verdict, devices that stopped answering first with since when, then the
|
|
rest, each with its status in words and its key readings, named and with
|
|
units. The device name links to its page. #}
|
|
{% from "_macros.html" import status_dot %}
|
|
{% if not total %}
|
|
<div class="w-verdict" style="color:var(--text-muted);">No SNMP devices configured.</div>
|
|
{% else %}
|
|
{% set stale = devices | selectattr("reach", "equalto", "stale") | list %}
|
|
<div class="w-verdict {{ 'tone-crit' if counts.stale else ('tone-warn' if counts.pending else 'tone-ok') }}">
|
|
{%- if counts.stale == 1 and stale %}{{ stale[0].name }}: no reply since {{ stale[0].at|ago }}.
|
|
{%- elif counts.stale %}{{ counts.stale }} of {{ total }} devices not answering.
|
|
{%- elif counts.pending %}{{ counts.pending }} not polled yet, {{ counts.up }} answering.
|
|
{%- else %}All {{ total }} device{{ 's' if total != 1 }} answering.{% endif -%}
|
|
</div>
|
|
<table class="w-table">
|
|
<colgroup><col style="width:40%"><col><col class="w-wide-only" style="width:6rem"></colgroup>
|
|
<thead><tr><th>Device</th><th>Readings</th><th class="w-wide-only">Polled</th></tr></thead>
|
|
<tbody>
|
|
{% for d in devices %}
|
|
<tr>
|
|
<td class="w-name" title="{{ d.name }}">
|
|
{{- status_dot('down' if d.reach == 'stale' else ('pending' if d.reach == 'pending' else 'up')) -}}
|
|
{% if session.user_id %}<a href="/plugins/snmp/device/{{ d.name }}">{{ d.name }}</a>{% else %}{{ d.name }}{% endif %}
|
|
{%- if d.reach == 'stale' %}<span class="w-sub tone-crit">no reply since {{ d.at|ago }}; readings are from then</span>
|
|
{%- elif d.reach == 'pending' %}<span class="w-sub">no data yet</span>{% endif %}
|
|
</td>
|
|
<td title="{% for n, v in d.key %}{{ n }} {{ v }}{% if not loop.last %} · {% endif %}{% endfor %}">
|
|
{%- for n, v in d.key %}<span style="color:var(--text-muted);">{{ n }}</span> {{ v }}{% if not loop.last %} · {% endif %}{% else %}—{% endfor -%}
|
|
</td>
|
|
<td class="w-wide-only">{% if d.at %}{{ d.at|ago }}{% else %}—{% endif %}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% if more %}<div class="w-more">+{{ more }} more{% if session.user_id %} · <a href="/plugins/snmp/">all devices</a>{% endif %}</div>{% endif %}
|
|
{% endif %}
|