* refactor: replace datetime.now with timezone.now * refactor: migrate model fields to use timezone.now as default * refactor: replace datetime.today with timezone.now datetime.datetime.today() is equivalent to datetime.datetime.now(); both return a naive datetime with the current local time. * refactor: rephrase datetime.now(tz) as timezone.now().astimezone(tz) This is effectively the same, but is less likely to encourage accidental use of naive datetimes. * refactor: revert datetime.today() change to old migrations * refactor: change a missed datetime.now to timezone.now * chore: renumber timezone_now migration * chore: renumber migrations
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
# Copyright The IETF Trust 2017-2020, All Rights Reserved
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
import datetime
|
|
|
|
from textwrap import dedent
|
|
|
|
from django.conf import settings
|
|
from django.core.management.base import BaseCommand
|
|
from django.utils import timezone
|
|
|
|
import debug # pyflakes:ignore
|
|
|
|
from ietf.person.models import PersonalApiKey, PersonApiKeyEvent
|
|
from ietf.utils.mail import send_mail
|
|
|
|
|
|
class Command(BaseCommand):
|
|
"""
|
|
Send out emails to all persons who have personal API keys about usage.
|
|
|
|
Usage is show over the given period, where the default period is 7 days.
|
|
"""
|
|
|
|
help = dedent(__doc__).strip()
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument('-d', '--days', dest='days', type=int, default=7,
|
|
help='The period over which to show usage.')
|
|
|
|
def handle(self, *filenames, **options):
|
|
"""
|
|
"""
|
|
|
|
self.verbosity = int(options.get('verbosity'))
|
|
days = options.get('days')
|
|
|
|
keys = PersonalApiKey.objects.filter(valid=True)
|
|
for key in keys:
|
|
earliest = timezone.now() - datetime.timedelta(days=days)
|
|
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, } )
|
|
|