{% if backends %}
{% for name, backend in backends.items() %}
{{ name }} ({{ backend.backend_type }})
Log
{% if not backend.enabled %} Disabled {% elif backend.status.connected %} {% if backend.status.cpus_user is not none and backend.status.cpus_idle is not none %} Using {{ backend.status.cpus_user }} CPUs in {{ backend_job_counts.get(name, 0) }} jobs, {{ backend.status.cpus_idle }} available {% else %} {{ backend_job_counts.get(name, 0) }} jobs {% endif %} {% if backend.status.disk_avail_bytes is not none and backend.status.disk_total_bytes %} {% set disk_used_pct = ((backend.status.disk_total_bytes - backend.status.disk_avail_bytes) * 100 / backend.status.disk_total_bytes) | round(0, 'floor') | int %} {{ backend.status.disk_avail_bytes | disk_bytes }} free ({{ disk_used_pct }}% used) {% endif %} {% if backend.status.last_poll_duration_ms is not none %} {{ backend.status.last_poll_duration_ms }}ms {% endif %} {% if backend.status.last_poll %} {% endif %} {% else %} Disconnected {% if backend.status.last_poll_duration_ms is not none %} {{ backend.status.last_poll_duration_ms }}ms {% endif %} {% endif %}
{% if backend.enabled and backend.status.error %}
{{ backend.status.error }}
{% endif %} {% if backend.enabled and backend.status.connected and backend.status.cluster_info and backend.status.cluster_info.user_quota %} {% set q = backend.status.cluster_info.user_quota %}
Your usage: {% if q.jobs_used is not none or q.jobs_max is not none %} = q.jobs_max %}class="text-red-600"{% endif %}> jobs {{ q.jobs_used if q.jobs_used is not none else '?' }}{% if q.jobs_max %}/{{ q.jobs_max }}{% endif %} {% endif %} {% if q.cpus_used is not none or q.cpus_max is not none %} cpus {{ q.cpus_used if q.cpus_used is not none else '?' }}{% if q.cpus_max %}/{{ q.cpus_max }}{% endif %} {% endif %} {% if q.gpus_used is not none and q.gpus_used > 0 or q.gpus_max is not none %} gpus {{ q.gpus_used if q.gpus_used is not none else '?' }}{% if q.gpus_max %}/{{ q.gpus_max }}{% endif %} {% endif %} {% if q.fair_share is not none %} fair-share {{ '%.2f'|format(q.fair_share) }} {% endif %} {% if q.account %} account {{ q.account }} {% endif %}
{% endif %} {% if backend.enabled and backend.status.connected and backend.status.cluster_info %} {% set ci = backend.status.cluster_info %} {% set has_gpus = ci.partitions|selectattr('gpus_total', 'gt', 0)|list|length > 0 %} {% if ci.partitions|length > 1 or ci.pending_reasons or has_gpus %}
Partition details {% if ci.pending_reasons %} • {{ ci.pending_reasons.values()|sum }} pending {% endif %}
{% if has_gpus %} {% endif %} {% for p in ci.partitions %} {% if has_gpus %} {% endif %} {% endfor %}
Partition Idle/Total CPUsIdle/Total GPUsNodes Mem/Node Timelimit Features
{{ p.name }}{% if p.is_default %}*{% endif %} {% if p.state and p.state != 'up' %}({{ p.state }}){% endif %} {{ p.cpus_idle }} / {{ p.cpus_total }} {% if p.gpus_total %}{{ p.gpus_idle }} / {{ p.gpus_total }}{% if p.gpu_types %}{{ p.gpu_types }}{% endif %}{% else %}—{% endif %} {{ p.nodes_total }} {% if p.mem_per_node_mb %}{{ (p.mem_per_node_mb // 1024) }}G{% else %}—{% endif %} {{ p.timelimit or '—' }} {{ p.features or '—' }}
{% if ci.pending_reasons %}
Pending jobs by reason: {% for reason, count in ci.pending_reasons.items()|sort(attribute=1, reverse=true) %} {{ reason }} × {{ count }} {% endfor %}
{% endif %}
{% endif %} {% endif %} {% endfor %}
{% else %}

No backends configured

{% endif %}