|
@@ -15,34 +15,12 @@ from .. import registry
|
|
|
from ..app import app_or_default
|
|
|
from ..datastructures import ExceptionInfo
|
|
|
from ..execute.trace import TaskTrace
|
|
|
-from ..utils import (noop, kwdict, fun_takes_kwargs,
|
|
|
- get_symbol_by_name, truncate_text)
|
|
|
+from ..utils import noop, kwdict, fun_takes_kwargs, truncate_text
|
|
|
from ..utils.encoding import safe_repr, safe_str, default_encoding
|
|
|
from ..utils.timeutils import maybe_iso8601
|
|
|
|
|
|
from . import state
|
|
|
|
|
|
-# pep8.py borks on a inline signature separator and
|
|
|
-# says "trailing whitespace" ;)
|
|
|
-EMAIL_SIGNATURE_SEP = "-- "
|
|
|
-
|
|
|
-#: format string for the body of an error email.
|
|
|
-TASK_ERROR_EMAIL_BODY = """
|
|
|
-Task %%(name)s with id %%(id)s raised exception:\n%%(exc)r
|
|
|
-
|
|
|
-
|
|
|
-Task was called with args: %%(args)s kwargs: %%(kwargs)s.
|
|
|
-
|
|
|
-The contents of the full traceback was:
|
|
|
-
|
|
|
-%%(traceback)s
|
|
|
-
|
|
|
-%(EMAIL_SIGNATURE_SEP)s
|
|
|
-Just to let you know,
|
|
|
-celeryd at %%(hostname)s.
|
|
|
-""" % {"EMAIL_SIGNATURE_SEP": EMAIL_SIGNATURE_SEP}
|
|
|
-
|
|
|
-
|
|
|
#: Keys to keep from the message delivery info. The values
|
|
|
#: of these keys must be pickleable.
|
|
|
WANTED_DELIVERY_INFO = ("exchange", "routing_key", "consumer_tag", )
|
|
@@ -232,13 +210,8 @@ class TaskRequest(object):
|
|
|
#: Format string used to log task retry.
|
|
|
retry_msg = """Task %(name)s[%(id)s] retry: %(exc)s"""
|
|
|
|
|
|
- #: Format string used to generate error email subjects.
|
|
|
- email_subject = """\
|
|
|
- [celery@%(hostname)s] Error: Task %(name)s (%(id)s): %(exc)s
|
|
|
- """
|
|
|
-
|
|
|
- #: Format string used to generate error email content.
|
|
|
- email_body = TASK_ERROR_EMAIL_BODY
|
|
|
+ email_subject = None
|
|
|
+ email_body = None
|
|
|
|
|
|
#: Timestamp set when the task is started.
|
|
|
time_start = None
|
|
@@ -269,8 +242,8 @@ class TaskRequest(object):
|
|
|
self.hostname = hostname or socket.gethostname()
|
|
|
self.logger = logger or self.app.log.get_default_logger()
|
|
|
self.eventer = eventer
|
|
|
- self.email_subject = email_subject or self.email_subject
|
|
|
- self.email_body = email_body or self.email_body
|
|
|
+ self.email_subject = email_subject
|
|
|
+ self.email_body = email_body
|
|
|
|
|
|
self.task = registry.tasks[self.task_name]
|
|
|
self._store_errors = True
|
|
@@ -516,9 +489,10 @@ class TaskRequest(object):
|
|
|
"hostname": self.hostname}})
|
|
|
|
|
|
task_obj = registry.tasks.get(self.task_name, object)
|
|
|
- self.send_error_email(task_obj, context, exc_info.exception,
|
|
|
- enabled=task_obj.send_error_emails,
|
|
|
- whitelist=task_obj.error_whitelist)
|
|
|
+ task_obj.send_error_email(context,
|
|
|
+ exc_info.exception,
|
|
|
+ subject=self.email_subject,
|
|
|
+ body=self.email_body)
|
|
|
|
|
|
def acknowledge(self):
|
|
|
"""Acknowledge task."""
|
|
@@ -526,16 +500,6 @@ class TaskRequest(object):
|
|
|
self.on_ack()
|
|
|
self.acknowledged = True
|
|
|
|
|
|
- def send_error_email(self, task, context, exc,
|
|
|
- whitelist=None, enabled=False, fail_silently=True):
|
|
|
- if enabled and not task.disable_error_emails:
|
|
|
- if not whitelist or isinstance(exc,
|
|
|
- tuple(map(get_symbol_by_name, whitelist))):
|
|
|
- subject = self.email_subject.strip() % context
|
|
|
- body = self.email_body.strip() % context
|
|
|
- self.app.mail_admins(subject, body,
|
|
|
- fail_silently=fail_silently)
|
|
|
-
|
|
|
def repr_result(self, result, maxlen=46):
|
|
|
# 46 is the length needed to fit
|
|
|
# "the quick brown fox jumps over the lazy dog" :)
|