ATLAS Offline Software
Loading...
Searching...
No Matches
python.utils.AtlRunQueryTriggerUtils Namespace Reference

Classes

class  TriggerChain

Functions

 isTriggerRun2 (run_number=None, smk=None, isRun2=None)
 triggerDBAlias (run_number=None, smk=None, lhcRun=None)
 FindFile (filename, pathlist, access)
 _getFileLocalOrPath (filename, pathenv)
 _getConnectionServicesForAlias (alias)
 _readAuthentication ()
 _getConnectionParameters (connection)
 interpretConnection (connection, debug=False, resolveAlias=True)
 _get_sqlite_cursor (filename)
 _get_oracle_cursor (tns, user, passwd="")
 _get_mysql_cursor (host, db, user, passwd="")
 getTriggerDBCursorForAlias (dbAlias)
 getTriggerDBCursor (run_number=None, smk=None, lhcRun=None)
 getUsedTables (output, condition, schemaname, tables)
 executeQuery (cursor, output, condition, schemaname, tables, bindvars=())
 getL1PskNames (psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
 getHLTPskNames (psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
 getSmkNames (smks, dbAlias)
 getHLTMenu (smk)
 getL1Menu (smk)
 getL1Prescales (l1prescalekey, run_number)
 getHLTPrescales (hltprescalekey, run_number)
 getRandom (smk, lhcRun)

Variables

dict __cursor_schema = {}
 log = logging.getLogger( __name__ )
 authDict = None

Function Documentation

◆ _get_mysql_cursor()

python.utils.AtlRunQueryTriggerUtils._get_mysql_cursor ( host,
db,
user,
passwd = "" )
protected

Definition at line 343 of file AtlRunQueryTriggerUtils.py.

343def _get_mysql_cursor (host, db, user, passwd=""):
344 if passwd=="":
345 from getpass import getpass
346 passwd = getpass("[MySQL] `%s' database password for %s@%s: " % (db, user, host))
347 try:
348 from MySQLdb import connect
349 except ImportError:
350 raise RuntimeError ("ERROR: Can't import MySQLdb")
351 connection = connect(host=host, user=user, passwd=passwd, db=db, connect_timeout=10)
352 return connection.cursor()
353
354

◆ _get_oracle_cursor()

python.utils.AtlRunQueryTriggerUtils._get_oracle_cursor ( tns,
user,
passwd = "" )
protected

Definition at line 331 of file AtlRunQueryTriggerUtils.py.

331def _get_oracle_cursor (tns, user, passwd=""):
332 if passwd=="":
333 from getpass import getpass
334 passwd = getpass("[Oracle] database password for %s@%s: " % (user, tns))
335 try:
336 from cx_Oracle import connect
337 except ImportError:
338 raise RuntimeError ("ERROR: Can't import cx_Oracle?")
339 connection = connect (user, passwd, tns, threaded=True)
340 return connection.cursor()
341
342

◆ _get_sqlite_cursor()

python.utils.AtlRunQueryTriggerUtils._get_sqlite_cursor ( filename)
protected

Definition at line 322 of file AtlRunQueryTriggerUtils.py.

322def _get_sqlite_cursor (filename):
323 try:
324 import sqlite3
325 except ImportError:
326 raise RuntimeError ("ERROR: Can't import sqlite3?")
327 os.lstat(filename)
328 connection = sqlite3.connect(filename)
329 return connection.cursor()
330

◆ _getConnectionParameters()

python.utils.AtlRunQueryTriggerUtils._getConnectionParameters ( connection)
protected

Definition at line 170 of file AtlRunQueryTriggerUtils.py.

170def _getConnectionParameters(connection):
171 log = logging.getLogger( "TrigConfigSvcUtils.py" )
172 connection = str(connection)
173 connectionParameters = {}
174
175 if connection.startswith("sqlite_file:"):
176 filename = connection[connection.find(':')+1:]
177 connectionParameters["techno"] = "sqlite"
178 connectionParameters["filename"] = filename if os.path.exists(filename) else None
179
180 elif connection.startswith("oracle://"):
181 if connection.count(';') == 2:
182 pattern = "(.*)://(.*)/(.*);username=(.*);password=(.*)"
183 m = re.match(pattern,connection)
184 #print ('Groups ', m)
185 if not m:
186 log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern))
187 (techno, server, schema, user, passwd) = m.groups()
188 #print ((techno, server, schema, user, passwd))
189 else:
190 global authDict
191 if not authDict:
192 authDict = _readAuthentication()
193 pattern = "oracle://(.*)/(.*)"
194 m = re.match(pattern,connection)
195 if not m:
196 log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern))
197 (server, schema) = m.groups()
198 (user,passwd) = authDict[connection]
199 #info from auth file also unicode
200 connectionParameters["techno"] = 'oracle'
201 connectionParameters["server"] = str(server)
202 connectionParameters["schema"] = str(schema)
203 connectionParameters["user" ] = str(user)
204 connectionParameters["passwd"] = str(passwd)
205
206 elif connection.startswith("mysql://"):
207 pattern = "mysql://(.*);dbname=(.*);user=(.*);passwd=(.*);"
208 m = re.match(pattern,connection)
209 if not m:
210 log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern) )
211 (server, dbname, user, passwd) = m.groups()
212 connectionParameters["techno"] = 'mysql'
213 connectionParameters["server"] = server
214 connectionParameters["dbname"] = dbname
215 connectionParameters["user" ] = user
216 connectionParameters["passwd"] = passwd
217
218 elif connection.startswith("frontier://"):
219 pattern = r"frontier://ATLF/\‍(\‍)/(.*)"
220 m = re.match(pattern,connection)
221 if not m:
222 log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern) )
223 (schema, ) = m.groups()
224 connectionParameters["techno"] = 'frontier'
225 connectionParameters["schema"] = schema
226
227 return connectionParameters
228

◆ _getConnectionServicesForAlias()

python.utils.AtlRunQueryTriggerUtils._getConnectionServicesForAlias ( alias)
protected

Definition at line 122 of file AtlRunQueryTriggerUtils.py.

122def _getConnectionServicesForAlias(alias):
123 log = logging.getLogger( "TrigConfigSvcUtils.py" )
124
125 connectionServices = None # list of services
126
127 dblookupfilename = _getFileLocalOrPath('dblookup.xml','CORAL_DBLOOKUP_PATH')
128 if dblookupfilename is None:
129 return None
130
131 doc = minidom.parse(dblookupfilename)
132 for ls in doc.getElementsByTagName('logicalservice'):
133 if ls.attributes['name'].value != alias:
134 continue
135 connectionServices = [str(s.attributes['name'].value) for s in ls.getElementsByTagName('service')]
136 doc.unlink()
137
138 log.info( "For alias '%s' found list of connections %r", alias, connectionServices )
139 if connectionServices is None:
140 print("ERROR: Trigger connection alias '%s' is not defined in %s" % (alias,dblookupfilename))
141 return connectionServices
142
143
void print(char *figname, TCanvas *c1)

◆ _getFileLocalOrPath()

python.utils.AtlRunQueryTriggerUtils._getFileLocalOrPath ( filename,
pathenv )
protected
looks for filename in local directory and then in all paths specified in environment variable 'pathenv'
returns path/filename if existing, otherwise None

Definition at line 104 of file AtlRunQueryTriggerUtils.py.

104def _getFileLocalOrPath(filename, pathenv):
105 """looks for filename in local directory and then in all paths specified in environment variable 'pathenv'
106 returns path/filename if existing, otherwise None
107 """
108 log = logging.getLogger( "TrigConfigSvcUtils.py" )
109 if os.path.exists(filename):
110 log.info( "Using local file %s", filename)
111 return filename
112
113 pathlist = os.getenv(pathenv,'').split(os.pathsep)
114 resolvedfilename = FindFile(filename, pathlist, os.R_OK)
115 if resolvedfilename:
116 return resolvedfilename
117
118 log.fatal("No file %s found locally nor in %s" % (filename, os.getenv('CORAL_DBLOOKUP_PATH')) )
119 return None
120
121
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177

◆ _readAuthentication()

python.utils.AtlRunQueryTriggerUtils._readAuthentication ( )
protected
 read authentication.xml, first from local directory, then from all paths specified in CORAL_AUTH_PATH
returns dictionary d with d[connection] -> (user,pw)

Definition at line 144 of file AtlRunQueryTriggerUtils.py.

144def _readAuthentication():
145 """ read authentication.xml, first from local directory, then from all paths specified in CORAL_AUTH_PATH
146 returns dictionary d with d[connection] -> (user,pw)
147 """
148
149 authDict = {}
150 dbauthfilename = _getFileLocalOrPath('authentication.xml','CORAL_AUTH_PATH')
151 if dbauthfilename is None:
152 return authDict
153
154 doc = minidom.parse(dbauthfilename)
155 for cn in doc.getElementsByTagName('connection'):
156 user = ""
157 pw = ""
158 svc = cn.attributes['name'].value
159 for p in cn.getElementsByTagName('parameter'):
160 if p.attributes['name'].value == 'user':
161 user = p.attributes['value'].value
162 elif p.attributes['name'].value == 'password':
163 pw = p.attributes['value'].value
164 authDict[svc] = (user,pw)
165 doc.unlink()
166 return authDict
167

◆ executeQuery()

python.utils.AtlRunQueryTriggerUtils.executeQuery ( cursor,
output,
condition,
schemaname,
tables,
bindvars = () )

Definition at line 403 of file AtlRunQueryTriggerUtils.py.

403def executeQuery(cursor, output, condition, schemaname, tables, bindvars=()):
404 query = 'select distinct %s from %s where %s' % (
405 ', '.join(output),
406 ', '.join(getUsedTables(output, condition, schemaname, tables)),
407 ' and '.join(condition)
408 )
409 if len(bindvars)==0:
410 cursor.execute(str(query))
411 else:
412 cursor.execute(str(query),bindvars)
413
414 return cursor.fetchall()
415
416

◆ FindFile()

python.utils.AtlRunQueryTriggerUtils.FindFile ( filename,
pathlist,
access )
Find <filename> with rights <access> through <pathlist>.

Definition at line 85 of file AtlRunQueryTriggerUtils.py.

85def FindFile( filename, pathlist, access ):
86 """Find <filename> with rights <access> through <pathlist>."""
87
88 # special case for those filenames that already contain a path
89 if os.path.dirname( filename ):
90 if os.access( filename, access ):
91 return filename
92
93 # test the file name in all possible paths until first found
94 for path in pathlist:
95 f = os.path.join( path, filename )
96 if os.access( f, access ):
97 return f
98
99 # no such accessible file avalailable
100 return None
101
102
103

◆ getHLTMenu()

python.utils.AtlRunQueryTriggerUtils.getHLTMenu ( smk)

Definition at line 487 of file AtlRunQueryTriggerUtils.py.

487def getHLTMenu(smk):
488 if smk is None or smk==0:
489 return [],[]
490
491 if isTriggerRun2(smk):
492 output = ['TC.HTC_NAME', 'TC.HTC_CHAIN_COUNTER', 'TC.HTC_LOWER_CHAIN_NAME' ]
493 else:
494 output = ['TC.HTC_NAME', 'TC.HTC_CHAIN_COUNTER', 'TC.HTC_LOWER_CHAIN_NAME', 'TC.HTC_L2_OR_EF' ]
495
496 tables = {
497 'SM' : 'SUPER_MASTER_TABLE',
498 'HM' : 'HLT_MASTER_TABLE',
499 'M2C' : 'HLT_TM_TO_TC',
500 'TC' : 'HLT_TRIGGER_CHAIN'
501 }
502 condition = [
503 'SM.SMT_ID = :smk',
504 'SM.SMT_HLT_MASTER_TABLE_ID = HM.HMT_ID',
505 'HM.HMT_TRIGGER_MENU_ID = M2C.HTM2TC_TRIGGER_MENU_ID',
506 'M2C.HTM2TC_TRIGGER_CHAIN_ID = TC.HTC_ID'
507 ]
508 bindvars = { "smk": smk }
509
510 cursor,schema = getTriggerDBCursor(smk)
511 res = executeQuery( cursor, output, condition, schema, tables, bindvars)
512
513 l2chains = []
514 efchains = []
515
516 for r in res:
517 if len(r)==4 and r[3]=='L2':
518 l2chains += [TriggerChain(r[0],r[1],r[2], level=2)]
519 else:
520 efchains += [TriggerChain(r[0],r[1],r[2], level=3)]
521
522 return l2chains, efchains
523
524
525
526

◆ getHLTPrescales()

python.utils.AtlRunQueryTriggerUtils.getHLTPrescales ( hltprescalekey,
run_number )

Definition at line 575 of file AtlRunQueryTriggerUtils.py.

575def getHLTPrescales(hltprescalekey, run_number):
576
577 l2ps = {}
578 efps = {}
579
580 if isTriggerRun2( run_number = run_number ):
581 return l2ps,efps
582
583 tables = {
584 'H' : 'HLT_PRESCALE_SET',
585 'P' : 'HLT_PRESCALE'
586 }
587 output = [
588 'P.HPR_L2_OR_EF',
589 'P.HPR_CHAIN_COUNTER',
590 'P.HPR_PRESCALE',
591 'P.HPR_PASS_THROUGH_RATE'
592 ]
593 condition = [
594 "P.HPR_PRESCALE_SET_ID = :psk",
595 "P.HPR_L2_OR_EF not like 'express'"
596 ]
597 bindvars = { "psk": hltprescalekey }
598
599 cursor,schema = getTriggerDBCursor(isRun2 = True)
600 res = executeQuery(cursor, output, condition, schema, tables, bindvars)
601
602 for r in res:
603 if r[0]=='L2':
604 l2ps[r[1]] = ( float(r[2]), float(r[3]) )
605 elif (r[0]=='EF' or r[0]=='HLT' or r[0]=='HL'):
606 efps[r[1]] = ( float(r[2]), float(r[3]) )
607
608 return l2ps, efps
609
610

◆ getHLTPskNames()

python.utils.AtlRunQueryTriggerUtils.getHLTPskNames ( psk,
dbAlias = None,
run_number = None,
smk = None,
lhcRun = None )

Definition at line 441 of file AtlRunQueryTriggerUtils.py.

441def getHLTPskNames(psk, dbAlias = None, run_number = None , smk = None , lhcRun = None ):
442 if not isinstance(psk, Iterable):
443 psk = [psk]
444
445 keyslist = ','.join([str(k) for k in psk if k])
446 if keyslist=="":
447 return {}
448
449 tables = { 'L' : 'HLT_PRESCALE_SET' }
450 output = ['L.HPS_ID', 'L.HPS_NAME']
451 condition = [ "L.HPS_ID in (%s)" % keyslist ]
452
453 if dbAlias is not None:
454 cursor, schema = getTriggerDBCursorForAlias(dbAlias)
455 else:
456 cursor,schema = getTriggerDBCursor(run_number = run_number, smk = smk, lhcRun = lhcRun )
457
458 res = executeQuery( cursor, output, condition, schema, tables)
459
460 return dict(res)
461
462

◆ getL1Menu()

python.utils.AtlRunQueryTriggerUtils.getL1Menu ( smk)

Definition at line 527 of file AtlRunQueryTriggerUtils.py.

527def getL1Menu(smk):
528 if smk is None or smk==0:
529 return []
530 output = [
531 'TI.L1TI_NAME',
532 'TI.L1TI_CTP_ID'
533 ]
534 tables = {
535 'SM' : 'SUPER_MASTER_TABLE',
536 'M' : 'L1_MASTER_TABLE',
537 'M2I' : 'L1_TM_TO_TI',
538 'TI' : 'L1_TRIGGER_ITEM'
539 }
540 condition = [
541 "SM.SMT_ID = :smk",
542 'SM.SMT_L1_MASTER_TABLE_ID = M.L1MT_ID',
543 'M.L1MT_TRIGGER_MENU_ID = M2I.L1TM2TI_TRIGGER_MENU_ID',
544 'M2I.L1TM2TI_TRIGGER_ITEM_ID = TI.L1TI_ID'
545 ]
546 bindvars = { "smk": smk }
547
548 cursor,schema = getTriggerDBCursor(smk = smk)
549 res = executeQuery( cursor, output, condition, schema, tables, bindvars)
550
551 maxNumberItems = 512 if isTriggerRun2(smk=smk) else 256
552 items = maxNumberItems*[None]
553
554 for r in res:
555 items[r[1]] = TriggerChain(r[0],r[1])
556 return items
557
558
559

◆ getL1Prescales()

python.utils.AtlRunQueryTriggerUtils.getL1Prescales ( l1prescalekey,
run_number )

Definition at line 560 of file AtlRunQueryTriggerUtils.py.

560def getL1Prescales(l1prescalekey, run_number):
561
562 maxNumberItems = 512 if isTriggerRun2( run_number = run_number ) else 256
563
564 tables = { 'L' : 'L1_PRESCALE_SET' }
565 output = ['L.L1PS_VAL%i' % i for i in range( 1, maxNumberItems + 1)]
566 condition = [ "L.L1PS_ID = :psk" ]
567 bindvars = { "psk": l1prescalekey }
568
569 cursor,schema = getTriggerDBCursor( run_number = run_number )
570 res = executeQuery(cursor, output, condition, schema, tables, bindvars)
571
572 return res[0][0:maxNumberItems]
573
574

◆ getL1PskNames()

python.utils.AtlRunQueryTriggerUtils.getL1PskNames ( psk,
dbAlias = None,
run_number = None,
smk = None,
lhcRun = None )

Definition at line 417 of file AtlRunQueryTriggerUtils.py.

417def getL1PskNames(psk, dbAlias = None, run_number = None , smk = None , lhcRun = None ):
418 if not isinstance(psk, Iterable):
419 psk = [psk]
420
421 keyslist = ','.join([str(k) for k in psk if k])
422
423 if keyslist=="":
424 return {}
425
426 tables = { 'L' : 'L1_PRESCALE_SET' }
427 output = [ 'L.L1PS_ID', 'L.L1PS_NAME' ]
428 condition = [ "L.L1PS_ID in (%s)" % keyslist ]
429
430 if dbAlias is not None:
431 cursor, schema = getTriggerDBCursorForAlias(dbAlias)
432 else:
433 cursor, schema = getTriggerDBCursor(run_number = run_number, smk = smk, lhcRun = lhcRun )
434
435 res = executeQuery(cursor, output, condition, schema, tables)
436
437 return dict(res)
438
439
440

◆ getRandom()

python.utils.AtlRunQueryTriggerUtils.getRandom ( smk,
lhcRun )

Definition at line 611 of file AtlRunQueryTriggerUtils.py.

611def getRandom(smk, lhcRun):
612 # does not work for Run 3
613 if lhcRun >= 3:
614 return (1,1,1,1)
615
616 if smk=='n.a.':
617 return ('n.a.','n.a.')
618
619 tables = {
620 'S' : 'SUPER_MASTER_TABLE',
621 'M' : 'L1_MASTER_TABLE',
622 'R' : 'L1_RANDOM'
623 }
624 if lhcRun == 2:
625 output = [ 'R.L1R_CUT0', 'R.L1R_CUT1', 'R.L1R_CUT2', 'R.L1R_CUT3' ]
626 else:
627 output = [ 'R.L1R_RATE1', 'R.L1R_RATE2' ]
628
629 condition = [ "S.SMT_ID=:smk", "S.SMT_L1_MASTER_TABLE_ID=M.L1MT_ID", "M.L1MT_RANDOM_ID=R.L1R_ID" ]
630
631 bindvars = { "smk": smk }
632
633 cursor,schema = getTriggerDBCursorForAlias(dbAlias = triggerDBAlias(lhcRun=lhcRun))
634 res = executeQuery(cursor, output, condition, schema, tables, bindvars)
635 if len(res) > 0:
636 return res[0]
637 else:
638 return [0,0,0,0]
639
640

◆ getSmkNames()

python.utils.AtlRunQueryTriggerUtils.getSmkNames ( smks,
dbAlias )
takes a single SMK or a list of SMKs
returns a map from SMK to (name,version,comment)

Definition at line 463 of file AtlRunQueryTriggerUtils.py.

463def getSmkNames( smks, dbAlias ):
464 """
465 takes a single SMK or a list of SMKs
466 returns a map from SMK to (name,version,comment)
467 """
468 if not isinstance(smks, Iterable):
469 smks = [smks]
470
471 keyslist = ','.join([str(k) for k in smks if k])
472 if keyslist=="":
473 return {}
474
475 tables = { 'S' : 'SUPER_MASTER_TABLE' }
476 output = ['S.SMT_ID', 'S.SMT_NAME', 'S.SMT_VERSION', 'S.SMT_COMMENT']
477 condition = [ "S.SMT_ID in (%s)" % keyslist ]
478
479 cursor, schema = getTriggerDBCursorForAlias(dbAlias)
480 res = executeQuery( cursor, output, condition, schema, tables)
481
482 return dict([ (r[0],(r[1],r[2],r[3])) for r in res])
483
484
485
486

◆ getTriggerDBCursor()

python.utils.AtlRunQueryTriggerUtils.getTriggerDBCursor ( run_number = None,
smk = None,
lhcRun = None )

Definition at line 385 of file AtlRunQueryTriggerUtils.py.

385def getTriggerDBCursor(run_number = None, smk = None, lhcRun = None):
386
387 dbAlias = triggerDBAlias(run_number = run_number, smk = smk, lhcRun = lhcRun)
388 return getTriggerDBCursorForAlias(dbAlias)
389
390

◆ getTriggerDBCursorForAlias()

python.utils.AtlRunQueryTriggerUtils.getTriggerDBCursorForAlias ( dbAlias)

Definition at line 355 of file AtlRunQueryTriggerUtils.py.

355def getTriggerDBCursorForAlias(dbAlias):
356
357 if dbAlias in __cursor_schema:
358 return __cursor_schema[dbAlias] # return the correct cursor and schema name
359
360 connectionParameters = interpretConnection(dbAlias)
361 technology = connectionParameters["techno"]
362
363 if technology == 'sqlite':
364 cursor = _get_sqlite_cursor(connectionParameters["filename"])
365 schema = ''
366
367 elif technology == 'oracle':
368 cursor = _get_oracle_cursor(connectionParameters["server"], connectionParameters["user"], connectionParameters["passwd"])
369 schema = connectionParameters["schema"].rstrip('.') + '.'
370
371 elif technology == 'frontier':
372 from TrigConfigSvc.TrigConfFrontier import getFrontierCursor
373 cursor = getFrontierCursor(connectionParameters["url"], connectionParameters["schema"], logging.getLogger("TrigConfigSvcUtils.py").level)
374 schema = connectionParameters["schema"].rstrip('.') + '.'
375
376 elif technology == 'mysql':
377 cursor = _get_mysql_cursor(connectionParameters["server"], connectionParameters["dbname"], connectionParameters["user"], connectionParameters["passwd"]),''
378 schema = ''
379
380 __cursor_schema[dbAlias] = (cursor,schema)
381
382 return __cursor_schema[dbAlias] # return the correct cursor and schema name
383
384

◆ getUsedTables()

python.utils.AtlRunQueryTriggerUtils.getUsedTables ( output,
condition,
schemaname,
tables )

Definition at line 391 of file AtlRunQueryTriggerUtils.py.

391def getUsedTables(output, condition, schemaname, tables):
392 schemaname = schemaname.rstrip('.')+'.'
393 usedtables = set()
394 for o in output:
395 usedtables.add(o.split('.')[0])
396 for c in condition:
397 for p in c.split():
398 if '.' in p and '\'' not in p:
399 usedtables.add(p.split('.')[0])
400 return ["%s%s %s" % (schemaname,tables[t],t) for t in usedtables]
401
402
STL class.

◆ interpretConnection()

python.utils.AtlRunQueryTriggerUtils.interpretConnection ( connection,
debug = False,
resolveAlias = True )

Definition at line 229 of file AtlRunQueryTriggerUtils.py.

229def interpretConnection(connection, debug=False, resolveAlias=True):
230 # connection needs to be of the following format (this is also the order of checking)
231 # <ALIAS> -- any string without a colon ':' will be checked for in the dblookup.xml file
232 # sqlite_file:filename.db -- an sqlite file, no authentication needed, will be opened in read-only mode
233 # oracle://ATLR/ATLAS_CONF_TRIGGER_V2 -- a service description without user and password, requires lookup in authentication.xml
234 # oracle://ATLR/ATLAS_CONF_TRIGGER_V2;username=ATLAS_CONF_TRIGGER_V2_R;password=<...> -- a service description with user and password
235
236 log.info("Specified connection string '%s'", connection)
237
238 # not needed any longer
239 # connection = connection.lstrip("dblookup://")
240 # connection = connection.lstrip("dblookup:")
241 # connection = connection.rstrip(";")
242 #print (connection)
243
244 # what to return
245 connectionParameters = {}
246 connection = str(connection)
247
248 # connection explicitly specified (no DB alias)
249 if ':' in connection:
250 connectionParameters = _getConnectionParameters( connection )
251 return connectionParameters
252
253 # connection is a DB alias
254 connectionParameters["alias"] = connection
255 if not resolveAlias:
256 return connectionParameters
257
258 connectionServices = _getConnectionServicesForAlias( connection ) # alias resolution via dblookup
259 if connectionServices is None:
260 return connectionParameters
261
262 # If ${TRIGGER_USE_FRONTIER} is True then we remove sqlite files
263 if os.getenv('TRIGGER_USE_FRONTIER',False):
264 connectionServices = filter(lambda conn: not conn.startswith("sqlite_file"), connectionServices)
265 if 'ATLAS_TRIGGERDB_FORCESQLITE' in os.environ:
266 log.fatal("Inconsistent setup: environment variable ATLAS_TRIGGERDB_FORCESQLITE is defined and use of Frontier is requested" )
267
268 # SQLite
269 sqliteconnections = [conn for conn in connectionServices if conn.startswith("sqlite_file")]
270 if len(sqliteconnections)>0:
271 for conn in sqliteconnections:
272 connectionParameters = _getConnectionParameters( conn )
273 if connectionParameters["filename"] is not None:
274 break # stop at the first sqlite file that exists
275 if connectionParameters["filename"] is not None:
276 log.info("Using sqlite connection %s", connectionParameters)
277 return connectionParameters
278 else:
279 if 'ATLAS_TRIGGERDB_FORCESQLITE' in os.environ:
280 log.fatal("environment ATLAS_TRIGGERDB_FORCESQLITE is defined but non of the sqlite files defined in dblookup.xml exists" )
281 else:
282 if 'ATLAS_TRIGGERDB_FORCESQLITE' in os.environ:
283 log.fatal("environment ATLAS_TRIGGERDB_FORCESQLITE is defined but no sqlite connection defined in dblookup.xml" )
284
285 from CoolConvUtilities.AtlCoolLib import replicaList
286 serverlist=['ATLAS_CONFIG' if s=='ATLAS_COOLPROD' else s for s in replicaList()] # replicaList is for COOL, I need ATLAS_CONFIG instead of ATLAS_COOLPROD
287 log.info("Trying these servers in order %r", serverlist)
288 for server in serverlist:
289 log.info("Trying server %s", server)
290
291 if server=='ATLF':
292 if not os.getenv('TRIGGER_USE_FRONTIER',False):
293 continue
294 frontierconnections = [conn for conn in connectionServices if conn.startswith("frontier")]
295 if len(frontierconnections) == 0:
296 log.debug("FroNTier connection not defined for alias %s in dblookup", connection )
297 continue
298 log.info("Environment FRONTIER_SERVER: %s", os.getenv('FRONTIER_SERVER','not defined'))
299 frontierServer = os.getenv('FRONTIER_SERVER',None)
300 if not frontierServer:
301 log.debug("No environment variable FRONTIER_SERVER" )
302 continue
303 connectionParameters = _getConnectionParameters( frontierconnections[0] )
304 connectionParameters['url'] = frontierServer
305 log.info("Using frontier connection %s", frontierconnections[0])
306 #connstr='frontier://ATLF/%s;schema=%s;dbname=TRIGCONF' % (connectionParameters['url'],connectionParameters["schema"])
307 break
308 elif server=='atlas_dd':
309 continue
310 else:
311 oracleconnections = [conn for conn in connectionServices if conn.startswith("oracle://%s/" % server)]
312 if len(oracleconnections) == 0:
313 log.debug("Oracle connection not defined for server %s in dblookup", server )
314 continue
315 connectionParameters = _getConnectionParameters( oracleconnections[0] )
316 log.info("Using oracle connection %s", oracleconnections[0])
317 break
318
319 return connectionParameters
320
321

◆ isTriggerRun2()

python.utils.AtlRunQueryTriggerUtils.isTriggerRun2 ( run_number = None,
smk = None,
isRun2 = None )

Definition at line 20 of file AtlRunQueryTriggerUtils.py.

20def isTriggerRun2(run_number = None , smk = None , isRun2 = None ):
21 if run_number is None and smk is None and isRun2 is None:
22 raise RuntimeError("Cannot determine if trigger db is run 1 or 2")
23
24 if smk is not None :
25 return smk >= 2000 and smk<3000
26 elif run_number is not None :
27 return run_number > 249000
28 else:
29 return isRun2
30
31

◆ triggerDBAlias()

python.utils.AtlRunQueryTriggerUtils.triggerDBAlias ( run_number = None,
smk = None,
lhcRun = None )

Definition at line 32 of file AtlRunQueryTriggerUtils.py.

32def triggerDBAlias(run_number = None , smk = None, lhcRun = None ):
33 if run_number is None and smk is None and lhcRun is None:
34 raise RuntimeError("Cannot determine the triggerDBAlias as no info is given")
35
36 # lhcRun given
37 if lhcRun==1 or lhcRun==2:
38 return f"TRIGGERDB_RUN{lhcRun}"
39 if lhcRun==3:
40 return "TRIGGERDBDEV1_I8" if (smk is not None and smk<3000) else "TRIGGERDB_RUN3"
41
42 # smk given
43 if smk is not None:
44 if smk<2000:
45 return "TRIGGERDB_RUN1"
46 elif smk<3000:
47 # note that this causes problems for the runs taken during the LS2 Pilot beam test
48 return "TRIGGERDB_RUN2"
49 else:
50 return "TRIGGERDB_RUN3"
51
52 # run number given (should not be used, as the run should know the lhcRun)
53 # see AtlRunQueryRun.py
54 if run_number > 405800:
55 return "TRIGGERDB_RUN3"
56 if run_number > 378000:
57 return "TRIGGERDBDEV1_I8"
58 elif run_number > 249000:
59 return "TRIGGERDB_RUN2"
60 else:
61 return "TRIGGERDB_RUN1"
62
63
64

Variable Documentation

◆ __cursor_schema

dict python.utils.AtlRunQueryTriggerUtils.__cursor_schema = {}
private

Definition at line 17 of file AtlRunQueryTriggerUtils.py.

◆ authDict

python.utils.AtlRunQueryTriggerUtils.authDict = None

Definition at line 168 of file AtlRunQueryTriggerUtils.py.

◆ log

python.utils.AtlRunQueryTriggerUtils.log = logging.getLogger( __name__ )

Definition at line 67 of file AtlRunQueryTriggerUtils.py.