rugmuncher-backend / backend /app /middleware_setup.py
Hermes
refactor(architecture): split main.py into proper factory
cf5e005
Raw
History Blame Contribute Delete
1.82 kB
"""RMI Backend — middleware registration.
Per v3 unfuck rule #7: add_middleware MUST be called at module level,
NOT inside lifespan. FastAPI rejects middleware added after startup.
This module owns every middleware registration. Adding a new middleware:
1. Add a `try_register(app, "name")` block below
2. Each block is isolated — one failure doesn't break the rest
"""
from __future__ import annotations
import logging
log = logging.getLogger(__name__)
def register_middleware(app) -> None:
"""Register all middleware. Each registration is isolated."""
_try_register_prometheus(app)
_try_register_cost_tracking(app)
_try_register_tracing(app)
def _try_register_prometheus(app) -> None:
"""Prometheus metrics middleware. Records every request."""
try:
from app.core.metrics import PrometheusMiddleware
app.add_middleware(PrometheusMiddleware)
log.info("middleware_registered name=prometheus")
except Exception as exc:
log.warning("middleware_skipped name=prometheus err=%s", exc)
def _try_register_cost_tracking(app) -> None:
"""M7 — per-tenant/per-route cost tracking."""
try:
from app.middleware.cost_tracking import CostTrackingMiddleware, CostBuffer
app.add_middleware(CostTrackingMiddleware, buffer=CostBuffer())
log.info("middleware_registered name=cost_tracking")
except Exception as exc:
log.warning("middleware_skipped name=cost_tracking err=%s", exc)
def _try_register_tracing(app) -> None:
"""Request-id + timing middleware (always on)."""
try:
from app.core.tracing import setup_tracing
setup_tracing(app)
log.info("middleware_registered name=tracing")
except Exception as exc:
log.warning("middleware_skipped name=tracing err=%s", exc)