main.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from fastapi import FastAPI
  2. from contextlib import asynccontextmanager
  3. import uvicorn
  4. from pathlib import Path
  5. from datetime import datetime
  6. from typing import List, Dict, Optional
  7. from pydantic import BaseModel
  8. import yaml
  9. import asyncio
  10. import httpx
  11. from config.settings import settings
  12. from routers.subscriptions import router
  13. from utils.mihomo_service import download_mihomo
  14. from database.engine import create_db_and_tables
  15. from aiomultiprocess import Pool
  16. @asynccontextmanager
  17. async def lifespan(app: FastAPI):
  18. """应用生命周期管理"""
  19. # 初始化目录结构
  20. settings.PATH_CONFIG_DIR.mkdir(parents=True, exist_ok=True)
  21. settings.PATH_SUBSCRIPTION_DIR.mkdir(parents=True, exist_ok=True)
  22. create_db_and_tables()
  23. # 检查并下载mihomo
  24. await download_mihomo()
  25. yield
  26. app = FastAPI(lifespan=lifespan)
  27. # 注册路由
  28. app.include_router(router, prefix="/subscriptions", tags=["订阅管理"])
  29. # 添加健康检查路由
  30. @app.get("/health")
  31. async def health_check():
  32. """服务健康检查"""
  33. return {"status": "healthy"}
  34. @app.get("/")
  35. async def root():
  36. return {
  37. "message": "代理池管理API",
  38. "endpoints": {
  39. "/docs": "API文档",
  40. "/configs": "配置管理",
  41. "/subscriptions": "订阅管理"
  42. }
  43. }
  44. if __name__ == "__main__":
  45. uvicorn.run("main:app", host=settings.HOST, port=settings.PORT, reload=settings.DEBUG)