import os import sys import logging from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.staticfiles import StaticFiles from Util import Win32Patch project_root = os.path.dirname(os.path.abspath(__file__)) if project_root not in sys.path: sys.path.append(project_root) def setup_api_logger(): logger = logging.getLogger("Start") 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, "Start.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 logger = setup_api_logger() logger.info("驿来特AI智能分析系统模块导入完成!") from Controller.YltAnalyticsController import router as ylt_router, init_db, close_db from Controller.DegreeController import router as degree_router from Controller.HaiBaoController import router as haibao_router from Controller.DouYinController import router as douyin_router, recover_pending_tasks from Util.Win32Patch import patch from Util.RedisKit import RedisKit patch() @asynccontextmanager async def lifespan(app: FastAPI): logger.info("驿来特AI智能分析系统开始启动...") await init_db() # Initialize Redis connection await RedisKit().get_connection() # Recover interrupted Douyin tasks await recover_pending_tasks() try: yield finally: logger.info("驿来特AI智能分析系统关闭...") await close_db() # Close Redis connection await RedisKit().close() app = FastAPI(title="驿来特AI智能分析系统", lifespan=lifespan) static_dir = os.path.join(project_root, "static") app.mount("/static", StaticFiles(directory=static_dir), name="static") app.include_router(ylt_router) app.include_router(degree_router) app.include_router(haibao_router) app.include_router(douyin_router) if __name__ == "__main__": logger.info("Starting 驿来特AI智能分析系统 with uvicorn on http://0.0.0.0:8200") import uvicorn Win32Patch.patch() uvicorn.run(app, host="0.0.0.0", port=8200)