36 lines
1.1 KiB
Python
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,
|
|
}
|