|
1 | 1 | """Abstract module for processors"""
|
2 | 2 | import copy
|
| 3 | +import time |
3 | 4 | from abc import abstractmethod
|
| 5 | +from functools import reduce |
4 | 6 | from logging import DEBUG, Logger
|
5 | 7 | from multiprocessing import current_process
|
6 | 8 | from pathlib import Path
|
|
16 | 18 | ProcessingCriticalError,
|
17 | 19 | ProcessingWarning,
|
18 | 20 | )
|
19 |
| -from logprep.processor.processor_strategy import SpecificGenericProcessStrategy |
20 | 21 | from logprep.util import getter
|
21 | 22 | from logprep.util.helper import (
|
22 | 23 | add_and_overwrite,
|
@@ -122,7 +123,6 @@ def update_mean_processing_time_per_event(self, new_sample):
|
122 | 123 |
|
123 | 124 | def __init__(self, name: str, configuration: "Processor.Config", logger: Logger):
|
124 | 125 | super().__init__(name, configuration, logger)
|
125 |
| - self._strategy = SpecificGenericProcessStrategy(self._config.apply_multiple_times) |
126 | 126 | self.metric_labels, specific_tree_labels, generic_tree_labels = self._create_metric_labels()
|
127 | 127 | self._specific_tree = RuleTree(
|
128 | 128 | config_path=self._config.tree_config, metric_labels=specific_tree_labels
|
@@ -192,15 +192,31 @@ def process(self, event: dict):
|
192 | 192 | A dictionary representing a log event.
|
193 | 193 |
|
194 | 194 | """
|
195 |
| - if self._logger.isEnabledFor(DEBUG): # pragma: no cover |
196 |
| - self._logger.debug(f"{self.describe()} processing event {event}") |
197 |
| - self._strategy.process( |
198 |
| - event, |
199 |
| - generic_tree=self._generic_tree, |
200 |
| - specific_tree=self._specific_tree, |
201 |
| - callback=self._apply_rules_wrapper, |
202 |
| - processor_metrics=self.metrics, |
203 |
| - ) |
| 195 | + self._logger.debug(f"{self.describe()} processing event {event}") |
| 196 | + self.metrics.number_of_processed_events += 1 |
| 197 | + self._process_rule_tree(event, self._specific_tree) |
| 198 | + self._process_rule_tree(event, self._generic_tree) |
| 199 | + |
| 200 | + def _process_rule_tree(self, event: dict, tree: "RuleTree"): |
| 201 | + applied_rules = set() |
| 202 | + |
| 203 | + def _process_rule(event, rule): |
| 204 | + begin = time.time() |
| 205 | + self._apply_rules_wrapper(event, rule) |
| 206 | + processing_time = time.time() - begin |
| 207 | + rule.metrics._number_of_matches += 1 |
| 208 | + rule.metrics.update_mean_processing_time(processing_time) |
| 209 | + self.metrics.update_mean_processing_time_per_event(processing_time) |
| 210 | + applied_rules.add(rule) |
| 211 | + return event |
| 212 | + |
| 213 | + if self._config.apply_multiple_times: |
| 214 | + matching_rules = tree.get_matching_rules(event) |
| 215 | + while matching_rules: |
| 216 | + reduce(_process_rule, (event, *matching_rules)) |
| 217 | + matching_rules = set(tree.get_matching_rules(event)).difference(applied_rules) |
| 218 | + else: |
| 219 | + reduce(_process_rule, (event, *tree.get_matching_rules(event))) |
204 | 220 |
|
205 | 221 | def _apply_rules_wrapper(self, event, rule):
|
206 | 222 | try:
|
|
0 commit comments