main.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 routers.mihomo import mihomo_router,stop_all_mihomo
  14. from utils.mihomo_service import download_mihomo
  15. from database.engine import create_db_and_tables
  16. from aiomultiprocess import Pool
  17. from utils.processes_mgr import process_manager
  18. @asynccontextmanager
  19. async def lifespan(app: FastAPI):
  20. """应用生命周期管理"""
  21. # 初始化目录结构
  22. settings.PATH_CONFIG_DIR.mkdir(parents=True, exist_ok=True)
  23. settings.PATH_SUBSCRIPTION_DIR.mkdir(parents=True, exist_ok=True)
  24. create_db_and_tables()
  25. # 检查并下载mihomo
  26. await download_mihomo()
  27. await stop_all_mihomo()
  28. yield
  29. process_manager.stop_all_processes()
  30. app = FastAPI(lifespan=lifespan)
  31. # 注册路由
  32. app.include_router(router, prefix="/subscriptions", tags=["订阅管理"])
  33. app.include_router(mihomo_router, prefix="/mihomo", tags=["mihomo管理"])
  34. # 添加健康检查路由
  35. @app.get("/health")
  36. async def health_check():
  37. """服务健康检查"""
  38. return {"status": "healthy"}
  39. @app.get("/")
  40. async def root():
  41. return {
  42. "message": "代理池管理API",
  43. "endpoints": {
  44. "/docs": "API文档",
  45. "/configs": "配置管理",
  46. "/subscriptions": "订阅管理"
  47. }
  48. }
  49. if __name__ == "__main__":
  50. uvicorn.run("main:app", host=settings.HOST, port=settings.PORT, reload=settings.DEBUG)