芹菜给每个不及格的助教发邮件

2024-04-29 08:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django应用程序中使用芹菜,并且我已经设置了芹菜花来监视芹菜的任务。我有一些设置任务,当用户注册/提交/FP等事件时,会向他们发送电子邮件。现在弗劳尔给了我一个很好的任务细节和它的状态。现在,对于每一个失败的任务,我希望有一个电子邮件发送到我的帐户,这样我就没有检查花每天失败的任务。我在设置.py文件

CELERY_SEND_TASK_ERROR_EMAILS = True 

ADMINS。在

^{pr2}$

这些是“发件人”电子邮件地址的设置。 几天前,我的一个团队成员不小心更改了上述电子邮件主机的密码,忘记了更新设置文件。由于SMTP身份验证错误,任务失败的时间太晚了。

有没有什么办法可以让我即使发生SMTP认证错误,也能立即收到芹菜发来的邮件?我对此不太确定。在

有没有其他工具可以监视我的任务,并且对于每一个失败的任务,它都会给我发送邮件。在


Tags: 文件djangopy应用程序电子邮件状态错误事件
2条回答

我发现有一个表是为维护数据库中的任务而创建的。所以我只是简单地创建了一个脚本,它将每小时检查表中过去一小时记录中的失败任务,如果找到任何记录,它将发送电子邮件。在

脚本.py

#!venv/bin/python2

import os
from django.conf import settings

if __name__ == '__main__' and __package__ is None:
    os.sys.path.append(
        os.path.dirname(
            os.path.dirname(
                os.path.abspath(__file__))))

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rest_apis.settings")

import django

django.setup()
from django.core.mail import EmailMessage
from djcelery.models import TaskMeta
from datetime import datetime, timedelta, time


USERS_TO_NOTIFY = ['ops@yopmail.com']
TIME_THRESHOLD_INTERVAL = 60

def send_email(email_subject_line, email_body):
    email = EmailMessage(email_subject_line,
                         email_body,
                         settings.EMAIL_HOST_USER,
                         USERS_TO_NOTIFY
                         )
    email.send()


def main():
    current_time = datetime.now()   # Get Current TimeStamp
    time_threshold = current_time - timedelta(minutes=TIME_THRESHOLD_INTERVAL) # Get 60 minutes past current time stamp
    celery_taskmeta_objects = TaskMeta.objects.filter(status="FAILURE", date_done__gte=time_threshold)

    email_body = "Below are the tasks which failed : "
    if celery_taskmeta_objects.exists():
        for celery_taskmeta in celery_taskmeta_objects:
            print celery_taskmeta.task_id
            email_body += "\n\ntask_id : %s" % celery_taskmeta.task_id
            email_body += "\nstatus : %s" % celery_taskmeta.status
            email_body += "\ndate : %s" % celery_taskmeta.date_done
            email_body += "\ntraceback :"
            email_body += "\n%s\n\n" % celery_taskmeta.traceback
        email_subject_line = '[URGENT] Celery task failure in last %s minutes' % (TIME_THRESHOLD_INTERVAL)
        send_email(email_subject_line, email_body)


main()

现在在一封电子邮件中,我也得到了完整的堆栈跟踪和任务的id。现在我的要求是每小时检查一次,所以我把脚本放在crontab中。现在您可以根据您的基本需要更改时间阈值并相应地工作。在

您可以配置Datadoghttps://www.datadoghq.com/

它可以监视和跟踪您的动态基础设施。生产服务器上发生的每一个错误都会收到一封电子邮件。在

相关问题 更多 >