From 28f79d144ed730490352e58a4a2838192455d7cf Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Mon, 29 Aug 2022 13:42:07 +0200 Subject: [PATCH] =?UTF-8?q?Maily=20o=20chyb=C3=A1ch:=20Napojen=C3=AD=20na?= =?UTF-8?q?=20joby?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #270. --- mo/jobs/__init__.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/mo/jobs/__init__.py b/mo/jobs/__init__.py index 56e68e5f..67bff065 100644 --- a/mo/jobs/__init__.py +++ b/mo/jobs/__init__.py @@ -4,14 +4,16 @@ from datetime import timedelta import os import shutil from sqlalchemy import or_ +import sys from typing import Optional, Dict, Callable, List import mo import mo.config as config import mo.db as db +import mo.email import mo.rights import mo.util -from mo.util import logger +from mo.util import logger, ExceptionInfo def send_notify(): @@ -141,6 +143,8 @@ class TheJob: job.out_file = None sess.commit() + exc_info: ExceptionInfo = (None, None, None) + try: self.gatekeeper = mo.rights.Gatekeeper(job.user) self.expires_in_minutes = config.JOB_EXPIRATION @@ -159,7 +163,8 @@ class TheJob: logger.info(f'Job: Úspěšně dokončen job #{job.job_id} ({job.result})') job.state = db.JobState.done except Exception as e: - logger.error(f'Job: Chyba při zpracování jobu #{job.job_id}: %s', e, exc_info=e) + exc_info = sys.exc_info() + logger.error(f'Job: Chyba při zpracování jobu #{job.job_id}: %s', e, exc_info=exc_info) job.state = db.JobState.internal_error job.result = 'Interní chyba, informujte prosím správce systému.' @@ -168,6 +173,16 @@ class TheJob: job.expires_at = job.finished_at + timedelta(minutes=self.expires_in_minutes) sess.commit() + # Maily o interních chybách posíláme mimo transakci + if job.state == db.JobState.internal_error: + err_attrs = { + 'Job': f'#{job.job_id}', + 'Type': str(job.type), + 'User': f'#{job.user_id}', + 'Desc': job.description, + } + mo.email.send_internal_error_email(f'Job #{job.job_id}', err_attrs, exc_info) + def process_jobs(): sess = db.get_session() -- GitLab