Skip to content

Commit a8b672d

Browse files
committed
Improve roota render + lucene mapping
1 parent 29a1ecb commit a8b672d

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

uncoder-core/app/translator/platforms/base/lucene/mapping.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,13 @@ def get_suitable_source_mappings(
3636
if index and log_source_signature.is_suitable(index=index):
3737
if source_mapping.fields_mapping.is_suitable(field_names):
3838
suitable_source_mappings.append(source_mapping)
39-
elif source_mapping.fields_mapping.is_suitable(field_names):
40-
suitable_source_mappings.append(source_mapping)
39+
40+
if not suitable_source_mappings:
41+
for source_mapping in self._source_mappings.values():
42+
if source_mapping.source_id == DEFAULT_MAPPING_NAME:
43+
continue
44+
if source_mapping.fields_mapping.is_suitable(field_names):
45+
suitable_source_mappings.append(source_mapping)
4146

4247
if not suitable_source_mappings:
4348
suitable_source_mappings = [self._source_mappings[DEFAULT_MAPPING_NAME]]

uncoder-core/app/translator/platforms/roota/renders/roota.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1616
-----------------------------------------------------------------
1717
"""
18+
import copy
1819
import math
1920
from datetime import timedelta
2021
from typing import Optional
@@ -73,6 +74,15 @@ def __render_timeframe(timeframe: timedelta) -> str:
7374
timeframe_unit = "s"
7475
return f"{timeframe_value}{timeframe_unit}"
7576

77+
@staticmethod
78+
def __normalize_log_source(log_source: dict) -> dict:
79+
prepared_log_source = {}
80+
for log_source_key, value in log_source.items():
81+
if isinstance(value, list):
82+
value = value[0]
83+
prepared_log_source[log_source_key] = value.lower()
84+
return prepared_log_source
85+
7686
def __get_data_for_roota_render(
7787
self, raw_query_container: RawQueryContainer, tokenized_query_container: TokenizedQueryContainer
7888
) -> tuple:
@@ -90,14 +100,15 @@ def __get_data_for_roota_render(
90100
return_only_first_query_ctx_var.set(prev_state_return_only_first_query_ctx_var)
91101
wrap_query_with_meta_info_ctx_var.set(prev_state_wrap_query_with_meta_info_ctx_var)
92102

93-
return rule_query, rule_query_language, tokenized_query_container.meta_info.parsed_logsources
103+
return (rule_query, rule_query_language,
104+
self.__normalize_log_source(log_source=tokenized_query_container.meta_info.parsed_logsources))
94105
rule_query_language = raw_query_container.language.replace("rule", "query")
95106
rule_query = raw_query_container.query
96107
for source_mapping_id in tokenized_query_container.meta_info.source_mapping_ids:
97108
if source_mapping_id == "default":
98109
continue
99110
if logsources := self.__get_logsources_by_source_mapping_id(source_mapping_id=source_mapping_id):
100-
return rule_query, rule_query_language, logsources
111+
return rule_query, rule_query_language, self.__normalize_log_source(log_source=logsources)
101112
return rule_query, rule_query_language, {}
102113

103114
@staticmethod
@@ -114,7 +125,7 @@ def generate(
114125
raw_query_container=raw_query_container, tokenized_query_container=tokenized_query_container
115126
)
116127

117-
rule = ROOTA_RULE_TEMPLATE.copy()
128+
rule = copy.deepcopy(ROOTA_RULE_TEMPLATE)
118129
rule["name"] = tokenized_query_container.meta_info.title or _AUTOGENERATED_TEMPLATE
119130
rule["details"] = tokenized_query_container.meta_info.description or rule["details"]
120131
rule["author"] = tokenized_query_container.meta_info.author or rule["author"]
@@ -139,9 +150,6 @@ def generate(
139150
rule["correlation"]["timeframe"] = self.__render_timeframe(tokenized_query_container.meta_info.timeframe)
140151

141152
if rule_logsources:
142-
for logsource_str, value in rule_logsources.items():
143-
if isinstance(value, list):
144-
value = value[0]
145-
rule["logsource"][logsource_str] = value.lower()
153+
rule["logsources"] = rule_logsources
146154

147155
return yaml.dump(rule, Dumper=IndentedListDumper, default_flow_style=False, sort_keys=False, indent=4)

0 commit comments

Comments
 (0)