19
19
from typing import Union
20
20
21
21
from app .translator .const import DEFAULT_VALUE_TYPE
22
- from app .translator .core .custom_types .tokens import LogicalOperatorType , OperatorType
22
+ from app .translator .core .custom_types .tokens import LogicalOperatorType
23
23
from app .translator .core .exceptions .core import StrictPlatformException
24
24
from app .translator .core .exceptions .render import BaseRenderException
25
25
from app .translator .core .mapping import LogSourceSignature , SourceMapping
29
29
from app .translator .core .models .parser_output import MetaInfoContainer
30
30
from app .translator .core .models .platform_details import PlatformDetails
31
31
from app .translator .core .render import BaseQueryFieldValue , BaseQueryRender
32
- from app .translator .platforms .logrhythm_axon .const import logrhythm_axon_query_details
32
+ from app .translator .platforms .logrhythm_axon .const import UNMAPPED_FIELD_DEFAULT_NAME , logrhythm_axon_query_details
33
33
from app .translator .platforms .logrhythm_axon .mapping import LogRhythmAxonMappings , logrhythm_axon_mappings
34
34
from app .translator .platforms .microsoft .escape_manager import microsoft_escape_manager
35
35
@@ -90,11 +90,26 @@ def __regex_to_str_list(self, value: Union[int, str]) -> list[list[str]]: # noq
90
90
91
91
return joined_components
92
92
93
+ def __unmapped_regex_field_to_contains_string (self , field : str , value : str ) -> str :
94
+ if self .__is_complex_regex (value ):
95
+ raise LogRhythmRegexRenderException
96
+ values = self .__regex_to_str_list (value )
97
+ return (
98
+ "("
99
+ + self .or_token .join (
100
+ " AND " .join (f'{ field } CONTAINS "{ self .__escape_value (value )} "' for value in value_list )
101
+ for value_list in values
102
+ )
103
+ + ")"
104
+ )
105
+
93
106
@staticmethod
94
107
def __escape_value (value : Union [int , str ]) -> Union [int , str ]:
95
108
return value .replace ("'" , "''" ) if isinstance (value , str ) else value
96
109
97
110
def equal_modifier (self , field : str , value : DEFAULT_VALUE_TYPE ) -> str :
111
+ if field == UNMAPPED_FIELD_DEFAULT_NAME :
112
+ return self .contains_modifier (field , value )
98
113
if isinstance (value , str ):
99
114
return f'{ field } = "{ self .__escape_value (value )} "'
100
115
if isinstance (value , list ):
@@ -104,26 +119,36 @@ def equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
104
119
return f'{ field } = "{ self .apply_value (value )} "'
105
120
106
121
def less_modifier (self , field : str , value : Union [int , str ]) -> str :
122
+ if field == UNMAPPED_FIELD_DEFAULT_NAME :
123
+ return self .contains_modifier (field , value )
107
124
if isinstance (value , int ):
108
125
return f"{ field } < { value } "
109
126
return f"{ field } < '{ self .apply_value (value )} '"
110
127
111
128
def less_or_equal_modifier (self , field : str , value : Union [int , str ]) -> str :
129
+ if field == UNMAPPED_FIELD_DEFAULT_NAME :
130
+ return self .contains_modifier (field , value )
112
131
if isinstance (value , int ):
113
132
return f"{ field } <= { value } "
114
133
return f"{ field } <= { self .apply_value (value )} "
115
134
116
135
def greater_modifier (self , field : str , value : Union [int , str ]) -> str :
136
+ if field == UNMAPPED_FIELD_DEFAULT_NAME :
137
+ return self .contains_modifier (field , value )
117
138
if isinstance (value , int ):
118
139
return f"{ field } > { value } "
119
140
return f"{ field } > { self .apply_value (value )} "
120
141
121
142
def greater_or_equal_modifier (self , field : str , value : Union [int , str ]) -> str :
143
+ if field == UNMAPPED_FIELD_DEFAULT_NAME :
144
+ return self .contains_modifier (field , value )
122
145
if isinstance (value , int ):
123
146
return f"{ field } >= { value } "
124
147
return f"{ field } >= { self .apply_value (value )} "
125
148
126
149
def not_equal_modifier (self , field : str , value : DEFAULT_VALUE_TYPE ) -> str :
150
+ if field == UNMAPPED_FIELD_DEFAULT_NAME :
151
+ return self .contains_modifier (field , value )
127
152
if isinstance (value , list ):
128
153
return f"({ self .or_token .join ([self .not_equal_modifier (field = field , value = v ) for v in value ])} )"
129
154
if isinstance (value , int ):
@@ -133,39 +158,37 @@ def not_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
133
158
def contains_modifier (self , field : str , value : DEFAULT_VALUE_TYPE ) -> str :
134
159
if isinstance (value , list ):
135
160
return f"({ self .or_token .join (self .contains_modifier (field = field , value = v ) for v in value )} )"
136
- if isinstance (value , str ) and self .__is_contain_regex_items (value ):
137
- if self .__is_complex_regex (value ):
138
- raise LogRhythmRegexRenderException
139
- values = self .__regex_to_str_list (value )
140
- return (
141
- "("
142
- + self .or_token .join (
143
- " AND " .join (f'{ field } CONTAINS "{ self .__escape_value (value )} "' for value in value_list )
144
- for value_list in values
145
- )
146
- + ")"
147
- )
148
161
return f'{ field } CONTAINS "{ self .__escape_value (value )} "'
149
162
150
163
def endswith_modifier (self , field : str , value : DEFAULT_VALUE_TYPE ) -> str :
151
164
if isinstance (value , list ):
152
165
return f"({ self .or_token .join (self .endswith_modifier (field = field , value = v ) for v in value )} )"
153
- value = f".*{ self .__escape_value (value )} " if not value .startswith (".*" ) else self .__escape_value (value )
166
+ if isinstance (value , str ) and field == UNMAPPED_FIELD_DEFAULT_NAME :
167
+ return self .contains_modifier (field , value )
168
+ value = f".*{ self .__escape_value (value )} " if not str (value ).startswith (".*" ) else self .__escape_value (value )
154
169
return f'{ field } matches "{ value } $"'
155
170
156
171
def startswith_modifier (self , field : str , value : DEFAULT_VALUE_TYPE ) -> str :
157
172
if isinstance (value , list ):
158
173
return f"({ self .or_token .join (self .startswith_modifier (field = field , value = v ) for v in value )} )"
159
- value = f"{ self .__escape_value (value )} .*" if not value .endswith (".*" ) else self .__escape_value (value )
174
+ if isinstance (value , str ) and field == UNMAPPED_FIELD_DEFAULT_NAME :
175
+ return self .contains_modifier (field , value )
176
+ value = f"{ self .__escape_value (value )} .*" if not str (value ).endswith (".*" ) else self .__escape_value (value )
160
177
return f'{ field } matches "^{ self .__escape_value (value )} "'
161
178
162
- def __regex_modifier (self , field : str , value : DEFAULT_VALUE_TYPE ) -> str :
163
- return f'{ field } matches "{ value } "'
164
-
165
179
def regex_modifier (self , field : str , value : DEFAULT_VALUE_TYPE ) -> str :
180
+ if field == UNMAPPED_FIELD_DEFAULT_NAME and self .__is_contain_regex_items (value ):
181
+ if isinstance (value , str ):
182
+ return self .__unmapped_regex_field_to_contains_string (field , value )
183
+ if isinstance (value , list ):
184
+ return self .or_token .join (
185
+ self .__unmapped_regex_field_to_contains_string (field = field , value = v ) for v in value
186
+ )
166
187
if isinstance (value , list ):
167
- return f"({ self .or_token .join (self .__regex_modifier (field = field , value = v ) for v in value )} )"
168
- return self .__regex_modifier (field , value )
188
+ return f"({ self .or_token .join (self .regex_modifier (field = field , value = v ) for v in value )} )"
189
+ if isinstance (value , str ) and field == UNMAPPED_FIELD_DEFAULT_NAME :
190
+ return self .contains_modifier (field , value )
191
+ return f'{ field } matches "{ value } "'
169
192
170
193
171
194
class LogRhythmAxonQueryRender (BaseQueryRender ):
@@ -193,9 +216,7 @@ def apply_token(self, token: Union[FieldValue, Keyword, Identifier], source_mapp
193
216
except StrictPlatformException :
194
217
try :
195
218
return self .field_value_map .apply_field_value (
196
- field = "general_information.raw_message" ,
197
- operator = Identifier (token_type = OperatorType .CONTAINS ),
198
- value = token .value ,
219
+ field = UNMAPPED_FIELD_DEFAULT_NAME , operator = token .operator , value = token .value
199
220
)
200
221
except LogRhythmRegexRenderException as exc :
201
222
raise LogRhythmRegexRenderException (
0 commit comments