feat(admin): 行为日志记录 hub_id(便于区分不同中枢)

This commit is contained in:
2026-10-15 23:56:42 +08:00
parent 1ca2241a97
commit 282415fcb1
3 changed files with 16 additions and 6 deletions
+8 -3
View File
@@ -26,14 +26,18 @@ def _today() -> str:
class LogWriter:
def __init__(self, log_dir: str, retention_days: int = 0) -> None:
def __init__(self, log_dir: str, retention_days: int = 0, hub_id: str = "") -> None:
self.log_dir = Path(log_dir)
self.retention_days = retention_days
self.hub_id = hub_id
self._queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue(maxsize=20000)
self._task: asyncio.Task | None = None
self._date = ""
self._fh = None
def set_hub_id(self, hub_id: str) -> None:
self.hub_id = hub_id or ""
async def start(self) -> None:
self.log_dir.mkdir(parents=True, exist_ok=True)
self._task = asyncio.create_task(self._run())
@@ -111,9 +115,9 @@ class LogWriter:
logger.exception("日志清理失败")
def init_writer(log_dir: str, retention_days: int = 0) -> None:
def init_writer(log_dir: str, retention_days: int = 0, hub_id: str = "") -> None:
global _writer
_writer = LogWriter(log_dir, retention_days)
_writer = LogWriter(log_dir, retention_days, hub_id=hub_id)
async def start_writer() -> None:
@@ -143,6 +147,7 @@ def log_event(
return
entry = {
"ts": _now_iso(),
"hub_id": _writer.hub_id,
"user_id": user_id,
"event": event,
"method": method,
+4 -2
View File
@@ -32,6 +32,7 @@ from .routers import admin
from . import logwriter
from .auth import AuthError
from .services.auth import seed_admin
from .services.settings import get_hub_settings
from .upstream import close_client
logging.basicConfig(level=logging.INFO)
@@ -109,9 +110,10 @@ def create_app() -> FastAPI:
@asynccontextmanager
async def _lifespan(_app: FastAPI):
_db = await init_db()
logwriter.init_writer(settings.log_dir, settings.log_retention_days)
await logwriter.start_writer()
await seed_admin(_db)
hub = await get_hub_settings(_db)
logwriter.init_writer(settings.log_dir, settings.log_retention_days, hub_id=hub["hub_id"])
await logwriter.start_writer()
try:
yield
finally:
+4 -1
View File
@@ -9,6 +9,7 @@ from ..auth import require_admin
from ..config import get_settings
from ..db import Database, get_db
from ..logwriter import log_event
from .. import logwriter
from ..services.auth import (
AUTHORIZATION_UNITS,
verify_login,
@@ -92,7 +93,9 @@ async def get_settings_api(db: Database = Depends(get_db), _user: dict = Depends
@router.put("/settings")
async def put_settings_api(body: HubSettingsBody, db: Database = Depends(get_db), _user: dict = Depends(require_admin)):
return {"ok": True, "settings": await set_hub_settings(db, body.hub_id, body.hub_name)}
settings = await set_hub_settings(db, body.hub_id, body.hub_name)
logwriter.set_hub_id(settings["hub_id"])
return {"ok": True, "settings": settings}
@router.get("/users")