#!/usr/bin/env python import time import threading from dmObject import DmObject from dm.common.constants import dmProcessingStatus 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', 'errorMessage' ] def __init__(self, dict={}): DmObject.__init__(self, dict) self.lock = threading.RLock() def updateStatus(self): now = time.time() uploadStatus = self.get('status', dmProcessingStatus.DM_PROCESSING_STATUS_RUNNING) if uploadStatus in dmProcessingStatus.DM_INACTIVE_PROCESSING_STATUS_LIST: return startTime = self.get('startTime', now) runTime = now - startTime processingInfo = self.get('processingInfo') endTime = 0 uploadStatus = dmProcessingStatus.DM_PROCESSING_STATUS_DONE for processorName in processingInfo.keys(): processingEndTime = processingInfo[processorName].get('processingEndTime') status = processingInfo[processorName].get('status') if status in [dmProcessingStatus.DM_PROCESSING_STATUS_ABORTED, dmProcessingStatus.DM_PROCESSING_STATUS_FAILED]: uploadStatus = status if not processingEndTime and status != dmProcessingStatus.DM_PROCESSING_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