forked from CGM_Public/pretix_original
API: Add logging for replaying by idempotency key
This commit is contained in:
@@ -20,6 +20,7 @@
|
|||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -35,6 +36,9 @@ from pretix.base.models import Organizer
|
|||||||
from pretix.helpers import OF_SELF
|
from pretix.helpers import OF_SELF
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class IdempotencyMiddleware:
|
class IdempotencyMiddleware:
|
||||||
def __init__(self, get_response):
|
def __init__(self, get_response):
|
||||||
self.get_response = get_response
|
self.get_response = get_response
|
||||||
@@ -97,6 +101,9 @@ class IdempotencyMiddleware:
|
|||||||
return resp
|
return resp
|
||||||
else:
|
else:
|
||||||
if call.locked:
|
if call.locked:
|
||||||
|
logger.info(
|
||||||
|
f'Concurrent request with idempotency key {idempotency_key} blocked.'
|
||||||
|
)
|
||||||
r = JsonResponse(
|
r = JsonResponse(
|
||||||
{'detail': 'Concurrent request with idempotency key.'},
|
{'detail': 'Concurrent request with idempotency key.'},
|
||||||
status=status.HTTP_409_CONFLICT,
|
status=status.HTTP_409_CONFLICT,
|
||||||
@@ -111,6 +118,7 @@ class IdempotencyMiddleware:
|
|||||||
content=content,
|
content=content,
|
||||||
status=call.response_code,
|
status=call.response_code,
|
||||||
)
|
)
|
||||||
|
logger.info(f'API response replayed from idempotency store for key {idempotency_key} [{call.response_code}]')
|
||||||
for k, v in json.loads(call.response_headers).values():
|
for k, v in json.loads(call.response_headers).values():
|
||||||
r[k] = v
|
r[k] = v
|
||||||
return r
|
return r
|
||||||
|
|||||||
Reference in New Issue
Block a user