From 282415fcb1d8c5c21bf8bb27532e7a4a772d6c3a Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 15 Oct 2026 23:56:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E8=A1=8C=E4=B8=BA=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=20hub=5Fid(=E4=BE=BF=E4=BA=8E?= =?UTF-8?q?=E5=8C=BA=E5=88=86=E4=B8=8D=E5=90=8C=E4=B8=AD=E6=9E=A2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk/app/logwriter.py | 11 ++++++++--- sdk/app/main.py | 6 ++++-- sdk/app/routers/admin.py | 5 ++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/sdk/app/logwriter.py b/sdk/app/logwriter.py index 6e0607d..cab2f17 100644 --- a/sdk/app/logwriter.py +++ b/sdk/app/logwriter.py @@ -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, diff --git a/sdk/app/main.py b/sdk/app/main.py index 51bd543..8a69654 100644 --- a/sdk/app/main.py +++ b/sdk/app/main.py @@ -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: diff --git a/sdk/app/routers/admin.py b/sdk/app/routers/admin.py index 58ea218..e49a3ae 100644 --- a/sdk/app/routers/admin.py +++ b/sdk/app/routers/admin.py @@ -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")