75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
#!/srv/venv/bin/python
|
|
|
|
import sys
|
|
import os
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from rowers.models import Alert, Condition, User
|
|
from rowers.tasks import handle_send_email_alert
|
|
|
|
from rowers import alerts
|
|
|
|
from rowers.utils import myqueue, dologging
|
|
|
|
import datetime
|
|
|
|
import django_rq
|
|
|
|
PY3K = sys.version_info >= (3, 0)
|
|
|
|
queue = django_rq.get_queue('default')
|
|
queuelow = django_rq.get_queue('low')
|
|
queuehigh = django_rq.get_queue('low')
|
|
|
|
|
|
class Command(BaseCommand):
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
'--testing',
|
|
action='store_true',
|
|
dest='testing',
|
|
default=False,
|
|
help="Run in testing mode, don't send emails", )
|
|
|
|
def handle(self, *args, **options):
|
|
if 'testing' in options:
|
|
testing = options['testing']
|
|
else:
|
|
testing = False
|
|
|
|
todaysalerts = Alert.objects.filter(
|
|
next_run__lt=datetime.date.today(), emailalert=True)
|
|
|
|
for alert in todaysalerts:
|
|
stats = alerts.alert_get_stats(alert)
|
|
|
|
# explanatorytexts
|
|
othertexts = [alert.description()]
|
|
|
|
# send email
|
|
_ = myqueue(queue, handle_send_email_alert,
|
|
alert.manager.email,
|
|
alert.manager.first_name,
|
|
alert.manager.last_name,
|
|
alert.rower.user.first_name,
|
|
alert.rower.user.last_name,
|
|
alert.name,
|
|
stats, debug=True,
|
|
othertexts=othertexts)
|
|
|
|
dologging('alerts.log', 'Sent alert {id} to {email}'.format(
|
|
id = alert.id,
|
|
email = alert.manager.email,
|
|
))
|
|
|
|
# advance next_run
|
|
if not testing:
|
|
alert.next_run = datetime.date.today() + datetime.timedelta(days=alert.period-1)
|
|
alert.save()
|
|
|
|
if testing:
|
|
print('{nr} alerts found'.format(nr=len(todaysalerts)))
|
|
|
|
self.stdout.write(self.style.SUCCESS(
|
|
'Successfully processed alerts'))
|