@@ -65,25 +65,25 @@ def run(argv, out, err, timeout=30*60, hard_timeout=5):
6565
6666
6767def main ():
68-
6968 parser = argparse .ArgumentParser ()
7069 parser .add_argument ('--query-dir' , type = str , default = 'q/scalar' )
7170 parser .add_argument ('--bindings' , type = str , default = 'bindings.json' )
72- parser .add_argument ('--result-dir' , type = str , default = "result-{:%Y%m%dT%H%M%S}" .format (datetime .datetime .now ()))
71+ parser .add_argument ('--result-dir' , type = Path , default = "result-{:%Y%m%dT%H%M%S}" .format (datetime .datetime .now ()))
7372 parser .add_argument ('--timeout' , type = int , default = 30 * 60 )
7473 parser .add_argument ('--perf' , action = 'store_true' )
7574 parser .add_argument ('--arc-path' , type = str , default = '{}/arcadia' .format (os .environ ['HOME' ]))
7675 parser .add_argument ('--include-q' , default = [], action = 'append' )
7776 parser .add_argument ('--exclude-q' , default = [], action = 'append' )
77+ parser .add_argument ('--query-filter' , action = "append" , default = [])
78+
7879 args , argv = parser .parse_known_intermixed_args ()
7980 qdir = args .query_dir
8081 bindings = args .bindings
8182 outdir = args .result_dir
8283 assert len (argv )
8384 querydir = Path (qdir )
84- os .makedirs (outdir + '/' + qdir , exist_ok = True )
85- with open (outdir + '/' + qdir + "/summary.tsv" , "w" ) as outf , \
86- open (outdir + '/' + qdir + "/summary.json" , "w" ) as outj :
85+ with open (outdir / "summary.tsv" , "w" ) as outf , \
86+ open (outdir / "summary.json" , "w" ) as outj :
8787 print (' ' .join (argv + ['-p' , qdir , '--bindings-file' , bindings ]), file = outf )
8888 print (json .dumps ({
8989 'cmdline' : argv ,
@@ -92,8 +92,13 @@ def main():
9292 'version' : 100
9393 }), file = outj )
9494 for query in sorted (querydir .glob ('**/*.sql' ), key = lambda x : tuple (map (lambda y : int (y ) if re .match (RE_DIGITS , y ) else y , re .split (RE_DIGITS , str (x ))))):
95- q = str (query )
96- name = outdir + '/' + q
95+ q = str (query .stem )
96+ # q<num>.sql
97+ num = q [1 :- 4 ]
98+ if args .query_filter != [] and num not in args .query_filter :
99+ continue
100+ print (f"{ q } " , end = "" , flush = True )
101+ name = str (outdir / q )
97102 if len (args .include_q ):
98103 include = False
99104 for r in args .include_q :
@@ -112,6 +117,7 @@ def main():
112117 continue
113118 print (q , end = '\t ' , file = outf )
114119 outname = name + '-result.yson'
120+ print ("." , end = "" , flush = True )
115121 exitcode , rusage , elapsed , iostat = run (
116122 argv + [
117123 '--result-file' , outname ,
@@ -120,7 +126,7 @@ def main():
120126 '--err-file' , name + '-err.txt' ,
121127 '--expr-file' , name + '-expr.txt' ,
122128 '--stat' , name + '-stat.yson' ,
123- '-p' , q
129+ '-p' , str ( query )
124130 ],
125131 name + '-stdout.txt' ,
126132 name + '-stderr.txt' ,
@@ -164,25 +170,27 @@ def main():
164170 }
165171 }), file = outj )
166172 outj .flush ()
173+ print ("." , end = "" , flush = True )
167174 if args .perf :
168175 exitcode , rusage , elapsed , iostat = run (
169- ['{}/ya' . format ( args . arc_path ), 'tool' , ' perf' , 'record' , '-F250' , '-g' , '--call-graph' , 'dwarf' , '-o' , '{}/perf.data' .format (outdir ), '--' ] +
176+ ['/usr/bin/ perf' , 'record' , '-F250' , '-g' , '--call-graph' , 'dwarf' , '-o' , '{}/perf.data' .format (outdir ), '--' ] +
170177 argv + [
171178 '--result-file' , '/dev/null' ,
172179 '--bindings-file' , bindings ,
173180 '--plan-file' , '/dev/null' ,
174181 '--err-file' , '/dev/null' ,
175182 '--expr-file' , '/dev/null' ,
176- '-p' , q
183+ '-p' , str ( query )
177184 ],
178185 name + '-stdout-perf.txt' ,
179186 name + '-stderr-perf.txt' ,
180187 timeout = args .timeout )
181188 os .system ('''
182- {0}/ya tool perf script -i {2}/perf.data --header |
189+ /usr/bin/ perf script -i {2}/perf.data --header |
183190 {0}/contrib/tools/flame-graph/stackcollapse-perf.pl |
184191 {0}/contrib/tools/flame-graph/flamegraph.pl > {1}.svg
185192 ''' .format (args .arc_path , name , outdir ))
193+ print ("." , flush = True )
186194
187195
188196if __name__ == "__main__" :
0 commit comments