From 00dc9c464b269effa37cb10acbf0a0386b0b6fce Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 18 Jul 2024 16:41:23 -0400 Subject: [PATCH] Simplify event queue handling logic --- netbox/extras/events.py | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/netbox/extras/events.py b/netbox/extras/events.py index 155146426..de6a88c1b 100644 --- a/netbox/extras/events.py +++ b/netbox/extras/events.py @@ -1,3 +1,4 @@ +from collections import defaultdict import logging from django.conf import settings @@ -152,35 +153,20 @@ def process_event_queue(events): """ Flush a list of object representation to RQ for EventRule processing. """ - events_cache = { - 'type_create': {}, - 'type_update': {}, - 'type_delete': {}, - } - event_actions = { - # TODO: Add EventRule support for dynamically registered event types - OBJECT_CREATED: 'type_create', - OBJECT_UPDATED: 'type_update', - OBJECT_DELETED: 'type_delete', - JOB_STARTED: 'type_job_start', - JOB_COMPLETED: 'type_job_end', - # Map failed & errored jobs to type_job_end - JOB_FAILED: 'type_job_end', - JOB_ERRORED: 'type_job_end', - } + events_cache = defaultdict(dict) for event in events: - action_flag = event_actions[event['event_type']] + event_type = event['event_type'] object_type = event['object_type'] # Cache applicable Event Rules - if object_type not in events_cache[action_flag]: - events_cache[action_flag][object_type] = EventRule.objects.filter( + if object_type not in events_cache[event_type]: + events_cache[event_type][object_type] = EventRule.objects.filter( event_types__contains=[event['event_type']], object_types=object_type, enabled=True ) - event_rules = events_cache[action_flag][object_type] + event_rules = events_cache[event_type][object_type] process_event_rules( event_rules=event_rules,