36 def __init__(self, options, readoracle=False, loglevel=1, html="AUTO", origQuery="", datapath='data', parsedstring=""):
41 self.
config(options, readoracle, loglevel, html, origQuery, datapath, parsedstring)
43 with timer(
'run all'):
46 with timer(
'evaluate all'):
47 (dic, dicsum, xmlhtmlstr, roothtmlstr) = self.
evaluate(runlist)
49 with timer(
'output all'):
50 self.
output(runlist, dic, dicsum, xmlhtmlstr, roothtmlstr)
52 with timer(
'finalize'):
55 from CoolRunQuery.utils.AtlRunQueryTimer
import TimerStats
as TS
61 def config(self, options, readoracle, loglevel, html, origQuery, datapath, parsedstring):
65 QC.datapath = datapath
82 os.makedirs(QC.datapath, exist_ok =
True)
83 print(
"Using output directory: %s" % QC.datapath)
84 except (PermissionError, FileExistsError)
as err:
85 print(
"Could not create data output directory: %s" % QC.datapath)
86 print(
"Reason: %s" % err)
87 print(
"Will write to local directory")
110 self.
html = runsOnServer()
116 raise RuntimeError (
"Unknown argument for option 'html': %s" % html)
117 Run.writehtml = self.
html
124 self.
prodgrl =
not runsOnServer()
133 Selector.setCondDBMC()
144 nemo_dir =
'/afs/cern.ch/user/a/atlcond/scratch0/nemo/prod/web/'
146 f = open( nemo_dir +
'calibruns.txt' )
150 Run.PromptCalibRuns.append( int(line.strip()) )
155 fname = os.listdir( nemo_dir +
'tasks' )
157 for taskname
in fname:
158 m = re.match(
r'.*(task_(\d+)_\d+.txt)',taskname)
161 fname, runnr = m.groups()
162 Run.NemoTasks[int(runnr)] = fname
163 except IOError
as err:
165 print (
"Because of this I can't mark runs that are currently in the calibration loop")
168 if 'cosmics' in options.show:
170 elif 'heavyions' in options.show:
171 self.
dqsumgrl =
"PHYS_HeavyIonP_All_Good"
175 self.
dqsumgrl =
'PHYS_StandardGRL_All_Good_25ns'
181 self.
dbbtag = (
"HEAD",
"HEAD")
186 from CoolRunQuery.AtlRunQuerySFO
import GetSFO_lastNruns
187 sfoconnection = coolDbConn.GetSFODBConnection()
188 sfocursor = sfoconnection.cursor()
189 retlist = GetSFO_lastNruns( sfocursor, 1 )
190 if 'OPENED' in retlist[0][1]:
191 Run.runnropen = retlist[0][0]
196 for idx
in range(len(runlist)):
197 rrange = runlist[idx]
198 if 'last' not in rrange:
200 rrange = rrange.replace(
'last',
'')
203 retlist = GetSFO_lastNruns( sfocursor, 1.1*self.
maxNumOfRuns )
204 runlist[idx] =
'%i+' % (retlist[-1][0])
210 from CoolRunQuery.utils.AtlRunQueryUtils
import get_runs_last_dt
213 runlist = [
'%i+' % rlist[-1]]
if (len(rlist)>0)
else [
'99999999+']
217 from CoolRunQuery.utils.AtlRunQueryUtils
import timeStringToSecondsUTC,secondsToTimeStringUTC,get_run_range2,GetTimeRanges
219 timeranges,timerangesHR = GetTimeRanges(timelist, intRepFnc=timeStringToSecondsUTC, maxval=time())
220 timerangesAsString = [ list(
map(secondsToTimeStringUTC, tr))
for tr
in timeranges ]
221 runranges = [ (
"%s-%s" % get_run_range2(tr[0],tr[1]) )
for tr
in timerangesAsString]
222 runlist = [
','.join(runranges)]
226 rtSel = RunTimeSelector(name =
'runtime', runlist = runlist)
229 runlist = rtSel.select()
241 from CoolRunQuery.AtlRunQuerySelectorWorker
import SelectorWorker
250 SelectorWorker.setApplySelection()
253 SelectorWorker.setShowOutput()
255 SelectorWorker.getRetrieveSelector(
'trigkey',
'TrigKeySelector')
258 for s
in SelectorWorker.getOrderedSelectorList():
260 if hasattr(s,
'initialize'):
261 with timer(
"initializing selector '%s'" % s.name):
266 for s
in SelectorWorker.selectors():
267 with timer(
"run selector '%s'" % s.name):
269 runlist = s.select(runlist)
271 with timer(
"run AfterQuery for selector '%s'" % s.name):
272 s.runAfterQuery(runlist)
279 print (
'SELOUT Selecting the %i most recent runs' % self.
maxNumOfRuns)
289 with timer(
'CreateResultDict'):
290 from CoolRunQuery.output.AtlRunQuerySave
import CreateResultDict
291 dic, dicsum = CreateResultDict( runlist )
296 with timer(
'CreateXMLFile'):
297 print (
"Producing XML file")
298 from CoolRunQuery.output.AtlRunQueryXML
import CreateXMLFile
299 from CoolRunQuery.AtlRunQueryVersion
import SvnVersion
304 print (
"Creation of GRL disabled")
306 if self.
dictroot and len(runlist) > 0:
307 with timer(
'CreateRootFile'):
309 from CoolRunQuery.output.AtlRunQueryRoot
import CreateRootFile
310 rootfilename, roothtmlstr = CreateRootFile( dic )
313 print (
"Creation of root file disabled")
315 return (dic, dicsum, xmlhtmlstr, roothtmlstr)
318 def output(self, runlist, dic, dicsum, xmlhtmlstr, roothtmlstr):
322 with timer(
'GetOKS link info'):
323 from CoolRunQuery.AtlRunQuerySFO
import SetOKSLinks
327 from CoolRunQuery.html.AtlRunQueryHTML
import ResultPageMaker
329 pageinfo = {
'datapath' : QC.datapath,
341 'roothtmlstr' : roothtmlstr,
343 'xmlhtmlstr' : xmlhtmlstr,
347 with timer(
"run ResultPageMaker makePage"):
348 ResultPageMaker.makePage(pageinfo)
353 print (
'---------------------------------------------------------------------')
359 from CoolRunQuery.utils.AtlRunQueryUtils
import addKommaToNumber, filesize
361 for data_key, summary
in dicsum.items():
362 if data_key.Type==DataKey.STREAM:
363 key = data_key.ResultKey.replace(
'STR:',
'')
364 val =
'%s (%s)' % ( addKommaToNumber(summary[0]), filesize(summary[1]) )
366 key = data_key.ResultKey
367 val = addKommaToNumber(summary)
368 print (
'%20s : %s' % (key,val))
370 print (
"%20s : %g sec" % (
'Total execution time',duration))
371 print (
'---------------------------------------------------------------------')