bifroest/services/db-mcp/dbmcp/core/audit.py
2026-10-27 08:34:17 +01:00

30 lines
909 B
Python

"""Audit-Log: eine JSON-Zeile je Tool-Aufruf auf stdout (für das Log-System des Clusters).
Enthält Client (Name des Schlüssels), Datenbank (ohne Passwort), Tool, Abfrage,
Zeilenzahl, Dauer und Ergebnis. Zugangsdaten stehen nie im Log.
"""
import json
import logging
import sys
import time
from typing import Any
log = logging.getLogger("dbmcp.audit")
SQL_CHARS = 2000
def setup() -> None:
if not log.handlers:
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter("%(message)s"))
log.addHandler(handler)
log.setLevel(logging.INFO)
log.propagate = False
def record(**fields: Any) -> None:
if "sql" in fields and fields["sql"]:
fields["sql"] = fields["sql"][:SQL_CHARS]
log.info(json.dumps({"ts": round(time.time(), 3), "event": "dbmcp.call", **fields}, ensure_ascii=False,
default=str))