From 7ce9324f1df90d2350d0aa02a2b8324d1b312985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rajmund=20Hru=C5=A1ka?= <rajmund.hruska@cesnet.cz> Date: Fri, 4 Mar 2022 22:10:04 +0100 Subject: [PATCH] Fix: Discard event if any filtering rule is matched. (Redmine issue: #6227) --- lib/mentat/reports/event.py | 12 +++++++++--- lib/mentat/reports/test_event.py | 9 ++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/mentat/reports/event.py b/lib/mentat/reports/event.py index b57751500..3cf9f78d9 100644 --- a/lib/mentat/reports/event.py +++ b/lib/mentat/reports/event.py @@ -488,7 +488,7 @@ class EventReporter(BaseReporter): filter_list = self.settings_dict[group].setup_filters(self.filter_parser, self.filter_compiler) match = self.filter_event(filter_list, event) if match: - self.logger.debug("Event matched filtering rule '%s' of group %s", match, group) + self.logger.debug("Event matched filtering rule '%s' of group %s.", match, group) fltlog[match] = fltlog.get(match, 0) + 1 else: filtered_groups.append(group) @@ -527,9 +527,15 @@ class EventReporter(BaseReporter): if main_group not in groups: return [], [], fltlog - groups, fltlog = self._filter_groups(groups, event, fltlog) + filtered_groups, fltlog = self._filter_groups(groups, event, fltlog) + + # If any filtering rule of at least one of the groups was matched then this event shall not be reported to anyone. + if filtered_groups != groups: + self.logger.debug("Discarding event with ID '%s' from reports.", event['ID']) + return [], [], fltlog + fallback_groups, fltlog = self._filter_groups(fallback_groups, event, fltlog) - return groups, fallback_groups, fltlog + return filtered_groups, fallback_groups, fltlog def filter_events(self, main_group, events): """ diff --git a/lib/mentat/reports/test_event.py b/lib/mentat/reports/test_event.py index 5980410e4..2e71b35b5 100644 --- a/lib/mentat/reports/test_event.py +++ b/lib/mentat/reports/test_event.py @@ -308,10 +308,13 @@ class TestMentatReportsEvent(unittest.TestCase): for events in aggr.values(): self.assertEqual(len(events), 2) self.reporter.logger.assert_has_calls([ - call.debug("Event matched filtering rule '%s' of group %s", 'FLT1', 'abuse@cesnet.cz'), + call.debug("Event matched filtering rule '%s' of group %s.", 'FLT1', 'abuse@cesnet.cz'), + call.debug("Discarding event with ID '%s' from reports.", 'msg01'), call.debug('Event matched filtering rules, all sources filtered'), - call.debug("Event matched filtering rule '%s' of group %s", 'FLT3', 'abuse@cesnet.cz'), - call.debug("Event matched filtering rule '%s' of group %s", 'FLT2', 'abuse@cesnet.cz') + call.debug("Event matched filtering rule '%s' of group %s.", 'FLT3', 'abuse@cesnet.cz'), + call.debug("Discarding event with ID '%s' from reports.", 'msg02'), + call.debug("Event matched filtering rule '%s' of group %s.", 'FLT2', 'abuse@cesnet.cz'), + call.debug("Discarding event with ID '%s' from reports.", 'msg02') ]) self.sqlstorage.session.commit() -- GitLab