Skip to content

Commit 7efa443

Browse files
Merge pull request #103 from dynatrace-oss/PCLOUDS-3547_add_support_for_multiple_filters_with_pipe
PCLOUDS-3547 Rebased from fork
2 parents c3bdcda + d994d6e commit 7efa443

File tree

2 files changed

+49
-8
lines changed

2 files changed

+49
-8
lines changed

logs_ingest/filtering.py

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,19 @@ def _prepare_filters_dict(self) -> Dict:
6565
filters_to_apply.append(log_level_filter)
6666
parsed_filters_to_log.append(filter_name)
6767
if "contains_pattern" in filter_name:
68-
contains_pattern_filter = self._create_contains_pattern_filter(filter_value)
69-
filters_to_apply.append(contains_pattern_filter)
70-
parsed_filters_to_log.append(filter_name)
68+
if isinstance(filter_value, list):
69+
for filter_pattern in filter_value:
70+
contains_pattern_filter = (
71+
self._create_contains_pattern_filter(filter_pattern)
72+
)
73+
filters_to_apply.append(contains_pattern_filter)
74+
parsed_filters_to_log.append(filter_name)
75+
if not isinstance(filter_value, list):
76+
contains_pattern_filter = self._create_contains_pattern_filter(
77+
filter_value
78+
)
79+
filters_to_apply.append(contains_pattern_filter)
80+
parsed_filters_to_log.append(filter_name)
7181
if filters_to_apply:
7282
filters_to_apply_dict[k] = filters_to_apply
7383
logging.info(f"Successfully parsed filters: {parsed_filters_to_log}")
@@ -76,7 +86,21 @@ def _prepare_filters_dict(self) -> Dict:
7686
def _group_filters(self) -> Dict:
7787
filters_dict = {}
7888
for key, filter_name_value in self._filters_tuples:
79-
filters_dict.setdefault(key, {}).update({filter_name_value[0]: filter_name_value[1]})
89+
if "|" in filter_name_value[1]:
90+
filter_patterns = filter_name_value[1].split("|")
91+
if filter_patterns:
92+
filter_patterns = [
93+
f"{pattern.strip()}" for pattern in filter_patterns
94+
]
95+
filters_dict.setdefault(key, {}).update(
96+
{filter_name_value[0]: filter_patterns}
97+
)
98+
continue
99+
100+
filters_dict.setdefault(key, {}).update(
101+
{filter_name_value[0]: filter_name_value[1]}
102+
)
103+
80104
return filters_dict
81105

82106
@staticmethod
@@ -97,7 +121,23 @@ def should_filter_out_record(self, parsed_record: Dict) -> bool:
97121
content = parsed_record.get("content", "")
98122

99123
log_filters = self._get_filters(resource_id, resource_type)
100-
return not all(log_filter(severity, content) for log_filter in log_filters)
124+
125+
filter_patterns = []
126+
127+
for log_filter in log_filters:
128+
if 'contains_pattern' in str(log_filter):
129+
filter_patterns.append(log_filter)
130+
131+
pipe_separated_filters_result = True
132+
133+
if len(filter_patterns) > 1:
134+
log_filters = set(log_filters) - set(filter_patterns)
135+
pipe_separated_filters_result = any(log_filter(severity, str(content)) for log_filter in filter_patterns)
136+
137+
return (not all(log_filter(severity, str(content)) for log_filter in log_filters)
138+
or not pipe_separated_filters_result)
139+
140+
101141

102142
def _get_filters(self, resource_id, resource_type):
103143
filters = self.filters_dict.get(resource_id, [])

logs_ingest/main.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,6 @@ def parse_record(record: Dict, self_monitoring: SelfMonitoring):
157157
if "resourceId" in record:
158158
extract_resource_id_attributes(parsed_record, record["resourceId"])
159159

160-
if log_filter.should_filter_out_record(parsed_record):
161-
return None
162-
163160
metadata_engine.apply(record, parsed_record)
164161
convert_date_format(parsed_record)
165162
category = record.get("category", "").lower()
@@ -173,6 +170,10 @@ def parse_record(record: Dict, self_monitoring: SelfMonitoring):
173170
parsed_record[attribute_key] = string_attribute_value[: attribute_value_length_limit]
174171

175172
content = parsed_record.get("content", None)
173+
174+
if log_filter.should_filter_out_record(parsed_record):
175+
return None
176+
176177
if content:
177178
if not isinstance(content, str):
178179
parsed_record["content"] = json.dumps(parsed_record["content"])

0 commit comments

Comments
 (0)