{% extends "base.html" %} {% block title %}{{ _('Audit Log') }} — {{ _('Admin') }} — mcprack{% endblock %} {% block content %}

📜 {{ _('Audit Log') }}

{{ _('Append-only security audit trail — who did what, against which server, and whether it succeeded. Entries cannot be edited or deleted here.') }} {% if retention_days %}{{ _('Entries older than %(days)s days are archived and purged by the flask audit-archive CLI command.', days=retention_days) }}{% endif %}





{{ _('Reset') }}
{% for e in entries %} {% else %} {% endfor %}
{{ _('Timestamp (UTC)') }} {{ _('User') }} {{ _('Server') }} {{ _('Action') }} {{ _('Result') }} {{ _('Detail') }} {{ _('Source') }} {{ _('Duration') }} {{ _('Request') }}
{{ e.timestamp.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] }} {{ e.user.username if e.user else ('#' ~ e.user_id if e.user_id else '—') }} {{ e.server.name if e.server else (e.server_name or ('#' ~ e.server_id if e.server_id else '—')) }} {{ e.action }} {% if e.result == 'success' %} ✓ {{ _('success') }} {% else %} ✗ {{ _('error') }} {% endif %} {{ e.error_message or '—' }} {{ e.source_ip or '—' }}{% if e.hostname %} ({{ e.hostname }}){% endif %} {{ (e.duration_ms ~ ' ms') if e.duration_ms is not none else '—' }} {% if e.request_id %} 🔗 {% else %}—{% endif %}

{{ _('No audit entries match the current filters.') }}

{{ _('Showing the most recent %(count)s matching entries (limit 500).', count=entries | length) }}

{% endblock %}