You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.5 KiB
126 lines
4.5 KiB
{% extends 'layout.html.twig' %} |
|
|
|
{% block title %}Relay Administration{% endblock %} |
|
|
|
{% block body %} |
|
<twig:Atoms:PageHeading |
|
heading="Relay" |
|
tagline="local Nostr relay" |
|
/> |
|
|
|
<div class="w-container"> |
|
|
|
{# Status Overview #} |
|
<div class="status-grid"> |
|
{# Container Status #} |
|
<div class="status-card"> |
|
<h2>Container Status</h2> |
|
|
|
<div class="stat-row"> |
|
<span class="stat-label">strfry Relay</span> |
|
<span class="stat-value"> |
|
{% if container_status.strfry.status == 'running' %} |
|
<span class="status-indicator healthy"></span> Running |
|
{% else %} |
|
<span class="status-indicator error"></span> {{ container_status.strfry.status|default('Not Running') }} |
|
{% endif %} |
|
</span> |
|
</div> |
|
|
|
<div class="stat-row"> |
|
<span class="stat-label">Port 7777</span> |
|
<span class="stat-value"> |
|
{% if connectivity.port_accessible %} |
|
<span class="status-indicator healthy"></span> Accessible |
|
{% else %} |
|
<span class="status-indicator error"></span> Not Accessible |
|
{% endif %} |
|
</span> |
|
</div> |
|
</div> |
|
|
|
{# Database Statistics #} |
|
<div class="status-card"> |
|
<h2>Database Statistics</h2> |
|
|
|
{% if stats.error is defined %} |
|
<div class="alert alert-error">{{ stats.error }}</div> |
|
{% elseif stats.relay_accessible %} |
|
<div class="stat-row"> |
|
<span class="stat-label">Relay Status</span> |
|
<span class="stat-value"><span class="status-indicator healthy"></span> Accessible & Running</span> |
|
</div> |
|
<div class="stat-row"> |
|
<span class="stat-label">Total Events</span> |
|
<span class="stat-value">{{ stats.total_events }}</span> |
|
</div> |
|
<div class="stat-row"> |
|
<span class="stat-label">Database Size</span> |
|
<span class="stat-value">{{ stats.database_size }}</span> |
|
</div> |
|
{% if stats.total_events == 0 %} |
|
<div class="alert alert-warning" style="margin-top: 1rem;"> |
|
No events found. Run prime to populate the relay. |
|
</div> |
|
{% endif %} |
|
{% else %} |
|
<div class="alert alert-error"> |
|
Relay not accessible |
|
</div> |
|
{% endif %} |
|
</div> |
|
|
|
{# Configuration #} |
|
<div class="status-card"> |
|
<h2>Configuration</h2> |
|
|
|
<div class="stat-row"> |
|
<span class="stat-label">Relay URL</span> |
|
<span class="stat-value">{{ config.relay_url }}</span> |
|
</div> |
|
|
|
<div class="stat-row"> |
|
<span class="stat-label">External Access</span> |
|
<span class="stat-value">{{ config.relay_external }}</span> |
|
</div> |
|
|
|
<div class="stat-row"> |
|
<span class="stat-label">Sync Window</span> |
|
<span class="stat-value">{{ config.days_articles }} days (articles)</span> |
|
</div> |
|
|
|
<div class="stat-row"> |
|
<span class="stat-label">Thread Window</span> |
|
<span class="stat-value">{{ config.days_threads }} days (threads)</span> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
{# Recent Events #} |
|
{% if recent_events|length > 0 %} |
|
<div class="events-section"> |
|
<div class="status-card"> |
|
<h2>Recent Events (Last 5)</h2> |
|
|
|
{% for event in recent_events %} |
|
<div class="event-card"> |
|
<div class="event-header"> |
|
<span> |
|
<span class="event-kind">Kind {{ event.kind }}</span> |
|
ID: {{ event.id[:16] }}... |
|
</span> |
|
<span>{{ event.created_at|date('Y-m-d H:i') }}</span> |
|
</div> |
|
{% if event.content %} |
|
<div class="event-content"> |
|
{{ event.content[:200] }}{% if event.content|length > 200 %}...{% endif %} |
|
</div> |
|
{% endif %} |
|
</div> |
|
{% endfor %} |
|
</div> |
|
</div> |
|
{% endif %} |
|
</div> |
|
{% endblock %} |
|
|
|
|