|
28 | 28 | .. automodule:: logprep.processor.pre_detector.rule |
29 | 29 | """ |
30 | 30 |
|
| 31 | +import typing |
31 | 32 | from functools import cached_property |
32 | 33 | from uuid import uuid4 |
33 | 34 |
|
|
37 | 38 | from logprep.processor.base.exceptions import ProcessingWarning |
38 | 39 | from logprep.processor.pre_detector.ip_alerter import IPAlerter |
39 | 40 | from logprep.processor.pre_detector.rule import PreDetectorRule |
40 | | -from logprep.util.helper import add_fields_to, get_dotted_field_value |
| 41 | +from logprep.util.helper import ( |
| 42 | + FieldValue, |
| 43 | + add_fields_to, |
| 44 | + copy_fields_to_event, |
| 45 | + get_dotted_field_value, |
| 46 | +) |
41 | 47 | from logprep.util.time import TimeParser, TimeParserException |
42 | 48 |
|
43 | 49 |
|
@@ -101,19 +107,19 @@ class Config(Processor.Config): |
101 | 107 | rule_class = PreDetectorRule |
102 | 108 |
|
103 | 109 | @cached_property |
104 | | - def _ip_alerter(self): |
| 110 | + def _ip_alerter(self) -> IPAlerter: |
105 | 111 | return IPAlerter(self._config.alert_ip_list_path) |
106 | 112 |
|
107 | | - def normalize_timestamp(self, rule: PreDetectorRule, timestamp: str) -> str: |
| 113 | + def normalize_timestamp(self, rule: PreDetectorRule, timestamp: FieldValue) -> str: |
108 | 114 | """method for normalizing the timestamp""" |
109 | 115 | try: |
110 | 116 | parsed_datetime = TimeParser.parse_datetime( |
111 | | - timestamp, rule.source_format, rule.source_timezone |
| 117 | + typing.cast(str, timestamp), rule.source_format, rule.source_timezone |
112 | 118 | ) |
113 | 119 | return ( |
114 | 120 | parsed_datetime.astimezone(rule.target_timezone).isoformat().replace("+00:00", "Z") |
115 | 121 | ) |
116 | | - except TimeParserException as error: |
| 122 | + except (TimeParserException, TypeError) as error: |
117 | 123 | raise ProcessingWarning( |
118 | 124 | "Could not parse timestamp", |
119 | 125 | rule, |
@@ -143,16 +149,19 @@ def _get_detection_result(self, event: dict, rule: PreDetectorRule): |
143 | 149 |
|
144 | 150 | @staticmethod |
145 | 151 | def _generate_detection_result( |
146 | | - pre_detection_id: str, event: dict, rule: PreDetectorRule |
| 152 | + pre_detection_id: FieldValue, event: dict, rule: PreDetectorRule |
147 | 153 | ) -> dict: |
148 | | - detection_result = rule.detection_data |
149 | | - detection_result.update( |
150 | | - { |
151 | | - "rule_filter": rule.filter_str, |
152 | | - "description": rule.description, |
153 | | - "pre_detection_id": pre_detection_id, |
154 | | - } |
| 154 | + detection_result = { |
| 155 | + **rule.detection_data, |
| 156 | + "rule_filter": rule.filter_str, |
| 157 | + "description": rule.description, |
| 158 | + "pre_detection_id": pre_detection_id, |
| 159 | + } |
| 160 | + copy_fields_to_event( |
| 161 | + target_event=detection_result, |
| 162 | + source_event=event, |
| 163 | + dotted_field_names=rule.copy_fields_to_detection_event, |
| 164 | + rule=rule, |
| 165 | + skip_missing=True, |
155 | 166 | ) |
156 | | - if host_name := get_dotted_field_value(event, "host.name"): |
157 | | - detection_result.update({"host": {"name": host_name}}) |
158 | 167 | return detection_result |
0 commit comments