Set a request id on all requests (#6922)

The request id is extracted from an header set using the
REQUEST_ID_HEADER setting or generated using the default Python random
number generator.
This commit is contained in:
Benjamin Dauvergne 2015-04-09 12:59:33 +02:00
parent 4f3359f075
commit 59f536e998
2 changed files with 15 additions and 0 deletions

View File

@ -1,5 +1,7 @@
import logging
import datetime
import random
import struct
try:
import threading
except ImportError:
@ -108,6 +110,18 @@ class OpenedSessionCookieMiddleware(object):
domain=app_settings.A2_OPENED_SESSION_COOKIE_DOMAIN)
return response
class RequestIdMiddleware(object):
def process_request(self, request):
if not hasattr(request, 'request_id'):
request_id_header = getattr(settings, 'REQUEST_ID_HEADER', None)
if request_id_header and request.META.get(request_id_header):
request.request_id = request.META[request_id_header]
else:
# Use Mersennes Twister rng, no need for a cryptographic grade
# rng in this case
random_id = random.getrandbits(32)
request.request_id = struct.pack('I', random_id).encode('hex')
class StoreRequestMiddleware(object):
collection = {}

View File

@ -54,6 +54,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
)
MIDDLEWARE_CLASSES = (
'authentic2.middleware.RequestIdMiddleware',
'authentic2.middleware.LoggingCollectorMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.http.ConditionalGetMiddleware',