mirror of
https://github.com/DrizzleTime/Foxel.git
synced 2026-05-07 06:13:04 +08:00
49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
from typing import Optional
|
|
from fastapi import APIRouter, Query
|
|
from models.database import Log
|
|
from api.response import page, success
|
|
from tortoise.expressions import Q
|
|
from datetime import datetime
|
|
|
|
router = APIRouter(prefix="/api/logs", tags=["Logs"])
|
|
|
|
@router.get("")
|
|
async def get_logs(
|
|
page_num: int = Query(1, alias="page"),
|
|
page_size: int = Query(20, alias="page_size"),
|
|
level: Optional[str] = Query(None),
|
|
source: Optional[str] = Query(None),
|
|
start_time: Optional[datetime] = Query(None),
|
|
end_time: Optional[datetime] = Query(None),
|
|
):
|
|
"""获取日志列表,支持分页和筛选"""
|
|
query = Log.all()
|
|
if level:
|
|
query = query.filter(level=level)
|
|
if source:
|
|
query = query.filter(source__icontains=source)
|
|
if start_time:
|
|
query = query.filter(timestamp__gte=start_time)
|
|
if end_time:
|
|
query = query.filter(timestamp__lte=end_time)
|
|
|
|
total = await query.count()
|
|
logs = await query.order_by("-timestamp").offset((page_num - 1) * page_size).limit(page_size)
|
|
|
|
return success(page([log for log in logs], total, page_num, page_size))
|
|
|
|
@router.delete("")
|
|
async def clear_logs(
|
|
start_time: Optional[datetime] = Query(None),
|
|
end_time: Optional[datetime] = Query(None),
|
|
):
|
|
"""清理指定时间范围内的日志"""
|
|
query = Log.all()
|
|
if start_time:
|
|
query = query.filter(timestamp__gte=start_time)
|
|
if end_time:
|
|
query = query.filter(timestamp__lte=end_time)
|
|
|
|
deleted_count = await query.delete()
|
|
return success({"deleted_count": deleted_count})
|