Private
Public Access
1
0
Files
rowsandall/rowers/management/commands/processalerts.py
Sander Roosendaal e908aa1ea6 fix alerts
2022-10-24 22:18:39 +02:00

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'))