main.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from __future__ import annotations
  2. from contextlib import asynccontextmanager
  3. from typing import AsyncGenerator
  4. from fastapi import FastAPI
  5. from fastapi.middleware.cors import CORSMiddleware
  6. from app.config import settings
  7. from app.db import close_pool, init_pool
  8. from app.middleware.logging import LoggingMiddleware
  9. from app.services.ws_hub import hub as ws_hub # noqa: F401
  10. @asynccontextmanager
  11. async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
  12. await init_pool()
  13. yield
  14. await close_pool()
  15. app = FastAPI(title="Sentinel Lens", lifespan=lifespan)
  16. app.add_middleware(
  17. CORSMiddleware,
  18. allow_origins=settings.allowed_origins,
  19. allow_credentials=True,
  20. allow_methods=["*"],
  21. allow_headers=["*"],
  22. )
  23. app.add_middleware(LoggingMiddleware)
  24. # Router registration
  25. from app.routers import stats # noqa: E402
  26. from app.routers import logs # noqa: E402
  27. from app.routers import scrape # noqa: E402
  28. from app.routers import public # noqa: E402
  29. from app.routers import ws # noqa: E402
  30. app.include_router(stats.router, prefix="/api")
  31. app.include_router(logs.router, prefix="/api")
  32. app.include_router(scrape.router, prefix="/api")
  33. app.include_router(public.router, prefix="/api/public")
  34. app.include_router(ws.router)
  35. @app.get("/")
  36. async def health_check() -> dict:
  37. return {"status": "ok", "service": "sentinel-lens"}