Advertisement
Guest User

Untitled

a guest
Jul 30th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. CELERY_SEND_TASK_ERROR_EMAILS = True
  2.  
  3. EMAIL_USE_TLS = True
  4. EMAIL_HOST_USER = 'noreply@xyz.com'
  5. EMAIL_HOST_PASSWORD = 'xyz123@'
  6. DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
  7. SERVER_EMAIL = EMAIL_HOST_USER
  8. EMAIL_HOST = 'xyz.abc.com'
  9. EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  10.  
  11. #!venv/bin/python2
  12.  
  13. import os
  14. from django.conf import settings
  15.  
  16. if __name__ == '__main__' and __package__ is None:
  17. os.sys.path.append(
  18. os.path.dirname(
  19. os.path.dirname(
  20. os.path.abspath(__file__))))
  21.  
  22. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rest_apis.settings")
  23.  
  24. import django
  25.  
  26. django.setup()
  27. from django.core.mail import EmailMessage
  28. from djcelery.models import TaskMeta
  29. from datetime import datetime, timedelta, time
  30.  
  31.  
  32. USERS_TO_NOTIFY = ['ops@yopmail.com']
  33. TIME_THRESHOLD_INTERVAL = 60
  34.  
  35. def send_email(email_subject_line, email_body):
  36. email = EmailMessage(email_subject_line,
  37. email_body,
  38. settings.EMAIL_HOST_USER,
  39. USERS_TO_NOTIFY
  40. )
  41. email.send()
  42.  
  43.  
  44. def main():
  45. current_time = datetime.now() # Get Current TimeStamp
  46. time_threshold = current_time - timedelta(minutes=TIME_THRESHOLD_INTERVAL) # Get 60 minutes past current time stamp
  47. celery_taskmeta_objects = TaskMeta.objects.filter(status="FAILURE", date_done__gte=time_threshold)
  48.  
  49. email_body = "Below are the tasks which failed : "
  50. if celery_taskmeta_objects.exists():
  51. for celery_taskmeta in celery_taskmeta_objects:
  52. print celery_taskmeta.task_id
  53. email_body += "nntask_id : %s" % celery_taskmeta.task_id
  54. email_body += "nstatus : %s" % celery_taskmeta.status
  55. email_body += "ndate : %s" % celery_taskmeta.date_done
  56. email_body += "ntraceback :"
  57. email_body += "n%snn" % celery_taskmeta.traceback
  58. email_subject_line = '[URGENT] Celery task failure in last %s minutes' % (TIME_THRESHOLD_INTERVAL)
  59. send_email(email_subject_line, email_body)
  60.  
  61.  
  62. main()
  63.  
  64. class MyTask(celery.Task):
  65. def on_failure(self, exc, task_id, args, kwargs, einfo):
  66. # here you can place mail_admins(...) call
  67. print('{0!r} failed: {1!r}'.format(task_id, exc))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement