# Copyright The IETF Trust 2024, All Rights Reserved # # Celery task definitions # import datetime from celery import shared_task from django.conf import settings from django.utils import timezone from ietf.utils import log 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): keep_since = timezone.now() - datetime.timedelta(days=keep_days) old_events = PersonApiKeyEvent.objects.filter(time__lt=keep_since) count = len(old_events) old_events.delete() log.log(f"Deleted {count} PersonApiKeyEvents older than {keep_since}")