From 9082465a935c815db78c38c500c572684571c4cf Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:06:18 +0330 Subject: [PATCH] Import source: axon/middleware/request_context Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- axon/middleware/request_context.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 axon/middleware/request_context.py diff --git a/axon/middleware/request_context.py b/axon/middleware/request_context.py new file mode 100644 index 0000000..007d630 --- /dev/null +++ b/axon/middleware/request_context.py @@ -0,0 +1,24 @@ +import time +import uuid + +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.requests import Request + +from axon.services.metrics import metrics + + +class RequestContextMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + request_id = request.headers.get("X-Request-ID") or str(uuid.uuid4()) + start = time.monotonic() + status_code = 500 + + try: + response = await call_next(request) + status_code = response.status_code + return response + finally: + latency_ms = (time.monotonic() - start) * 1000 + await metrics.record(request.url.path, status_code, latency_ms) + if "response" in locals(): + response.headers["X-Request-ID"] = request_id