{% extends "base.html" %} {% from "macros.html" import pill, empty_state %} {% block title %}Audit Log — Agent Wasp{% endblock %} {% block page_css %} {% endblock %} {% block content %} {%- set err_rate = ((stats.errors_today / stats.today * 100) | round(1)) if stats.today > 0 else 0 -%}

Audit Log

Every agent action · auto-refresh 30s

Total {{ stats.total | default(0) }}
Today {{ stats.today | default(0) }}
Errors today {{ stats.errors_today | default(0) }}
Error rate {{ err_rate }}%
Avg latency {{ stats.avg_lat | default(0) }}ms
Sources {{ stats.sources_count | default(0) }}
Activity (today, hourly)
events errors
{% if event_type or (current_source | default('')) or errors_only or search %} Clear {% endif %}
⚡ errors only {% for et, count in event_type_counts %} {{ et }}: {{ count }} {% endfor %}
{% for entry in entries %} {%- set has_meta = entry.metadata_json and entry.metadata_json != {} -%} {%- set has_err = entry.error -%} {%- set row_data = { "ts": entry.timestamp.strftime("%Y-%m-%d %H:%M:%S") if entry.timestamp else "", "type": entry.event_type or "", "source": entry.source or "", "action": entry.action or "", "input": (entry.input_summary or "")[:200], "output": (entry.output_summary or "")[:200], "latency": entry.latency_ms or 0, "error": (entry.error or "")[:300] } -%} {% else %} {% endfor %}
Time Event Source Action Input Output Latency Status
{{ entry.timestamp.strftime('%m-%d %H:%M:%S') if entry.timestamp else '—' }} {%- set et = entry.event_type -%} {%- if "error" in et or "fail" in et -%} {{ pill(et, "danger", "xs") }} {%- elif "skill" in et or "execute" in et -%} {{ pill(et, "info", "xs") }} {%- elif "login" in et or "auth" in et or "security" in et -%} {{ pill(et, "warning", "xs") }} {%- elif "telegram" in et or "message" in et -%} {{ pill(et, "success", "xs") }} {%- elif "scheduled" in et -%} {{ pill(et, "neutral", "xs") }} {%- else -%} {{ pill(et, "primary", "xs") }} {%- endif -%} {{ entry.source or '—' }} {%- set act = entry.action | replace("scheduler.", "") | replace("skill.", "") -%} {{ act[:30] }}{% if act | length > 30 %}…{% endif %} {{ (entry.input_summary or '')[:50] }}{% if entry.input_summary and entry.input_summary|length > 50 %}…{% endif %} {%- if has_err -%} {{ (entry.error or '')[:50] }}{% if entry.error and entry.error|length > 50 %}…{% endif %} {%- else -%} {{ (entry.output_summary or '')[:50] }}{% if entry.output_summary and entry.output_summary|length > 50 %}…{% endif %} {%- endif -%} {% if entry.latency_ms %} {{ entry.latency_ms }}ms {% endif %} {% if has_err %} ERR {% elif has_meta %} {% else %} · {% endif %}
{{ empty_state("No audit entries found.", "Entries appear as the agent processes messages.", "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2") }}
{% if page > 1 or has_more %} {%- set sep = "&" if filter_qs else "" -%}
Page {{ page }} · {{ total | default(0) }} total entries
{% if page > 1 %} « {% endif %} {{ page }} {% if has_more %} {% endif %}
{% endif %} {% endblock %} {% block extra_scripts %} {% endblock %}