{# HTMX fragment — the Monitors list: counts, then every monitor, problems first (service.problems_first). Colours come from Settings → Thresholds. #} {% from "_macros.html" import stat_tile, status_badge, status_dot, icon_button, empty_state %}
{{ stat_tile("Down", counts.down, state="down" if counts.down else "inactive") }} {{ stat_tile("Up", counts.up, state="up" if counts.up else "inactive", hint=(counts.degraded ~ " degraded") if counts.degraded else none) }} {{ stat_tile("Pending", counts.pending, state="pending" if counts.pending else "inactive") }} {{ stat_tile("Paused", counts.paused, state="paused") }}
{% if monitor_data %}
{% set can_edit = session.user_role in ['operator', 'admin'] %} {% for d in monitor_data %} {% set m = d.monitor %} {% set latest = d.latest %}
{{ status_dot(d.state) }} {{ m.name }}
{{ m.type|monitor_type }} · {{ m.target }} {% if d.state == 'down' %} Down{% if d.down_since %} {{ d.down_since|ago|replace(' ago', '') }}{% endif %}{% if d.down_reason %} · {{ d.down_reason }}{% endif %} {% endif %}
{% for _ in range([30 - d.heartbeat|length, 0]|max) %}{% endfor %} {% for h in d.heartbeat %}{% endfor %}
{% if d.state in ('down', 'paused', 'pending') %}{{ status_badge(d.state) }} {% elif latest.response_ms is not none %} {{ "%.0f"|format(latest.response_ms) }} ms {% elif m.type == 'dns' and latest.resolved_ip %}{{ latest.resolved_ip }} {% else %}{{ status_badge('up') }}{% endif %}
{% if d.uptime_pct is not none %}{{ "%.1f"|format(d.uptime_pct) }}%{% else %}—{% endif %} {{ range_key }}
{% if d.tls_days is not none %}
{% if d.tls_days < 0 %}cert expired {% else %}cert {{ d.tls_days|round|int }}d{% endif %}
{% endif %} {% if can_edit %}
{{ icon_button("✎", "Edit " ~ m.name, href="/monitors/" ~ m.id ~ "/edit") }}
{{ csrf_field() }} {{ icon_button("⏸" if m.enabled else "▶", ("Pause " if m.enabled else "Resume ") ~ m.name, type="submit") }}
{{ csrf_field() }} {{ icon_button("×", "Delete " ~ m.name, type="submit", confirm="Delete monitor " ~ m.name ~ "?") }}
{% endif %}
{% endfor %}
{% else %}
{{ empty_state("No monitors yet. Add one, or attach checks to a host from its page.", "Add monitor" if session.user_role in ['operator', 'admin'] else none, "/monitors/new") }}
{% endif %}