from __future__ import annotations import json import logging from typing import Any _log = logging.getLogger("app.lab.audit") def write_audit( action: str, entity_type: str, entity_id: str | None, user_id: str | None = None, metadata: dict[str, Any] | None = None, ) -> None: _log.info( "lab action=%s entity=%s/%s user=%s metadata=%s", action, entity_type, entity_id, user_id or "system", json.dumps(metadata or {}, ensure_ascii=False), ) def write_calculation_run( recipe_id: str, status: str, kpi_results: dict[str, Any], *, duration_ms: int | None = None, error_message: str | None = None, ) -> None: _log.info( "lab calculation recipe=%s status=%s duration_ms=%s engine=%s error=%s kpi=%s", recipe_id, status, duration_ms, "native-1", error_message or "", json.dumps(kpi_results, ensure_ascii=False), )