@@ -7,6 +7,7 @@ use std::path::PathBuf;
77
88use clap:: Parser ;
99use clap:: value_parser;
10+ use custom_labels:: Labelset ;
1011use duckdb_bench:: DuckClient ;
1112use tokio:: runtime:: Runtime ;
1213use vortex:: metrics:: tracing:: set_global_labels;
@@ -25,6 +26,27 @@ use vortex_bench::runner::SqlBenchmarkRunner;
2526use vortex_bench:: runner:: filter_queries;
2627use vortex_bench:: setup_logging_and_tracing;
2728
29+ fn with_query_labels < T > (
30+ benchmark_name : & str ,
31+ query_idx : usize ,
32+ format : Format ,
33+ f : impl FnOnce ( ) -> T ,
34+ ) -> T {
35+ let labels = vec ! [
36+ ( "format" , format. to_string( ) ) ,
37+ ( "benchmark_name" , benchmark_name. to_owned( ) ) ,
38+ ( "query_idx" , query_idx. to_string( ) ) ,
39+ ] ;
40+ set_global_labels ( labels. clone ( ) ) ;
41+
42+ let mut labelset = Labelset :: clone_from_current ( ) ;
43+ for ( key, value) in labels {
44+ labelset. set ( key, value) ;
45+ }
46+
47+ labelset. enter ( f)
48+ }
49+
2850/// Common arguments shared across benchmarks
2951#[ derive( Parser ) ]
3052struct Args {
@@ -171,17 +193,13 @@ fn main() -> anyhow::Result<()> {
171193 Ok ( ctx)
172194 } ,
173195 |ctx, query_idx, format, query| {
174- set_global_labels ( vec ! [
175- ( "format" , format. to_string( ) ) ,
176- ( "benchmark_name" , benchmark_name. clone( ) ) ,
177- ( "query_idx" , query_idx. to_string( ) ) ,
178- ] ) ;
179-
180- // Make sure to reopen the duckdb connection between iterations
181- if !args. reuse {
182- ctx. reopen ( ) ?;
183- }
184- ctx. execute_query_result ( query)
196+ with_query_labels ( & benchmark_name, query_idx, format, || {
197+ // Make sure to reopen the duckdb connection between iterations
198+ if !args. reuse {
199+ ctx. reopen ( ) ?;
200+ }
201+ ctx. execute_query_result ( query)
202+ } )
185203 } ,
186204 ) ?;
187205
0 commit comments