main.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """
  2. FastAPI application entry point.
  3. """
  4. from fastapi import FastAPI
  5. from fastapi.middleware.cors import CORSMiddleware
  6. from app.config import settings
  7. from app.core.http_metrics import HTTPMetricsMiddleware
  8. # Create FastAPI app
  9. app = FastAPI(
  10. title=settings.PROJECT_NAME,
  11. version="0.1.0",
  12. description="MyBeacon Backend API - Modular BLE/WiFi monitoring platform",
  13. docs_url="/docs",
  14. redoc_url="/redoc",
  15. )
  16. # Configure CORS
  17. app.add_middleware(
  18. CORSMiddleware,
  19. allow_origins=settings.cors_origins_list,
  20. allow_credentials=True,
  21. allow_methods=["*"],
  22. allow_headers=["*"],
  23. )
  24. # Add HTTP metrics middleware
  25. app.add_middleware(HTTPMetricsMiddleware)
  26. @app.get("/")
  27. async def root():
  28. """Root endpoint - API info."""
  29. return {
  30. "name": settings.PROJECT_NAME,
  31. "version": "0.1.0",
  32. "status": "running",
  33. }
  34. @app.get("/health")
  35. async def health_check():
  36. """Health check endpoint."""
  37. return {"status": "healthy"}
  38. # Include routers
  39. from app.api.v1 import router as api_v1_router
  40. app.include_router(api_v1_router, prefix=settings.API_V1_PREFIX)
  41. # Startup event
  42. @app.on_event("startup")
  43. async def startup_event():
  44. """Initialize services on startup"""
  45. # Start tunnel cleanup background task
  46. from app.services.tunnel_service import tunnel_service
  47. tunnel_service.start_background_cleanup()
  48. print("[startup] Tunnel cleanup task started")
  49. # Start host monitoring background task
  50. import asyncio
  51. from app.services.host_monitor import host_monitor
  52. asyncio.create_task(host_monitor.run_monitoring_loop())
  53. print("[startup] Host monitoring task started")
  54. # Shutdown event
  55. @app.on_event("shutdown")
  56. async def shutdown_event():
  57. """Cleanup on shutdown"""
  58. from app.services.host_monitor import host_monitor
  59. await host_monitor.stop()
  60. print("[shutdown] Host monitoring stopped")