ATLAS Offline Software
Loading...
Searching...
No Matches
COOLRates.COOLQueryWorker Class Reference
Inheritance diagram for COOLRates.COOLQueryWorker:
Collaboration diagram for COOLRates.COOLQueryWorker:

Public Member Functions

 __init__ (self, timeConverter={})
 getdb (self, dbName)
 getFolder (self, folderName)
 getdbName (self, folderName)
 convertTime (self, timeStart, timeEnd, timeConverter)
 processQuery (self, queryBundle)
 close (self)
 __call__ (self, queueIn, queueOut)

Public Attributes

 db_svc = cool.DatabaseSvcFactory.databaseService()
 timeConverter = timeConverter
dict db = {}
dict folder = {}

Detailed Description

Definition at line 71 of file COOLRates.py.

Constructor & Destructor Documentation

◆ __init__()

COOLRates.COOLQueryWorker.__init__ ( self,
timeConverter = {} )

Definition at line 72 of file COOLRates.py.

72 def __init__(self,timeConverter = {}):
73 self.db_svc = cool.DatabaseSvcFactory.databaseService()
74 self.timeConverter=timeConverter
75 self.db = {}
76 self.folder = {}
77

Member Function Documentation

◆ __call__()

COOLRates.COOLQueryWorker.__call__ ( self,
queueIn,
queueOut )

Definition at line 133 of file COOLRates.py.

133 def __call__(self,queueIn,queueOut):
134 signal.signal(signal.SIGINT, signal.SIG_IGN)
135 try:
136 while True:
137 try:
138 queryBundle = queueIn.get(False,.001)
139 except Empty:
140 sleep(.001)
141 continue
142 if queryBundle is True:
143 break
144 resultBundle = self.processQuery(queryBundle)
145 queueOut.put(resultBundle)
146 except Exception as exception:
147 logger.critical(exception)
148
149 self.close()
150 queueOut.put(True)
151 return
152
153#====================================================================================================================
154

◆ close()

COOLRates.COOLQueryWorker.close ( self)

Definition at line 130 of file COOLRates.py.

130 def close(self):
131 for db in self.db.values(): db.closeDatabase()
132

◆ convertTime()

COOLRates.COOLQueryWorker.convertTime ( self,
timeStart,
timeEnd,
timeConverter )

Definition at line 98 of file COOLRates.py.

98 def convertTime(self,timeStart,timeEnd,timeConverter):
99 validRunLbs = [runLb for runLb,time in timeConverter.items() if timeStart<=time<=timeEnd]
100 return validRunLbs
101

◆ getdb()

COOLRates.COOLQueryWorker.getdb ( self,
dbName )

Definition at line 78 of file COOLRates.py.

78 def getdb(self,dbName):
79 if dbName not in self.db:
80 self.db[dbName] = self.db_svc.openDatabase(dbName,True)
81 return self.db.get(dbName)
82
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ getdbName()

COOLRates.COOLQueryWorker.getdbName ( self,
folderName )

Definition at line 90 of file COOLRates.py.

90 def getdbName(self,folderName):
91 if folderName.startswith('/LHC/DCS/'):
92 return 'oracle://ATLAS_COOLPROD;schema=ATLAS_COOLOFL_DCS;dbname=COMP200;'
93 if folderName.startswith('/TRIGGER/HLT/') and 'Rates' in folderName:
94 return "oracle://ATLAS_COOLPROD;schema=ATLAS_COOLONL_TRIGGER;dbname=MONP200;"
95 if not folderName.startswith('/'): folderName = '/'+folderName
96 return "oracle://ATLAS_COOLPROD;schema=ATLAS_COOLONL_{0};dbname=COMP200;".format(folderName.split("/")[1])
97

◆ getFolder()

COOLRates.COOLQueryWorker.getFolder ( self,
folderName )

Definition at line 83 of file COOLRates.py.

83 def getFolder(self,folderName):
84 if folderName not in self.folder:
85 dbName = self.getdbName(folderName)
86 db = self.getdb(dbName)
87 self.folder[folderName] = db.getFolder(folderName)
88 return self.folder.get(folderName)
89

◆ processQuery()

COOLRates.COOLQueryWorker.processQuery ( self,
queryBundle )

Reimplemented in COOLRates.RateQueryWorker.

Definition at line 102 of file COOLRates.py.

102 def processQuery(self,queryBundle):
103 folder = self.getFolder(queryBundle.folderName)
104 folder.setPrefetchAll(False)
105 result = {}
106 for payloadName,payloadAlias,cast in queryBundle.payloadRequests: result[payloadAlias]={}
107 folderIterator = folder.browseObjects(queryBundle.IoVStart,queryBundle.IoVEnd,queryBundle.channelSelection)
108 if queryBundle.timeBased:
109 while folderIterator.goToNext():
110 currentSlice = folderIterator.currentRef()
111 for payloadName,payloadAlias,cast in queryBundle.payloadRequests:
112 payload = cast(currentSlice.payloadValue(payloadName))
113 if payloadName in queryBundle.payloadRequirements:
114 if not eval(queryBundle.payloadRequirements[payloadName].format(repr(payload))): continue
115 runLbs = self.convertTime(int(currentSlice.since()),int(currentSlice.until()),queryBundle.timeConverter)
116 result[payloadAlias].update(dict.fromkeys(runLbs,payload))
117 else:
118 while folderIterator.goToNext():
119 currentSlice = folderIterator.currentRef()
120 for payloadName,payloadAlias,cast in queryBundle.payloadRequests:
121 payload = cast(currentSlice.payloadValue(payloadName))
122 if payloadName in queryBundle.payloadRequirements:
123 if not eval(queryBundle.payloadRequirements['payloadName'].format(repr(payload))): continue
124 runLbs = range(max(currentSlice.since(),queryBundle.IoVStart),min(currentSlice.until(),queryBundle.IoVEnd))
125 result[payloadAlias].update(dict.fromkeys(runLbs,payload))
126
127 folderIterator.close()
128 return result
129
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41

Member Data Documentation

◆ db

dict COOLRates.COOLQueryWorker.db = {}

Definition at line 75 of file COOLRates.py.

◆ db_svc

COOLRates.COOLQueryWorker.db_svc = cool.DatabaseSvcFactory.databaseService()

Definition at line 73 of file COOLRates.py.

◆ folder

dict COOLRates.COOLQueryWorker.folder = {}

Definition at line 76 of file COOLRates.py.

◆ timeConverter

COOLRates.COOLQueryWorker.timeConverter = timeConverter

Definition at line 74 of file COOLRates.py.


The documentation for this class was generated from the following file: