{% extends "base.html" %} {% import "_icons.html" as icons %} {% block title %}Audit trail{% endblock %} {% block heading %}Audit trail{% endblock %} {% block subhead %}

Every autonomous action Eidetic has run — newest first.

{% endblock %} {% block head_aside %} {{ icons.icon("activity", 14) }} {{ page.total }} entr{{ 'y' if page.total == 1 else 'ies' }} match {% endblock %} {% set action_icons = { 'embed': 'database', 'commit': 'git', 'health': 'activity', 'session': 'terminal', 'email': 'mail', 'trading': 'dollar', 'search': 'search', 'install': 'download', 'report': 'file', 'index': 'layers' } %} {% block content %}
{% if action or since %} {{ icons.icon("refresh", 14) }} Clear {% endif %}
All {% for a in page.actions %} {{ icons.icon(action_icons.get(a, 'circle'), 13) }} {{ a }} {% endfor %}
{% if page.entries %}
    {% for e in page.entries %} {% set status = e.get('status', '') %} {% set state = {'success': 'ok', 'error': 'fail', 'skipped': 'warn'}.get(status, 'warn') %} {% set act = e.get('action', '?') %} {% set ts = (e.get('timestamp') or '')[:19] | replace('T', ' ') %}
  1. {{ icons.icon(action_icons.get(act, 'circle'), 15) }}
    {{ act }} {{ icons.status_icon(state, 12) }} {{ status or '?' }} {{ icons.icon("zap", 12) }} {{ e.get('trigger', '?') }} {% set d = e.get('duration_seconds') %} {% if d is not none %}{{ '%.2fs' % d }}{% endif %}
    {{ icons.icon("clock", 12) }} {{ ts }} UTC {% set changes = e.get('changes') or [] %} {% if changes %}{{ changes | join(', ') }}{% endif %} {{ icons.icon("chevron-down", 15) }}
    {% if status == 'error' and e.get('error') %}
    {{ icons.icon("x-circle", 13) }} {{ (e.get('error') or '').splitlines()[0] }}
    {% endif %}
    {{ e | tojson(indent=2) }}
  2. {% endfor %}
{% if page.pages > 1 %} {% endif %} {% else %}
{{ icons.icon("audit", 32) }}

No audit entries match these filters.

{% endif %} {% endblock %}