Newer
Older
from dm.common.utility.dictUtility import DictUtility
DEFAULT_KEY_LIST = [ 'id', 'experimentName', 'dataDirectory', 'status', 'nProcessedFiles', 'nProcessingErrors', 'nFiles', 'startTime', 'endTime', 'runTime', 'startTimestamp', 'endTimestamp' ]
def __init__(self, dict={}):
self.originalKeys = dict.keys()
self['fileDict'] = self.get('fileDict', {})
def updateStatus(self):
daqStatus = self.get('status', 'running')
if daqStatus == 'done':
return
fileDict = self.get('fileDict')
nFiles = len(fileDict)
nProcessedFiles = 0
nProcessingErrors = 0
processingErrors = {}
for (filePath,uploadFileInfo) in fileDict.items():
if uploadFileInfo.get('processed'):
nProcessedFiles += 1
elif uploadFileInfo.get('processingError'):
nProcessingErrors += 1
processingErrors[filePath] = uploadFileInfo.get('processingError')
if len(processingErrors):
self['processingErrors'] = processingErrors
# need to handle 'failed' uploads
nCompletedFiles = nProcessedFiles+nProcessingErrors
self['nProcessedFiles'] = '%s' % (nProcessedFiles)
self['nProcessingErrors'] = '%s' % (nProcessingErrors)
self['nFiles'] = '%s' % (nFiles)
percentageComplete = 100.0
percentageProcessed = 100.0
percentageProcessingErrors = 0.0
if nFiles > 0:
percentageComplete = float(nCompletedFiles)/float(nFiles)*100.0
percentageProcessed = float(nProcessedFiles)/float(nFiles)*100.0
percentageProcessingErrors = float(nProcessingErrors)/float(nFiles)*100.0
self['percentageComplete'] = '%.2f' % percentageComplete
self['percentageProcessed'] = '%.2f' % percentageProcessed
self['percentageProcessingErrors'] = '%.2f' % percentageProcessingErrors
runTime = now - self.get('startTime')
self['runTime'] = runTime
if self.get('endTime'):
daqStatus = 'done'
self['runTime'] = self.get('endTime') - self.get('startTime')
self['status'] = daqStatus
def toDictWithOriginalKeys(self):
dict = copy.deepcopy(self.data)
for key in dict.keys():
if key not in self.originalKeys:
del dict[key]
return dict
def scrub(self, includeFileDetails=False):
# Remove redundant information
daqInfo2 = DictUtility.deepCopy(self.data, excludeKeys=['fileDict'])
if not includeFileDetails:
return DaqInfo(daqInfo2)
fileDict = self.get('fileDict', {})
fileDict2 = {}
for (filePath,fileInfo) in fileDict.items():
fileInfo2 = {}
for key in ['processed', 'lastUpdateTime', 'processingError']: