approval/app/api/logs.py

36 lines
1.1 KiB
Python

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,
}