def is_atlassetup_error(job): """ Did AtlasSetup fail with a fatal error? :param job: job object. :return: Boolean. (note: True means the error was found) """ stdout = os.path.join(job.workdir, config.Payload.payloadstdout) _tail = tail(stdout) res_tmp = _tail[:2048] return "AtlasSetup(FATAL): Fatal exception" in res_tmp
def is_installation_error(job): """ Did the payload fail to run? (Due to faulty/missing installation). :param job: job object. :return: Boolean. (note: True means the error was found) """ stdout = os.path.join(job.workdir, config.Payload.payloadstdout) _tail = tail(stdout) res_tmp = _tail[:1024] return res_tmp[ 0: 3] == "sh:" and 'setup.sh' in res_tmp and 'No such file or directory' in res_tmp
def is_atlassetup_error(job): """ Did AtlasSetup fail with a fatal error? :param job: job object. :return: Boolean. (note: True means the error was found) """ stdout = os.path.join(job.workdir, config.Payload.payloadstdout) _tail = tail(stdout) res_tmp = _tail[:2048] if "AtlasSetup(FATAL): Fatal exception" in res_tmp: logger.warning('AtlasSetup FATAL failure detected') return True else: return False
def set_error_nousertarball(job): """ Set error code for NOUSERTARBALL. :param job: job object. :return: """ # get the tail of the stdout since it will contain the URL of the user log filename = os.path.join(job.workdir, config.Payload.payloadstdout) _tail = tail(filename) _tail += 'http://someurl.se/path' if _tail: # try to extract the tarball url from the tail tarball_url = extract_tarball_url(_tail) job.piloterrorcodes, job.piloterrordiags = errors.add_error_code(errors.NOUSERTARBALL) job.piloterrorcode = errors.NOUSERTARBALL job.piloterrordiag = "User tarball %s cannot be downloaded from PanDA server" % tarball_url
def get_pilot_log_extracts(job): """ Get the extracts from the pilot log (warning/fatal messages, as well as tail of the log itself). :param job: job object. :return: tail of pilot log (string). """ log = get_logger(job.jobid) extracts = "" path = os.path.join(job.workdir, config.Pilot.pilotlog) if os.path.exists(path): # get the last 20 lines of the pilot log in case it contains relevant error information _tail = tail(path, nlines=20) if _tail != "": if extracts != "": extracts += "\n" extracts += "- Log from %s -" % config.Pilot.pilotlog extracts += _tail # grep for fatal/critical errors in the pilot log #errormsgs = ["FATAL", "CRITICAL", "ERROR"] #matched_lines = grep(errormsgs, path) #_extracts = "" #if len(matched_lines) > 0: # log.debug("dumping warning messages from %s:\n" % os.path.basename(path)) # for line in matched_lines: # _extracts += line + "\n" #if _extracts != "": # if config.Pilot.error_log != "": # path = os.path.join(job.workdir, config.Pilot.error_log) # write_file(path, _extracts) # extracts += "\n- Error messages from %s -\n" % config.Pilot.pilotlog # extracts += _extracts else: log.warning('pilot log file does not exist: %s' % path) return extracts
def get_pilot_log_extracts(job): """ Get the extracts from the pilot log (warning/fatal messages, as well as tail of the log itself). :param job: job object. :return: tail of pilot log (string). """ extracts = "" path = os.path.join(job.workdir, config.Pilot.pilotlog) if os.path.exists(path): # get the last 20 lines of the pilot log in case it contains relevant error information _tail = tail(path, nlines=20) if _tail != "": if extracts != "": extracts += "\n" extracts += "- Log from %s -\n" % config.Pilot.pilotlog extracts += _tail else: logger.warning('pilot log file does not exist: %s' % path) return extracts