64 lines
2.3 KiB
HTML
Raw Normal View History

2026-03-13 00:18:14 +00:00
{% extends "base.html" %}
{% import "macros/ui.html" as m %}
{% block title %}Sessions — Ontoref{% endblock title %}
{% block nav_sessions %}active{% endblock nav_sessions %}
{% block content %}
<div class="mb-6 flex items-center justify-between">
<h1 class="text-2xl font-bold">Active Sessions</h1>
<span class="badge badge-lg badge-neutral">{{ total }} actor(s)</span>
</div>
{% if sessions | length == 0 %}
{{ m::empty_state(message="No active actor sessions") }}
{% else %}
<div class="overflow-x-auto">
<table class="table table-zebra table-sm w-full bg-base-200 rounded-lg">
<thead>
<tr class="text-base-content/50 text-xs uppercase tracking-wider">
<th>Token</th>
<th>Type</th>
<th>Role</th>
<th>Project</th>
<th>Host / PID</th>
<th>Registered</th>
<th>Last seen</th>
<th class="text-right">Pending</th>
</tr>
</thead>
<tbody>
{% for s in sessions %}
<tr>
<td class="font-mono text-xs text-base-content/50">{{ s.token }}</td>
<td>{{ m::actor_badge(actor_type=s.actor_type) }}</td>
<td>
<span class="badge badge-xs font-mono
{% if s.role == 'admin' %}badge-error
{% elif s.role == 'developer' %}badge-primary
{% elif s.role == 'agent' %}badge-secondary
{% elif s.role == 'ci' %}badge-accent
{% else %}badge-ghost{% endif %}">{{ s.role }}</span>
{% if s.has_preferences %}
<span class="ml-1 text-base-content/30 text-xs" title="has saved preferences"></span>
{% endif %}
</td>
<td class="font-mono text-sm">{{ s.project }}</td>
<td class="font-mono text-xs">{{ s.hostname }}:{{ s.pid }}</td>
<td class="text-xs text-base-content/60">{{ s.registered_ago }}s ago</td>
<td class="text-xs text-base-content/60">{{ s.last_seen_ago }}s ago</td>
<td class="text-right">
{% if s.pending_notifications > 0 %}
<span class="badge badge-warning badge-sm">{{ s.pending_notifications }}</span>
{% else %}
<span class="text-base-content/30 text-xs"></span>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% endblock content %}