44 lines
979 B
Python
44 lines
979 B
Python
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),
|
|
)
|