mirror of https://github.com/interlegis/sapl.git
7 changed files with 68 additions and 7 deletions
@ -0,0 +1,21 @@ |
|||
# sapl/logging/filters.py |
|||
import logging |
|||
import contextvars |
|||
|
|||
_request_id = contextvars.ContextVar("request_id", default="-") |
|||
|
|||
|
|||
def set_request_id(value: str): |
|||
_request_id.set(value) |
|||
|
|||
|
|||
def get_request_id() -> str: |
|||
return _request_id.get() |
|||
|
|||
|
|||
class RequestIdFilter(logging.Filter): |
|||
def filter(self, record: logging.LogRecord) -> bool: |
|||
# garante que SEMPRE existe |
|||
if not hasattr(record, "request_id"): |
|||
record.request_id = get_request_id() |
|||
return True |
|||
@ -0,0 +1,24 @@ |
|||
import uuid |
|||
from sapl.logging.filters import set_request_id |
|||
|
|||
HEADER_NAME = "HTTP_X_REQUEST_ID" |
|||
RESPONSE_HEADER = "X-Request-ID" |
|||
|
|||
|
|||
def _new_id(): |
|||
return uuid.uuid4().hex |
|||
|
|||
|
|||
class RequestIdMiddleware: |
|||
def __init__(self, get_response): |
|||
self.get_response = get_response |
|||
|
|||
def __call__(self, request): |
|||
# recebe `request_id` do nginx ou do cliente senão cria um |
|||
request_id = request.META.get(HEADER_NAME) or _new_id() |
|||
request_id = str(request_id)[:64] |
|||
request.request_id = request_id |
|||
set_request_id(request_id) |
|||
response = self.get_response(request) |
|||
response[RESPONSE_HEADER] = request_id |
|||
return response |
|||
Loading…
Reference in new issue