@@ -85,6 +85,7 @@ def performance_metrics(
85
85
if org :
86
86
extra_filters += [{"col" : "org" , "op" : "IN" , "val" : org }]
87
87
88
+ chart_count = 0
88
89
with patch ("clickhouse_connect.common.build_client_name" ) as mock_build_client_name :
89
90
mock_build_client_name .return_value = RUN_ID
90
91
target_dashboards = (
@@ -117,6 +118,7 @@ def performance_metrics(
117
118
result = measure_chart (slice , query_context , fail_on_error )
118
119
if not result :
119
120
continue
121
+ chart_count += 1
120
122
for query in result ["queries" ]:
121
123
# Remove the data from the query to avoid memory issues on large
122
124
# datasets.
@@ -129,9 +131,7 @@ def performance_metrics(
129
131
logger .warning ("No target charts found!" )
130
132
return report
131
133
132
- logger .info ("Waiting for clickhouse log..." )
133
- time .sleep (20 )
134
- get_query_log_from_clickhouse (report , query_contexts , print_sql , fail_on_error )
134
+ get_query_log_from_clickhouse (report , query_contexts , print_sql , fail_on_error , chart_count )
135
135
return report
136
136
137
137
@@ -187,7 +187,7 @@ def measure_chart(slice, query_context_dict, fail_on_error):
187
187
"""
188
188
Measure the performance of a chart and return the results.
189
189
"""
190
- logger .info (f"Fetching slice data: { slice } " )
190
+ logger .info (f"Fetching slice data: { slice } { slice . uuid } " )
191
191
192
192
g .user = security_manager .find_user (username = "{{SUPERSET_ADMIN_USERNAME}}" )
193
193
query_context = ChartDataQueryContextSchema ().load (query_context_dict )
@@ -200,6 +200,7 @@ def measure_chart(slice, query_context_dict, fail_on_error):
200
200
end_time = datetime .now ()
201
201
result ["time_elapsed" ] = (end_time - start_time ).total_seconds ()
202
202
result ["slice" ] = slice
203
+ result ["uuid" ] = slice .uuid
203
204
for query in result ["queries" ]:
204
205
if "error" in query and query ["error" ]:
205
206
raise query ["error" ]
@@ -212,7 +213,7 @@ def measure_chart(slice, query_context_dict, fail_on_error):
212
213
return result
213
214
214
215
215
- def get_query_log_from_clickhouse (report , query_contexts , print_sql , fail_on_error ):
216
+ def get_query_log_from_clickhouse (report , query_contexts , print_sql , fail_on_error , chart_count ):
216
217
"""
217
218
Get the query log from clickhouse and print the results.
218
219
"""
@@ -228,6 +229,18 @@ def get_query_log_from_clickhouse(report, query_contexts, print_sql, fail_on_err
228
229
229
230
ch_chart_result = measure_chart (slice , query_context , fail_on_error )
230
231
232
+ # Run CH query until results for all slices are returned
233
+ ch_count = 6
234
+ while ch_count > 0 :
235
+ missing_rows = chart_count - ch_chart_result ["queries" ][0 ]["rowcount" ]
236
+ if missing_rows > 0 :
237
+ logger .info (f"Waiting for { missing_rows } clickhouse logs..." )
238
+ time .sleep (5 )
239
+ ch_chart_result = measure_chart (slice , query_context , fail_on_error )
240
+ ch_count -= 1
241
+ else :
242
+ break
243
+
231
244
clickhouse_queries = {}
232
245
for query in ch_chart_result ["queries" ]:
233
246
for row in query ["data" ]:
@@ -237,7 +250,7 @@ def get_query_log_from_clickhouse(report, query_contexts, print_sql, fail_on_err
237
250
for k , chart_result in enumerate (report ):
238
251
for query in chart_result ["queries" ]:
239
252
parsed_sql = (
240
- str (sqlparse .parse (query ["query" ])[0 ]).replace (";" , "" )
253
+ str (sqlparse .parse (query ["query" ]. strip () )[0 ]).replace (";" , "" )
241
254
+ "\n FORMAT Native"
242
255
)
243
256
chart_result ["sql" ] = parsed_sql
@@ -255,7 +268,7 @@ def get_query_log_from_clickhouse(report, query_contexts, print_sql, fail_on_err
255
268
report_str += report_format .format (
256
269
i = (k + 1 ),
257
270
dashboard = chart_result ["dashboard" ],
258
- slice = chart_result ["slice" ],
271
+ slice = f' { chart_result ["slice" ]} { chart_result [ "uuid" ] } ' ,
259
272
superset_time = chart_result ["time_elapsed" ],
260
273
)
261
274
for query in chart_result ["queries" ]:
0 commit comments