diff --git a/apps/utils/exceptions.py b/apps/utils/exceptions.py index 83413913..d082673b 100755 --- a/apps/utils/exceptions.py +++ b/apps/utils/exceptions.py @@ -7,6 +7,7 @@ from rest_framework import exceptions from rest_framework.response import Response from rest_framework.views import set_rollback import json +from apps.utils.tasks import send_mail_task # 实例化myLogger @@ -50,4 +51,5 @@ def custom_exception_hander(exc, context): args = (request_id, traceback.format_exc()) err_detail = f"{args[0]}-{args[1]}" myLogger.error(err_detail) + send_mail_task.delay(message=err_detail) # 500邮件通知到开发人员 return Response(data={'err_code': 'server_error', 'err_detail': None, 'err_msg': '服务器错误'}, status=500) diff --git a/apps/utils/tasks.py b/apps/utils/tasks.py index fd641017..74f71946 100644 --- a/apps/utils/tasks.py +++ b/apps/utils/tasks.py @@ -7,6 +7,14 @@ from django.conf import settings # 实例化myLogger myLogger = logging.getLogger('log') +@shared_task +def send_mail_task(**args): + from django.core.mail import send_mail + args['subject'] = args.get('subject', 'ehs_500') + args['from_email'] = args.get('from_email', settings.EMAIL_HOST_USER) + args['recipient_list'] = args.get('recipient_list', [settings.EMAIL_HOST_USER]) + send_mail(**args) + class CustomTask(Task): """ @@ -14,14 +22,7 @@ class CustomTask(Task): """ def on_failure(self, exc, task_id, args, kwargs, einfo): - myLogger.error('{0!r} failed: {1!r}'.format(task_id, exc)) - return super().on_failure(exc, task_id, args, kwargs, einfo) - - -@shared_task(base=CustomTask) -def send_mail_task(**args): - from django.core.mail import send_mail - args['subject'] = args.get('subject', 'ehs_500') - args['from_email'] = args.get('from_email', settings.EMAIL_HOST_USER) - args['recipient_list'] = args.get('recipient_list', [settings.EMAIL_HOST_USER]) - send_mail(**args) + detail = '{0!r} failed: {1!r}'.format(task_id, exc) + myLogger.error(detail) + send_mail_task.delay(subject='ehs_task_error', message=detail) + return super().on_failure(exc, task_id, args, kwargs, einfo) \ No newline at end of file diff --git a/apps/wf/tasks.py b/apps/wf/tasks.py index 830a1515..380b096b 100644 --- a/apps/wf/tasks.py +++ b/apps/wf/tasks.py @@ -9,6 +9,7 @@ from apps.utils.tasks import CustomTask from celery import shared_task from apps.wf.models import State, Ticket, TicketFlow, Transition import time +from apps.utils.tasks import send_mail_task myLogger = logging.getLogger('log') @@ -53,6 +54,7 @@ def run_task(ticket_id: str, retry_num=1): myLogger.error('工作流脚本执行失败', exc_info=True) script_result = False script_result_msg = err_detail + send_mail_task.delay(subject='ehs_wf_task_error', message=err_detail) # run_task执行失败发送邮件 ticket = Ticket.objects.filter(id=ticket_id).first() if not script_result: ticket.script_run_last_result = False