@@ -104,8 +104,10 @@ def pattern_search(self):
104104 }
105105 }
106106 """
107-
108- result = self ._multi_query ()
107+ if self ._show_new_pattern :
108+ result = self ._new_class_multi_query ()
109+ else :
110+ result = self ._multi_query ()
109111 pattern_aggs = result .get ("pattern_aggs" , [])
110112 year_on_year_result = result .get ("year_on_year_result" , {})
111113 new_class = result .get ("new_class" , set ())
@@ -226,8 +228,6 @@ def pattern_search(self):
226228 "strategy_enabled" : strategy_enabled ,
227229 }
228230 )
229- if self ._show_new_pattern :
230- result = map_if (result , if_func = lambda x : x ["is_new_class" ])
231231 result = self ._get_remark_and_owner (result )
232232 return result
233233
@@ -251,6 +251,44 @@ def _get_remark_and_owner(self, result):
251251 result = [pattern for pattern in result if pattern ["owners" ] and set (self ._owners ) & set (pattern ["owners" ])]
252252 return result
253253
254+ def _new_class_multi_query (self ):
255+ new_class_query_result = self ._get_new_class ()
256+ new_class_signature_list = [
257+ new_class_tuple [0 ]
258+ for new_class_tuple in new_class_query_result
259+ if new_class_tuple and len (new_class_tuple ) > 0
260+ ]
261+
262+ if not new_class_signature_list :
263+ return {"pattern_aggs" : [], "year_on_year_result" : {}, "new_class" : set ()}
264+
265+ # 添加新类日志数据指纹 ID 列表作为条件查询的参数
266+ new_class_signature_query_condition = {
267+ "field" : self .pattern_aggs_field ,
268+ "operator" : "is one of" ,
269+ "value" : new_class_signature_list ,
270+ "condition" : "and" ,
271+ }
272+
273+ copy_query = copy .deepcopy (self ._query )
274+ copy_query .setdefault ("addition" , []).append (new_class_signature_query_condition )
275+
276+ multi_execute_func = MultiExecuteFunc ()
277+ multi_execute_func .append (
278+ "pattern_aggs" ,
279+ lambda p : self ._get_pattern_aggs_result (p ["index_set_id" ], p ["query" ]),
280+ {"index_set_id" : self ._index_set_id , "query" : copy_query },
281+ )
282+ multi_execute_func .append (
283+ "year_on_year_result" , lambda p : self ._get_year_on_year_aggs_result (p ["query" ]), {"query" : copy_query }
284+ )
285+
286+ multi_result = multi_execute_func .run ()
287+
288+ multi_result ["new_class" ] = new_class_query_result
289+
290+ return multi_result
291+
254292 def _multi_query (self ):
255293 multi_execute_func = MultiExecuteFunc ()
256294 multi_execute_func .append (
@@ -278,12 +316,15 @@ def _build_aggs_group(self):
278316 aggs_group = aggs_group ["sub_fields" ]
279317 return aggs_group_reuslt
280318
281- def _get_year_on_year_aggs_result (self ) -> dict :
319+ def _get_year_on_year_aggs_result (self , query = None ) -> dict :
282320 if self ._year_on_year_hour == MIN_COUNT :
283321 return {}
284- new_query = copy .deepcopy (self ._query )
322+ if query :
323+ new_query = copy .deepcopy (query )
324+ else :
325+ new_query = copy .deepcopy (self ._query )
285326 start_time , end_time = generate_time_range_shift (
286- self . _query ["start_time" ], self . _query ["end_time" ], self ._year_on_year_hour * HOUR_MINUTES
327+ new_query ["start_time" ], new_query ["end_time" ], self ._year_on_year_hour * HOUR_MINUTES
287328 )
288329 new_query ["start_time" ] = start_time .strftime ("%Y-%m-%d %H:%M:%S" )
289330 new_query ["end_time" ] = end_time .strftime ("%Y-%m-%d %H:%M:%S" )
0 commit comments