Skip to content

Commit 0b99827

Browse files
committed
feat: add request ID middleware for request tracing
1 parent 4a5852c commit 0b99827

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

tensormap-backend/app/main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from app.config import get_settings
1414
from app.exceptions import AppException, app_exception_handler, generic_exception_handler
15-
from app.middleware import RequestLoggingMiddleware
15+
from app.middleware import RequestIDMiddleware, RequestLoggingMiddleware
1616
from app.routers import data_process, data_upload, deep_learning, project
1717
from app.shared.logging_config import get_logger
1818
from app.socketio_instance import sio
@@ -43,6 +43,7 @@ async def lifespan(app: FastAPI):
4343
allow_methods=["*"],
4444
allow_headers=["*"],
4545
)
46+
app.add_middleware(RequestIDMiddleware)
4647
app.add_middleware(RequestLoggingMiddleware)
4748

4849
app.add_exception_handler(AppException, app_exception_handler)

tensormap-backend/app/middleware.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
"""HTTP request/response logging middleware."""
1+
"""HTTP request/response logging and tracing middleware."""
22

33
import re
44
import time
5+
import uuid
56

67
from starlette.middleware.base import BaseHTTPMiddleware
78
from starlette.requests import Request
@@ -22,6 +23,21 @@ def _sanitize_path(path: str) -> str:
2223
return path
2324

2425

26+
class RequestIDMiddleware(BaseHTTPMiddleware):
27+
"""Add a unique request ID to each request for tracing."""
28+
29+
async def dispatch(self, request: Request, call_next) -> Response:
30+
request_id = request.headers.get("X-Request-ID")
31+
if not request_id:
32+
request_id = str(uuid.uuid4())
33+
34+
request.state.request_id = request_id
35+
response = await call_next(request)
36+
response.headers["X-Request-ID"] = request_id
37+
38+
return response
39+
40+
2541
class RequestLoggingMiddleware(BaseHTTPMiddleware):
2642
"""Log method, path, status code, and duration for every HTTP request."""
2743

0 commit comments

Comments
 (0)