Files
aiData/Start.py

71 lines
2.0 KiB
Python
Raw Normal View History

2026-01-18 15:43:02 +08:00
import os
import sys
2026-01-18 16:02:40 +08:00
import logging
from contextlib import asynccontextmanager
2026-01-18 15:43:02 +08:00
2026-01-18 16:02:40 +08:00
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
2026-01-18 15:43:02 +08:00
project_root = os.path.dirname(os.path.abspath(__file__))
if project_root not in sys.path:
sys.path.append(project_root)
2026-01-18 16:02:40 +08:00
def setup_api_logger():
2026-01-20 08:09:13 +08:00
logger = logging.getLogger("Start")
2026-01-18 16:02:40 +08:00
logger.setLevel(logging.INFO)
logger.propagate = False
if logger.handlers:
return logger
log_dir = os.path.join(project_root, "Logs")
os.makedirs(log_dir, exist_ok=True)
log_file = os.path.join(log_dir, "YLT_Analytics_Api.log")
file_handler = logging.FileHandler(log_file, encoding="utf-8")
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger
2026-01-18 15:43:02 +08:00
2026-01-18 16:02:40 +08:00
logger = setup_api_logger()
logger.info("YLT_Analytics_Api module imported")
2026-01-18 15:43:02 +08:00
2026-01-20 08:09:13 +08:00
from Controller.YltAnalyticsController import router as ylt_router, init_db, close_db
from Controller.DegreeController import router as degree_router
from Util.Win32Patch import patch
from Util.RedisKit import RedisKit
2026-01-18 15:43:02 +08:00
2026-01-20 08:09:13 +08:00
patch()
2026-01-18 15:43:02 +08:00
2026-01-18 16:02:40 +08:00
@asynccontextmanager
async def lifespan(app: FastAPI):
logger.info("YLT Analytics API startup")
await init_db()
2026-01-20 08:09:13 +08:00
# Initialize Redis connection
await RedisKit().get_connection()
2026-01-18 16:02:40 +08:00
try:
yield
finally:
logger.info("YLT Analytics API shutdown")
await close_db()
2026-01-18 15:43:02 +08:00
2026-01-18 16:02:40 +08:00
app = FastAPI(title="YLT Analytics API", lifespan=lifespan)
2026-01-18 15:43:02 +08:00
2026-01-18 16:02:40 +08:00
static_dir = os.path.join(project_root, "static")
app.mount("/static", StaticFiles(directory=static_dir), name="static")
2026-01-18 15:43:02 +08:00
2026-01-20 08:09:13 +08:00
app.include_router(ylt_router)
app.include_router(degree_router)
2026-01-18 15:43:02 +08:00
2026-01-18 16:02:40 +08:00
if __name__ == "__main__":
logger.info("Starting YLT Analytics API with uvicorn on http://0.0.0.0:8000")
import uvicorn
2026-01-18 15:43:02 +08:00
2026-01-18 16:02:40 +08:00
uvicorn.run(app, host="0.0.0.0", port=8000)