Implement Monlet MVP stack and UI updates
This commit is contained in:
23
server/monlet_server/middleware/request_id.py
Normal file
23
server/monlet_server/middleware/request_id.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import re
|
||||
import uuid
|
||||
|
||||
from starlette.middleware.base import BaseHTTPMiddleware
|
||||
from starlette.requests import Request
|
||||
|
||||
from ..logging_config import request_id_var
|
||||
|
||||
_UUID_RE = re.compile(r"^[0-9a-fA-F-]{8,64}$")
|
||||
|
||||
|
||||
class RequestIdMiddleware(BaseHTTPMiddleware):
|
||||
async def dispatch(self, request: Request, call_next):
|
||||
incoming = request.headers.get("X-Request-Id")
|
||||
rid = incoming if incoming and _UUID_RE.match(incoming) else str(uuid.uuid4())
|
||||
request.state.request_id = rid
|
||||
token = request_id_var.set(rid)
|
||||
try:
|
||||
response = await call_next(request)
|
||||
finally:
|
||||
request_id_var.reset(token)
|
||||
response.headers["X-Request-Id"] = rid
|
||||
return response
|
||||
Reference in New Issue
Block a user