Skip to content

Commit 054fe23

Browse files
committed
add instant five minute celery task
1 parent 76bbfe7 commit 054fe23

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

notifications/tasks.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,3 +313,29 @@ def remove_subscription_task(node_id):
313313
object_id=node.id,
314314
content_type=ContentType.objects.get_for_model(node),
315315
).delete()
316+
317+
318+
@celery_app.task(bind=True, name='notifications.tasks.send_users_instant_digest_email')
319+
def send_users_instant_digest_email(dry_run):
320+
"""Send pending "instant' digest emails.
321+
:return:
322+
"""
323+
grouped_emails = get_users_emails('instantly')
324+
for group in grouped_emails:
325+
user_id = group['user_id']
326+
notification_ids = [msg['notification_id'] for msg in group['info']]
327+
if not dry_run:
328+
send_user_email_task.delay(user_id, notification_ids, 'instantly')
329+
330+
@celery_app.task(bind=True, name='notifications.tasks.send_moderators_instant_digest_email')
331+
def send_moderators_instant_digest_email(dry_run=False):
332+
"""Send pending "instant' digest emails.
333+
:return:
334+
"""
335+
grouped_emails = get_moderators_emails('instantly')
336+
for group in grouped_emails:
337+
user_id = group['user_id']
338+
provider_id = group['provider_id']
339+
notification_ids = [msg['notification_id'] for msg in group['info']]
340+
if not dry_run:
341+
send_moderator_email_task.delay(user_id, provider_id, notification_ids, 'instantly')

osf/models/notification_subscription.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,12 @@ def emit(
8989
)
9090
if save:
9191
notification.save()
92-
notification.send(
93-
destination_address=destination_address,
94-
email_context=email_context,
95-
save=save,
96-
)
92+
if not self._is_digest: # instant digests are sent every 5 minutes.
93+
notification.send(
94+
destination_address=destination_address,
95+
email_context=email_context,
96+
save=save,
97+
)
9798
else:
9899
Notification.objects.create(
99100
subscription=self,

website/settings/defaults.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,16 @@ class CeleryConfig:
622622
'schedule': crontab(minute=0, hour=5), # Daily 12 a.m
623623
'kwargs': {'dry_run': False},
624624
},
625+
'5-minute-user-emails': {
626+
'task': 'notifications.tasks.send_moderators_instant_digest_email',
627+
'schedule': crontab(minute='*/5'),
628+
'kwargs': {'dry_run': False},
629+
},
630+
'5-minute-moderator-emails': {
631+
'task': 'notifications.tasks.send_moderators_instant_digest_email',
632+
'schedule': crontab(minute='*/5'),
633+
'kwargs': {'dry_run': False},
634+
},
625635
'send_moderators_digest_email': {
626636
'task': 'notifications.tasks.send_moderators_digest_email',
627637
'schedule': crontab(minute=0, hour=5), # Daily 12 a.m

0 commit comments

Comments
 (0)