from fastapi import FastAPI, Body, Header, Request, Query from fastapi.middleware.cors import CORSMiddleware from utils import beijing, parse_token from logging_helper import LoggingHelper from fastapi.templating import Jinja2Templates import datetime app = FastAPI( title=f"Log Displayer", description=f"Updated at {beijing()}", ) print("Adding middlewares...", end="") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) print("Done\n") LOGS_REPO_ID = "pgsoft/logs" local_dir = "data/logs" logger = LoggingHelper( repo_id=LOGS_REPO_ID, local_dir=local_dir, ) @app.post("/{end}") async def add_log( end: str, message: str = Body(..., embed=True), token: str | None = Header(None), source: str | None = Header("web"), ): print("Type: ", end) print("From: ", source) print("Token: ", token) uid, username = parse_token(token) timestamp = beijing().isoformat() print("Timestamp: ", timestamp) print("Message: ", message) log = { "type": end, "source": source, "uid": uid, "username": username, "token": token, "content": message, "timestamp": timestamp, } logger.addlog(log) return True @app.get("/healthcheck") async def health_check(): return True templates = Jinja2Templates(directory="static") @app.get("") @app.get("/") async def root( request: Request, from_date: str | None = Query(None), to_date: str | None = Query(None), ): """ 首页端点,支持日期范围查询 查询参数: - from_date: 开始日期(格式:YYYY-MM-DD),不指定时默认加载今天 - to_date: 结束日期(格式:YYYY-MM-DD),不指定时默认为今天 """ # 如果没有指定日期范围,默认加载今天的日志 if from_date is None and to_date is None: today = beijing().date().strftime("%Y-%m-%d") from_date = today # 最近30天(包括今天) to_date = today print(f"[root] No date range specified, using today: {from_date} to {to_date}") data = logger.refresh(from_date=from_date, to_date=to_date) return templates.TemplateResponse( "index.html", {"request": request, "data": data}, )