{% extends "layout.html" %} {% from "_partials/page_description.html" import page_description %} {% block title %}Dashboard - pixie{% endblock %} {% block subnav %} {% endblock %} {% block content %} {{ page_description('speedometer2', 'Live counts across pixie: machines the operator manages, catalog images pixie can serve, NBD exports pixie is running right now. All tiles refresh every 5 s from the same endpoints the pages below use.') }}

Machines

{{ stats.machines_total }}
Bound
{{ stats.machines_bound }}
Inventoried
{{ stats.machines_with_inventory }}

Catalog

{{ stats.catalog_total }}
Disk images
{{ stats.catalog_images_fetched }} / {{ stats.catalog_images_total }}
Netboot bundles
{{ stats.catalog_bundles_fetched }} / {{ stats.catalog_bundles_total }}

NBD serving

{{ stats.exports_total }}
Running
{{ stats.exports_running }}
Error
{{ stats.exports_error }}
{# Events card: total row count + errors-since-ack (red pill on non-zero) + newest ts. Ack POSTs /ui/events/ack which advances the settings.events_ack_ts cursor so error_count zeros until the next error-shaped event fires. #}

Events

{{ stats.events_total }}
Errors {% if stats.events_error_count > 0 %}
{% endif %}
{% if stats.events_error_count > 0 %} {{ stats.events_error_count }} {% else %} 0 {% endif %}
Last
{% if stats.events_last_ts %} {{ stats.events_last_ts | fmt_ts }} {% else %} - {% endif %}
{# Live-env media readiness (OUTPUT ONLY). The dashboard reports whether the pixie-* boot modes have their media; the Fetch action + source / cmdline config live on the dedicated /ui/live-env pane. #} {% set lfs = stats.live_env_fetch_state or {} %}

Live-env media

{% if lfs.state == 'fetching' %} fetching {% elif stats.live_env_ready %} ready {% else %} not staged {% endif %} Manage
{% if stats.live_env_ready %}

Staged at {{ stats.live_env_dir }}; pixie-tui / pixie-inventory / pixie-flash-* can serve the live env.

{% else %}

Live-env media is missing under {{ stats.live_env_dir or '(unset)' }}. Every pixie-* boot_mode falls back to the "unavailable" iPXE plan until it is staged. Fetch it →

{% endif %} {% if lfs.state == 'error' %}

Last fetch failed — see Live env.

{% endif %}
{% for name, size in stats.live_env_files.items() %}
{{ name }}
{% if size is not none %} {{ (size / 1024 / 1024) | round(1) }} MiB {% else %} missing {% endif %}
{% endfor %}
{% if lfs.state == 'fetching' %} {# The fetch runs on the server's thread pool; poll the page so the spinner flips to "ready" (or an error) on its own. A big squashfs download takes a while, so 5 s is frequent enough without hammering. #} {% endif %}

Recent events

All events
{% if events %}
{# ``Related to`` reads as ``: ``: the subject_kind badge is the category, subject_id the specific name / MAC / export name. #} {% for e in events %} {% endfor %}
When Kind Related to Summary
{{ e.ts | fmt_ts }} {{ e.kind }} {% if e.subject_kind %} {{ e.subject_kind }} {{ e.subject_id or '' }} {% else %} - {% endif %} {{ e.summary or "" }}
{% else %}

No events yet.

{% endif %}
{% endblock %}