#!/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