1414QUERY_LOOKBACK_DAYS = 7
1515MAX_QUERY_SIZE = 3000
1616
17+
1718def query_regression_data (project_name ):
18- """
19- Query regression data from OpenSearch database.
20- Returns data where b_is_regression is True.
21- """
19+ """Query regression data from OpenSearch database."""
2220 last_days = QUERY_LOOKBACK_DAYS
2321
2422 must_clauses = [
25- {
26- "term" : {
27- "b_is_valid" : True
28- }
29- },
30- {
31- "term" : {
32- "b_is_post_merge" : True
33- }
34- },
35- {
36- "term" : {
37- "b_is_regression" : True
38- }
39- },
23+ {"term" : {"b_is_valid" : True }},
24+ {"term" : {"b_is_post_merge" : True }},
25+ {"term" : {"b_is_regression" : True }},
4026 {
4127 "range" : {
4228 "ts_created" : {
43- "gte" :
44- int (time .time () - 24 * 3600 * last_days ) // (24 * 3600 ) *
45- 24 * 3600 * 1000 ,
29+ "gte" : int (time .time () - 24 * 3600 * last_days )
30+ // (24 * 3600 )
31+ * 24
32+ * 3600
33+ * 1000 ,
4634 }
4735 }
4836 },
4937 ]
5038
5139 json_data = {
5240 "query" : {
53- "bool" : {
54- "must" : must_clauses
55- },
41+ "bool" : {"must" : must_clauses },
5642 },
5743 "size" : MAX_QUERY_SIZE ,
5844 }
@@ -62,38 +48,30 @@ def query_regression_data(project_name):
6248 try :
6349 res = OpenSearchDB .queryFromOpenSearchDB (json_data , project_name )
6450 if res is None :
65- print (
66- f"Failed to query from { project_name } , returned no response" )
51+ print (f"Failed to query from { project_name } , returned no response" )
6752 return None
6853 else :
6954 payload = res .json ().get ("hits" , {}).get ("hits" , [])
7055 if len (payload ) == 0 :
71- print (
72- f"No regression data found in { project_name } , returned empty list"
73- )
56+ print (f"No regression data found in { project_name } , returned empty list" )
7457 return []
7558 for hit in payload :
7659 data_dict = hit .get ("_source" , {})
7760 data_dict ["_id" ] = hit .get ("_id" , "" )
7861 if data_dict ["_id" ] == "" :
79- print (
80- f"Failed to query from { project_name } , returned data with no _id"
81- )
62+ print (f"Failed to query from { project_name } , returned data with no _id" )
8263 return None
8364 data_list .append (data_dict )
84- print (
85- f"Successfully queried from { project_name } , queried { len (data_list )} entries"
86- )
65+ print (f"Successfully queried from { project_name } , queried { len (data_list )} entries" )
8766 return data_list
8867 except Exception as e :
8968 print (f"Failed to query from { project_name } , returned error: { e } " )
9069 return None
9170
9271
9372def get_regression_data_by_job_id (data_list , query_job_number ):
94- """
95- Categorize regression data by s_job_id.
96- Returns a dict with job_id as key and list of regression data as value.
73+ """Returns a dict with job_id as key and list of regression data as value.
74+
9775 Only returns the latest query_job_number jobs.
9876 """
9977 if data_list is None or len (data_list ) == 0 :
@@ -111,14 +89,10 @@ def get_regression_data_by_job_id(data_list, query_job_number):
11189
11290 # Sort job_ids by the latest ts_created in each group (descending)
11391 def get_latest_timestamp (job_id ):
114- timestamps = [
115- d .get ("ts_created" , 0 ) for d in job_data_dict [job_id ]
116- ]
92+ timestamps = [d .get ("ts_created" , 0 ) for d in job_data_dict [job_id ]]
11793 return max (timestamps ) if timestamps else 0
11894
119- sorted_job_ids = sorted (job_data_dict .keys (),
120- key = get_latest_timestamp ,
121- reverse = True )
95+ sorted_job_ids = sorted (job_data_dict .keys (), key = get_latest_timestamp , reverse = True )
12296
12397 # Only keep the latest query_job_number jobs
12498 latest_job_ids = sorted_job_ids [:query_job_number ]
@@ -131,8 +105,8 @@ def get_latest_timestamp(job_id):
131105
132106
133107def send_regression_message (regression_dict , channel_id , bot_token ):
134- """
135- Organize regression data into message format and send to Slack channel(s).
108+ """Organize regression data into message format and send to Slack channel(s).
109+
136110 channel_id can be a single ID or multiple IDs separated by commas.
137111 """
138112 if not regression_dict :
@@ -146,8 +120,7 @@ def send_regression_message(regression_dict, channel_id, bot_token):
146120 job_header = f"*LLM/main/L0_PostMerge/{ job_id } :*\n "
147121 msg_parts .append (job_header )
148122
149- sorted_data_list = sorted (data_list ,
150- key = lambda x : x .get ("s_test_case_name" , "" ))
123+ sorted_data_list = sorted (data_list , key = lambda x : x .get ("s_test_case_name" , "" ))
151124 for idx , data in enumerate (sorted_data_list , start = 1 ):
152125 test_case_name = data .get ("s_test_case_name" , "N/A" )
153126 regression_info = data .get ("s_regression_info" , "N/A" )
@@ -169,9 +142,7 @@ def send_regression_message(regression_dict, channel_id, bot_token):
169142
170143
171144def send_message (msg , channel_id , bot_token ):
172- """
173- Send message to Slack channel using slack_sdk.
174- """
145+ """Send message to Slack channel using slack_sdk."""
175146 try :
176147 client = WebClient (token = bot_token )
177148
@@ -196,28 +167,19 @@ def send_message(msg, channel_id, bot_token):
196167
197168
198169def main ():
199- parser = argparse .ArgumentParser (
200- description = "Perf Sanity Triage Script" )
201- parser .add_argument ("--project_name" ,
202- type = str ,
203- required = True ,
204- help = "OpenSearch project name" )
205- parser .add_argument ("--operation" ,
206- type = str ,
207- required = True ,
208- help = "Operation to perform" )
209- parser .add_argument ("--channel_id" ,
210- type = str ,
211- default = "" ,
212- help = "Slack channel ID(s), comma-separated for multiple channels" )
213- parser .add_argument ("--bot_token" ,
214- type = str ,
215- default = "" ,
216- help = "Slack bot token" )
217- parser .add_argument ("--query_job_number" ,
218- type = int ,
219- default = 1 ,
220- help = "Number of latest jobs to query" )
170+ parser = argparse .ArgumentParser (description = "Perf Sanity Triage Script" )
171+ parser .add_argument ("--project_name" , type = str , required = True , help = "OpenSearch project name" )
172+ parser .add_argument ("--operation" , type = str , required = True , help = "Operation to perform" )
173+ parser .add_argument (
174+ "--channel_id" ,
175+ type = str ,
176+ default = "" ,
177+ help = "Slack channel ID(s), comma-separated for multiple channels" ,
178+ )
179+ parser .add_argument ("--bot_token" , type = str , default = "" , help = "Slack bot token" )
180+ parser .add_argument (
181+ "--query_job_number" , type = int , default = 1 , help = "Number of latest jobs to query"
182+ )
221183
222184 args = parser .parse_args ()
223185
@@ -233,11 +195,9 @@ def main():
233195 print ("Failed to query regression data" )
234196 return
235197
236- regression_dict = get_regression_data_by_job_id (data_list ,
237- args .query_job_number )
198+ regression_dict = get_regression_data_by_job_id (data_list , args .query_job_number )
238199
239- send_regression_message (regression_dict , args .channel_id ,
240- args .bot_token )
200+ send_regression_message (regression_dict , args .channel_id , args .bot_token )
241201 else :
242202 print (f"Unknown operation: { args .operation } " )
243203
0 commit comments