Skip to content

Commit a37b1f5

Browse files
authored
fix: pattern search 接口 size 参数不符合预期 问题 --bug=152884849 (#9424)
1 parent b019b5e commit a37b1f5

File tree

2 files changed

+182
-176
lines changed

2 files changed

+182
-176
lines changed

bklog/apps/log_clustering/handlers/pattern.py

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)