""" middleware.py ============= FastAPI middleware for request timing and CORS. """ import logging import time from fastapi import Request from starlette.middleware.base import BaseHTTPMiddleware logger = logging.getLogger(__name__) class TimingMiddleware(BaseHTTPMiddleware): """ Middleware that logs request latency and adds X-Process-Time header. """ async def dispatch(self, request: Request, call_next): start = time.perf_counter() response = await call_next(request) elapsed_ms = (time.perf_counter() - start) * 1000 response.headers["X-Process-Time"] = f"{elapsed_ms:.2f}ms" # Log request info logger.info( f"{request.method} {request.url.path} — " f"{response.status_code} — {elapsed_ms:.2f}ms" ) return response