Newer
Older
#!/usr/bin/env python
import time
import threading
from dmObject import DmObject
from dm.common.utility.dictUtility import DictUtility
from dm.common.utility.timeUtility import TimeUtility
class DirectoryUploadInfo(DmObject):
DEFAULT_KEY_LIST = [ 'id', 'experimentName', 'dataDirectory', 'status', 'nFiles', 'startTime', 'endTime', 'runTime', 'startTimestamp', 'endTimestamp' ]
def __init__(self, dict={}):
DmObject.__init__(self, dict)
self.lock = threading.RLock()
def updateStatus(self):
now = time.time()
uploadStatus = self.get('status', 'running')
if uploadStatus in ['done', 'aborted', 'failed']:
return
startTime = self.get('startTime', now)
runTime = now - startTime
processingInfo = self.get('processingInfo')
endTime = 0
uploadStatus = 'done'
for processorName in processingInfo.keys():
processingEndTime = processingInfo[processorName].get('processingEndTime')
status = processingInfo[processorName].get('status')
if status in ['aborted', 'failed']:
uploadStatus = status
if not processingEndTime and status != 'skipped':
endTime = None
break
if processingEndTime > endTime:
endTime = processingEndTime
if endTime:
runTime = endTime - startTime
self['endTime'] = endTime
self['endTimestamp'] = TimeUtility.formatLocalTimestamp(endTime)
self['status'] = uploadStatus
self['runTime'] = runTime