Skip to content

Commit

Permalink
feat: send_apikey_usage_emails_task() (#7486)
Browse files Browse the repository at this point in the history
* feat: send_apikey_usage_emails_task

* chore: update test to use task instead of cmd

* chore: add PeriodicTask

* chore: remove old command + empty management dir

* chore: remove now-empty bin/weekly

* refactor: only consider keys that might have events

---------

Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
  • Loading branch information
jennifer-richards and rjsparks committed May 30, 2024
1 parent 020bdeb commit 2ccc230
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 81 deletions.
22 changes: 0 additions & 22 deletions bin/weekly

This file was deleted.

Empty file.
Empty file.
52 changes: 0 additions & 52 deletions ietf/ietfauth/management/commands/send_apikey_usage_emails.py

This file was deleted.

9 changes: 3 additions & 6 deletions ietf/ietfauth/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
from ietf.nomcom.factories import NomComFactory
from ietf.person.factories import PersonFactory, EmailFactory, UserFactory, PersonalApiKeyFactory
from ietf.person.models import Person, Email, PersonalApiKey
from ietf.person.tasks import send_apikey_usage_emails_task
from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory
from ietf.review.models import ReviewWish, UnavailablePeriod
from ietf.stats.models import MeetingRegistration
Expand Down Expand Up @@ -853,9 +854,6 @@ def test_apikey_errors(self):
key2.delete()

def test_send_apikey_report(self):
from ietf.ietfauth.management.commands.send_apikey_usage_emails import Command
from ietf.utils.mail import outbox, empty_outbox

person = RoleFactory(name_id='secr', group__acronym='secretariat').person

url = urlreverse('ietf.ietfauth.views.apikey_create')
Expand All @@ -880,9 +878,8 @@ def test_send_apikey_report(self):
date = str(date_today())

empty_outbox()
cmd = Command()
cmd.handle(verbosity=0, days=7)

send_apikey_usage_emails_task(days=7)

self.assertEqual(len(outbox), len(endpoints))
for mail in outbox:
body = get_payload_text(mail)
Expand Down
41 changes: 40 additions & 1 deletion ietf/person/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,50 @@
import datetime

from celery import shared_task

from django.conf import settings
from django.utils import timezone

from ietf.utils import log
from .models import PersonApiKeyEvent
from ietf.utils.mail import send_mail
from .models import PersonalApiKey, PersonApiKeyEvent


@shared_task
def send_apikey_usage_emails_task(days):
"""Send usage emails to Persons who have API keys"""
earliest = timezone.now() - datetime.timedelta(days=days)
keys = PersonalApiKey.objects.filter(
valid=True,
personapikeyevent__time__gt=earliest,
).distinct()
for key in keys:
events = PersonApiKeyEvent.objects.filter(key=key, time__gt=earliest)
count = events.count()
events = events[:32]
if count:
key_name = key.hash()[:8]
subject = "API key usage for key '%s' for the last %s days" % (
key_name,
days,
)
to = key.person.email_address()
frm = settings.DEFAULT_FROM_EMAIL
send_mail(
None,
to,
frm,
subject,
"utils/apikey_usage_report.txt",
{
"person": key.person,
"days": days,
"key": key,
"key_name": key_name,
"count": count,
"events": events,
},
)

@shared_task
def purge_personal_api_key_events_task(keep_days):
Expand Down
11 changes: 11 additions & 0 deletions ietf/utils/management/commands/periodic_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,17 @@ def create_default_tasks(self):
),
)

PeriodicTask.objects.get_or_create(
name="Send personal API key usage emails",
task="ietf.person.tasks.send_apikey_usage_emails_task",
kwargs=json.dumps(dict(days=7)),
defaults=dict(
enabled=False,
crontab=self.crontabs["weekly"],
description="Send personal API key usage summary emails for the past week",
),
)

PeriodicTask.objects.get_or_create(
name="Purge old personal API key events",
task="ietf.person.tasks.purge_personal_api_key_events_task",
Expand Down

0 comments on commit 2ccc230

Please sign in to comment.