Add correlation ID to requests for tracing.
(request: Request, call_next: Callable)
| 14 | |
| 15 | |
| 16 | async def correlation_id_middleware(request: Request, call_next: Callable): |
| 17 | """Add correlation ID to requests for tracing.""" |
| 18 | correlation_id = request.headers.get("X-Correlation-ID") or str(uuid.uuid4()) |
| 19 | request.state.correlation_id = correlation_id |
| 20 | |
| 21 | start_time = time.time() |
| 22 | response = await call_next(request) |
| 23 | duration = time.time() - start_time |
| 24 | |
| 25 | # Log the request and response |
| 26 | logger = get_server_logger() |
| 27 | logger.log_request( |
| 28 | request.method, |
| 29 | str(request.url), |
| 30 | correlation_id=correlation_id, |
| 31 | path=request.url.path, |
| 32 | query_params=dict(request.query_params), |
| 33 | client_host=request.client.host if request.client else None, |
| 34 | user_agent=request.headers.get("user-agent") |
| 35 | ) |
| 36 | |
| 37 | logger.log_response( |
| 38 | response.status_code, |
| 39 | duration, |
| 40 | correlation_id=correlation_id, |
| 41 | content_length=response.headers.get("content-length") |
| 42 | ) |
| 43 | |
| 44 | # Add correlation ID to response headers |
| 45 | response.headers["X-Correlation-ID"] = correlation_id |
| 46 | |
| 47 | return response |
| 48 | |
| 49 | |
| 50 | async def security_middleware(request: Request, call_next: Callable): |
nothing calls this directly
no test coverage detected