From ef2529d7a2f7a36547c1e4866756b54e1bccd1e6 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Fri, 30 Aug 2013 15:54:20 +0200 Subject: [PATCH 1/2] - added a cron mode to the management commands --- mailer/management/commands/retry_deferred.py | 12 +++++++++++- mailer/management/commands/send_mail.py | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mailer/management/commands/retry_deferred.py b/mailer/management/commands/retry_deferred.py index 1ba28728..c2d58bf7 100644 --- a/mailer/management/commands/retry_deferred.py +++ b/mailer/management/commands/retry_deferred.py @@ -1,4 +1,5 @@ import logging +from optparse import make_option from django.core.management.base import NoArgsCommand @@ -7,8 +8,17 @@ class Command(NoArgsCommand): help = "Attempt to resend any deferred mail." + base_options = ( + make_option('-c', '--cron', default=0, type='int', + help='If 1 don\'t print messagges, but only errors.' + ), + ) + option_list = NoArgsCommand.option_list + base_options def handle_noargs(self, **options): - logging.basicConfig(level=logging.DEBUG, format="%(message)s") + if options['cron'] == 0: + logging.basicConfig(level=logging.DEBUG, format="%(message)s") + else: + logging.basicConfig(level=logging.ERROR, format="%(message)s") count = Message.objects.retry_deferred() # @@@ new_priority not yet supported logging.info("%s message(s) retried" % count) diff --git a/mailer/management/commands/send_mail.py b/mailer/management/commands/send_mail.py index ff236564..70845ca7 100644 --- a/mailer/management/commands/send_mail.py +++ b/mailer/management/commands/send_mail.py @@ -1,4 +1,5 @@ import logging +from optparse import make_option from django.conf import settings from django.core.management.base import NoArgsCommand @@ -12,9 +13,18 @@ class Command(NoArgsCommand): help = "Do one pass through the mail queue, attempting to send all mail." + base_options = ( + make_option('-c', '--cron', default=0, type='int', + help='If 1 don\'t print messagges, but only errors.' + ), + ) + option_list = NoArgsCommand.option_list + base_options def handle_noargs(self, **options): - logging.basicConfig(level=logging.DEBUG, format="%(message)s") + if options['cron'] == 0: + logging.basicConfig(level=logging.DEBUG, format="%(message)s") + else: + logging.basicConfig(level=logging.ERROR, format="%(message)s") logging.info("-" * 72) # if PAUSE_SEND is turned on don't do anything. if not PAUSE_SEND: From adafd6549e3637388f820968c315976f3c7c6e16 Mon Sep 17 00:00:00 2001 From: Alessandro Nalato Date: Wed, 11 Sep 2013 17:38:07 +0200 Subject: [PATCH 2/2] Forced to default db connection when prioritizing Problems with transactions when reading from slave db connection --- mailer/engine.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/mailer/engine.py b/mailer/engine.py index 28488a98..25ee113c 100644 --- a/mailer/engine.py +++ b/mailer/engine.py @@ -35,18 +35,17 @@ def prioritize(): """ while True: - while Message.objects.high_priority().count() or Message.objects.medium_priority().count(): - while Message.objects.high_priority().count(): - for message in Message.objects.high_priority().order_by("when_added"): + while Message.objects.high_priority().using('default').count() or Message.objects.medium_priority().using('default').count(): + while Message.objects.high_priority().using('default').count(): + for message in Message.objects.high_priority().using('default').order_by("when_added"): yield message - while Message.objects.high_priority().count() == 0 and Message.objects.medium_priority().count(): - yield Message.objects.medium_priority().order_by("when_added")[0] - while Message.objects.high_priority().count() == 0 and Message.objects.medium_priority().count() == 0 and Message.objects.low_priority().count(): - yield Message.objects.low_priority().order_by("when_added")[0] - if Message.objects.non_deferred().count() == 0: + while Message.objects.high_priority().using('default').count() == 0 and Message.objects.medium_priority().using('default').count(): + yield Message.objects.medium_priority().using('default').order_by("when_added")[0] + while Message.objects.high_priority().using('default').count() == 0 and Message.objects.medium_priority().using('default').count() == 0 and Message.objects.low_priority().using('default').count(): + yield Message.objects.low_priority().using('default').order_by("when_added")[0] + if Message.objects.non_deferred().using('default').count() == 0: break - def send_all(): """ Send all eligible messages in the queue.