Spaces:
Running
Running
| 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, | |
| ) | |
| 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 | |
| async def health_check(): | |
| return True | |
| templates = Jinja2Templates(directory="static") | |
| 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 # 今天的日志 | |
| 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}, | |
| ) | |