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