{% extends "_shell.html" %} {% from "_macros.html" import service_error, bar, disk_state, disk_row, trend %} {% block title %}P105 System{% endblock %} {% block content %}

SYSTEM

{#- ── Service transmission status ─────────────────────────────── Six services, one row each, colour carrying up or down. This is what the old header pills were, given room to say something. Each row opens that service's own instance, via the reverse proxy. -#}
Transmission
{% for name, key, svc in [('Sonarr', 'sonarr', sonarr), ('Radarr', 'radarr', radarr), ('SABnzbd', 'sabnzbd', sabnzbd), ('Tautulli', 'tautulli', tautulli), ('Prowlarr', 'prowlarr', prowlarr), ('Ombi', 'ombi', ombi)] %} {{ name }} {{- 'ON AIR' if svc.status == 'ok' else 'OFF AIR' -}} {% endfor %}
{#- ── Array ───────────────────────────────────────────────────── -#} {% if unraid.status != 'ok' %}
Arrayunreachable
{{ service_error('Unraid', unraid.error) }} {% else %} {%- set apct = unraid.array_used_pct | default(0) | float -%}
Array {{ unraid.array_state | default('') }} {%- if unraid.parities %} · parity {%- for p in unraid.parities %} {{ p.temp if p.temp is not none else '—' }}°C{% endfor %} {%- endif %}
{{ apct | round | int }}%
Used
{{ unraid.array_free | default('—') }}
Free
{{ unraid.array_total | default('—') }}
Total
{{ unraid.disk_count | default(0) }}
Disks
{% if unraid.disks %} {#- Desktop: a real table — columns line up, a new metric is a new column. Hidden below 560px, where six columns stop fitting and a horizontal scroll would hide the bar and the temperature, the two readings that matter most on this page. -#}
{% for dk in unraid.disks %} {% endfor %} {% for ck in unraid.caches | default([]) %} {% endfor %}
Disk Device Size Free Usage Temp
{{ dk.name }} {{ dk.device | default('—') }} {{ dk.total | default('—') }} {{ dk.free | default('—') }} {{ bar(dk.used_pct | default(0)) }} {{ dk.used_pct | default(0) | round | int }}% {{ disk_state(dk) }}
{{ ck.name }} {{ ck.device | default('—') }} {{ ck.total | default('—') }} {{ ck.free | default('—') }} {{ bar(ck.used_pct | default(0)) }} {{ ck.used_pct | default(0) | round | int }}% {{ disk_state(ck) }}
{#- Phone (≤560px): the .tt-row-derived reflow — name, the shared 20-cell bar and the temperature on one line, device/size/free beneath. Hidden above 560px in favour of the table. -#}
{% for dk in unraid.disks %}{{ disk_row(dk) }}{% endfor %} {% for ck in unraid.caches | default([]) %}{{ disk_row(ck) }}{% endfor %}
{% endif %} {% endif %} {#- ── Downloads ───────────────────────────────────────────────── The one place the service holds real history, so the one place a trend arrow is honest: current speed against the 7-day average. -#} {% if sabnzbd.status == 'ok' %}
Downloads{{ sabnzbd.sab_status | default('') }}
{{ sabnzbd.queue_count }}
In queue
{{ sabnzbd.speed | default('0') }} {{ trend(sabnzbd.speed_kbps, sabnzbd.avg_speed_kbps) }}
Speed vs 7-day avg
{{ sabnzbd.sizeleft | default('—') }}
Remaining
{{ sabnzbd.week_size | default('—') }}
This week
{% else %}
Downloadsoff air
{{ service_error('SABnzbd', sabnzbd.error) }} {% endif %} {#- ── Indexers ────────────────────────────────────────────────── -#} {% if prowlarr.status == 'ok' %}
Indexers {{ prowlarr.up_count }} of {{ prowlarr.total }} up
{% for idx in prowlarr.indexers %}
{{ idx.protocol | default('') }} {{ idx.name }} {% if prowlarr.has_stats %}{{ idx.grabs | default(0) }} grabs · {{ idx.queries | default(0) }} queries{% endif %} {% if prowlarr.has_stats %}{{ bar(idx.grab_share | default(0), 'ok' if idx.up else 'alert') }}{% endif %} {{ 'UP' if idx.up else 'DOWN' }}
{% endfor %}
{% else %}
Indexersoff air
{{ service_error('Prowlarr', prowlarr.error) }} {% endif %} {% endblock %}