from __future__ import annotations from fastapi import APIRouter, Header, HTTPException, Query from app.config.settings import get_settings from app.services.logs_service import LogsService router = APIRouter() settings = get_settings() logs_service = LogsService(log_dir="logs") @router.get("/logs/query") async def query_logs( keyword: str = Query(default=""), start: str | None = Query(default=None), end: str | None = Query(default=None), page: int = Query(default=1, ge=1), size: int = Query(default=50, ge=1, le=500), x_log_token: str | None = Header(default=None), token: str | None = Query(default=None), ): expected = settings.log_query_token provided = x_log_token or token if expected and expected != provided: raise HTTPException(status_code=403, detail="invalid log token") total, lines = logs_service.query(keyword=keyword, start=start, end=end, page=page, size=size) has_more = total > page * size return { "total": total, "page": page, "size": size, "has_more": has_more, "lines": lines, }