{# Reusable per-subject event card. Caller passes: - ``events`` -- iterable of bty.web._events_log.Event - ``title`` -- card title (e.g. "Recent activity") - ``link_to_full`` -- /ui/events URL (with subject filter applied) so the operator can drill into the full timeline. Renders nothing if ``events`` is empty so the parent page doesn't grow an empty card. #} {% if events %}
| When | Kind | Summary | Source IP |
|---|---|---|---|
| {{ e.ts }} | {% set family = e.kind.split('.')[0] %} {% set badge_map = { 'machine': 'bg-info text-dark', 'image': 'bg-primary', 'catalog': 'bg-secondary', 'boot': 'bg-warning text-dark', 'settings': 'bg-dark', } %} {% if e.kind.endswith('.failed') or e.kind.endswith('_failed') %} {% set badge = 'bg-danger' %} {% else %} {% set badge = badge_map.get(family, 'bg-light text-dark border') %} {% endif %} {{ e.kind }} | {{ e.summary }} |
{% if e.source_ip %}
{{ e.source_ip }}
{% else %}
-
{% endif %}
|