2020-08-18 13:05:41 -04:00
|
|
|
from contextlib import contextmanager
|
|
|
|
|
2023-11-30 13:36:33 -08:00
|
|
|
from netbox.context import current_request, events_queue
|
|
|
|
from .events import flush_events
|
2020-08-18 13:05:41 -04:00
|
|
|
|
|
|
|
|
|
|
|
@contextmanager
|
2023-11-30 13:36:33 -08:00
|
|
|
def event_tracking(request):
|
2020-08-18 13:05:41 -04:00
|
|
|
"""
|
2023-11-30 13:36:33 -08:00
|
|
|
Queue interesting events in memory while processing a request, then flush that queue for processing by the
|
|
|
|
events pipline before returning the response.
|
2020-08-18 13:05:41 -04:00
|
|
|
|
|
|
|
:param request: WSGIRequest object with a unique `id` set
|
|
|
|
"""
|
2022-11-02 17:40:43 -04:00
|
|
|
current_request.set(request)
|
2023-11-30 13:36:33 -08:00
|
|
|
events_queue.set([])
|
2020-08-18 13:05:41 -04:00
|
|
|
|
|
|
|
yield
|
|
|
|
|
2021-05-28 16:07:27 -04:00
|
|
|
# Flush queued webhooks to RQ
|
2023-11-30 13:36:33 -08:00
|
|
|
flush_events(events_queue.get())
|
2021-11-17 14:26:12 -05:00
|
|
|
|
2022-11-02 17:40:43 -04:00
|
|
|
# Clear context vars
|
|
|
|
current_request.set(None)
|
2023-11-30 13:36:33 -08:00
|
|
|
events_queue.set([])
|