jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/346583 )
Change subject: Include logfile path in failmails ...................................................................... Include logfile path in failmails Change-Id: I919594c5c1c0f5316038d6ae63267806092c433e --- M processcontrol/mailer.py M processcontrol/runner.py M tests/test_job_runner.py 3 files changed, 21 insertions(+), 14 deletions(-) Approvals: jenkins-bot: Verified Ejegg: Looks good to me, approved diff --git a/processcontrol/mailer.py b/processcontrol/mailer.py index 2d74472..ec17bfd 100644 --- a/processcontrol/mailer.py +++ b/processcontrol/mailer.py @@ -4,15 +4,20 @@ class Mailer(object): - def __init__(self, config): - self.from_address = config.get("failmail/from_address") - self.to_address = config.get("failmail/to_address") + def __init__(self, job): + self.job = job + self.from_address = job.config.get("failmail/from_address") + self.to_address = job.config.get("failmail/to_address") # FIXME: this is set to ensure one failmail per instance. Should # do something more sophisticated to collect all calls and send # the mail before exiting. self.sent_fail_mail = False - def fail_mail(self, subject, body="Hope your wits are freshly sharpened!"): + def fail_mail(self, subject, logfile=None): + if logfile is not None: + body = "See the logs for more information: {logfile}".format(logfile=logfile) + else: + body = "No details available." if self.sent_fail_mail: return diff --git a/processcontrol/runner.py b/processcontrol/runner.py index 1b05b57..e97494c 100644 --- a/processcontrol/runner.py +++ b/processcontrol/runner.py @@ -15,7 +15,8 @@ def __init__(self, job): self.global_config = config.GlobalConfiguration() self.job = job - self.mailer = mailer.Mailer(self.job.config) + self.mailer = mailer.Mailer(self.job) + self.logfile = None def run(self): # Check that we are the service user. @@ -54,6 +55,7 @@ self.process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=self.job.environment) streamer = output_streamer.OutputStreamer(self.process, self.job.slug, self.start_time) + self.logfile = streamer.filename streamer.start() # should be safe from deadlocks because our OutputStreamer @@ -69,25 +71,25 @@ self.process = None def fail_exitcode(self, return_code): - message = "Job {name} failed with code {code}".format(name=self.job.name, code=return_code) + message = "{name} failed with code {code}".format(name=self.job.name, code=return_code) config.log.error(message) # TODO: Prevent future jobs according to config. - self.mailer.fail_mail(message) + self.mailer.fail_mail(message, logfile=self.logfile) raise JobFailure(message) def fail_has_stderr(self, stderr_data): - message = "Job {name} printed things to stderr:".format(name=self.job.name) + message = "{name} printed things to stderr:".format(name=self.job.name) config.log.error(message) body = stderr_data.decode("utf-8") config.log.error(body) - self.mailer.fail_mail(message, body) + self.mailer.fail_mail(message, body, logfile=self.logfile) raise JobFailure(message) def fail_timeout(self): self.process.kill() - message = "Job {name} timed out after {timeout} minutes".format(name=self.job.name, timeout=self.job.timeout) + message = "{name} timed out after {timeout} minutes".format(name=self.job.name, timeout=self.job.timeout) config.log.error(message) - self.mailer.fail_mail(message) + self.mailer.fail_mail(message, logfile=self.logfile) # FIXME: Job will return SIGKILL now, fail_exitcode should ignore that signal now? raise JobFailure(message) diff --git a/tests/test_job_runner.py b/tests/test_job_runner.py index a82e808..5af7fac 100644 --- a/tests/test_job_runner.py +++ b/tests/test_job_runner.py @@ -51,7 +51,7 @@ run_job("return_code") loglines = caplog.actual() - assert ("root", "ERROR", "Job False job failed with code 1") in loglines + assert ("root", "ERROR", "False job failed with code 1") in loglines MockSmtp().sendmail.assert_called_once() @@ -65,8 +65,8 @@ run_job("timeout") loglines = caplog.actual() - assert ("root", "ERROR", "Job Timing out job timed out after 0.005 minutes") in loglines - assert ("root", "ERROR", "Job Timing out job failed with code -9") in loglines + assert ("root", "ERROR", "Timing out job timed out after 0.005 minutes") in loglines + assert ("root", "ERROR", "Timing out job failed with code -9") in loglines MockSmtp().sendmail.assert_called_once() -- To view, visit https://gerrit.wikimedia.org/r/346583 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I919594c5c1c0f5316038d6ae63267806092c433e Gerrit-PatchSet: 7 Gerrit-Project: wikimedia/fundraising/process-control Gerrit-Branch: master Gerrit-Owner: Awight <awi...@wikimedia.org> Gerrit-Reviewer: Awight <awi...@wikimedia.org> Gerrit-Reviewer: Cdentinger <cdentin...@wikimedia.org> Gerrit-Reviewer: Ejegg <eeggles...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits