Introduced MaxRetries and MaxRetriesExceededError handling code
This commit is contained in:
parent
e7864f5d85
commit
58bb754814
1 changed files with 18 additions and 17 deletions
|
@ -10,6 +10,7 @@ from datetime import datetime
|
|||
from membership.models import StripeCustomer
|
||||
from django.core.mail import EmailMessage
|
||||
from utils.models import BillingAddress
|
||||
from celery.exceptions import MaxRetriesExceededError
|
||||
|
||||
logger = get_task_logger(__name__)
|
||||
|
||||
|
@ -37,24 +38,10 @@ def retry_task(task, exception=None):
|
|||
if exception:
|
||||
kwargs['exc'] = exception
|
||||
|
||||
if task.request.retries > settings.CELERY_MAX_RETRIES:
|
||||
msg_text = 'Finished {} retries for create_vm_task'.format(task.request.retries)
|
||||
logger.log(msg_text)
|
||||
# Try sending email and stop
|
||||
email_data = {
|
||||
'subject': '{} CELERY TASK ERROR: {}'.format(settings.DCL_TEXT, msg_text),
|
||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||
'to': ['info@ungleich.ch'],
|
||||
'body': "\n".join(["%s=%s" % (k, v) for (k, v) in kwargs.items()]),
|
||||
}
|
||||
email = EmailMessage(**email_data)
|
||||
email.send()
|
||||
return
|
||||
else:
|
||||
raise task.retry(**kwargs)
|
||||
raise task.retry(**kwargs)
|
||||
|
||||
|
||||
@app.task(bind=True)
|
||||
@app.task(bind=True, max_retries=settings.CELERY_MAX_RETRIES)
|
||||
def create_vm_task(self, vm_template_id, user, specs, template, stripe_customer_id, billing_address_data,
|
||||
billing_address_id,
|
||||
charge):
|
||||
|
@ -134,7 +121,21 @@ def create_vm_task(self, vm_template_id, user, specs, template, stripe_customer_
|
|||
email.send()
|
||||
except Exception as e:
|
||||
logger.error(str(e))
|
||||
retry_task(self)
|
||||
try:
|
||||
retry_task(self)
|
||||
except MaxRetriesExceededError:
|
||||
msg_text = 'Finished {} retries for create_vm_task'.format(self.request.retries)
|
||||
logger.error(msg_text)
|
||||
# Try sending email and stop
|
||||
email_data = {
|
||||
'subject': '{} CELERY TASK ERROR: {}'.format(settings.DCL_TEXT, msg_text),
|
||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||
'to': ['info@ungleich.ch'],
|
||||
'body':',\n'.join(str(i) for i in self.request.args)
|
||||
}
|
||||
email = EmailMessage(**email_data)
|
||||
email.send()
|
||||
return
|
||||
|
||||
return vm_id
|
||||
|
||||
|
|
Loading…
Reference in a new issue