FaceCheck / app /middleware /timing.py
Mukhammadali Bakhodirov
Deploy detection fixes
9b5157d
raw
history blame contribute delete
916 Bytes
"""
Request timing middleware.
Emits one structured log line per request with method, path, status, and duration.
"""
import logging
import time
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request
logger = logging.getLogger(__name__)
class TimingMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
start = time.perf_counter()
response = await call_next(request)
duration_ms = round((time.perf_counter() - start) * 1000, 2)
logger.info(
"request completed",
extra={
"method": request.method,
"path": request.url.path,
"status_code": response.status_code,
"duration_ms": duration_ms,
"client_ip": request.client.host if request.client else None,
},
)
return response