"""Audit log page — shows the last 200 entries from `audit_events`.""" from __future__ import annotations import aiosqlite from fastapi import APIRouter, Depends, Request from fastapi.responses import HTMLResponse from app import poller from app.database import get_db from app.renderer import templates from ._helpers import stale_context router = APIRouter() _AUDIT_QUERY = """ SELECT ae.id, ae.event_type, ae.operator, ae.message, ae.created_at, d.devname, d.serial FROM audit_events ae LEFT JOIN drives d ON d.id = ae.drive_id ORDER BY ae.id DESC LIMIT 200 """ _AUDIT_EVENT_COLORS = { "burnin_queued": "yellow", "burnin_started": "blue", "burnin_passed": "passed", "burnin_failed": "failed", "burnin_cancelled": "cancelled", "burnin_stuck": "failed", "burnin_unknown": "unknown", } @router.get("/audit", response_class=HTMLResponse) async def audit_log( request: Request, db: aiosqlite.Connection = Depends(get_db), ): cur = await db.execute(_AUDIT_QUERY) rows = [dict(r) for r in await cur.fetchall()] ps = poller.get_state() return templates.TemplateResponse(request, "audit.html", { "request": request, "events": rows, "event_colors": _AUDIT_EVENT_COLORS, "poller": ps, **stale_context(ps), })