Пример #1
0
    def detectEventDetails (self, event, logdir, status):
        jobId = event.name
        aux = { 'sched_id' : event.sched_id }

        if not logdir:
            return aux

        if jobId.startswith ('stage_in') or jobId.startswith ('stage_out'):
            path = os.path.join (logdir, "%s.in" % jobId)
            #logger.debug ("opening path: %s", path)
            text = GraysonUtil.readFile (path)
            lines = text.split ('\n')
            if lines:
                transfers = []
                pair = 0
                while len (lines) > ((pair * 4) + 4):
                    '''
                    for line in lines:
                        logger.debug ("line: %s", line)
                        '''
                    offset = pair * 4
                    
                    transfer = {
                        "sourceSite" : lines [offset + 0],
                        "sourceFile" : lines [offset + 1],
                        "destSite"   : lines [offset + 2],
                        "destFile"   : lines [offset + 3],
                        }
                    pair += 1
                    execution = self.getExecutionData (logdir, jobId)
                    if execution:
                        stdout = execution ['stdout']
                        transferred = GraysonUtil.getPrecompiledPattern (self.transferBytesPattern, stdout)
                        duration = GraysonUtil.getPrecompiledPattern (self.transferDurationPattern, stdout)
                        rateUp = GraysonUtil.getPrecompiledPattern (self.transferRateUpPattern, stdout)
                        rateDown = GraysonUtil.getPrecompiledPattern (self.transferRateDownPattern, stdout)
                        transfer ["bytes"] = transferred
                        transfer ["time"] = duration
                        transfer ["up"] = rateUp
                        transfer ["down"] = rateDown
                        '''
                        logger.debug ("kickstart stdout/err: %s" + json.dumps (execution, indent=4))
                        logger.debug ("     transferred: %s duration: %s rateUp: %s rateDown: %s", transferred, duration, rateUp, rateDown)
                        '''
                        transfers.append (transfer)
                aux ['transfer'] = transfers


        if status == WorkflowStatus.STATUS_FAILED:
            execution = self.getExecutionData (logdir, jobId)
            if execution:
                aux ["detail"] = {
                    "stdout" : GraysonUtil.ceilingString (execution ["stdout"], maxLength=500, fromEnd=True),
                    "stderr" : GraysonUtil.ceilingString (execution ["stderr"], maxLength=500, fromEnd=True)
                    }

        dagLog = glob.glob (os.path.join (logdir, '*.dag.dagman.out'))
        dax = glob.glob (os.path.join (logdir, 'dax', '*.dax'))
        
        if len(dagLog) > 0 or len (dax) > 0:
            log = {}
            aux ['log'] = log
            if len (dagLog) > 0:
                log ['daglog'] = os.path.basename (dagLog [0])
            if len (dax) > 0:
                log ['dax'] = os.path.basename (dax [0])

        return aux