Spaces:
Running on Zero
Running on Zero
File size: 839 Bytes
26c8f44 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | """
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
|