|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +# Copyright The IETF Trust 2017, All Rights Reserved |
| 3 | +from __future__ import print_function, unicode_literals |
| 4 | + |
| 5 | +import datetime |
| 6 | + |
| 7 | +from textwrap import dedent |
| 8 | + |
| 9 | +from django.conf import settings |
| 10 | +from django.core.management.base import BaseCommand |
| 11 | + |
| 12 | +import debug # pyflakes:ignore |
| 13 | + |
| 14 | +from ietf.person.models import PersonalApiKey, PersonApiKeyEvent |
| 15 | +from ietf.utils.mail import send_mail |
| 16 | + |
| 17 | + |
| 18 | +class Command(BaseCommand): |
| 19 | + """ |
| 20 | + Send out emails to all persons who have personal API keys about usage. |
| 21 | +
|
| 22 | + Usage is show over the given period, where the default period is 7 days. |
| 23 | + """ |
| 24 | + |
| 25 | + help = dedent(__doc__).strip() |
| 26 | + |
| 27 | + def add_arguments(self, parser): |
| 28 | + parser.add_argument('-d', '--days', dest='days', type=int, default=7, |
| 29 | + help='The period over which to show usage.') |
| 30 | + |
| 31 | + def handle(self, *filenames, **options): |
| 32 | + """ |
| 33 | + """ |
| 34 | + |
| 35 | + self.verbosity = int(options.get('verbosity')) |
| 36 | + days = options.get('days') |
| 37 | + |
| 38 | + keys = PersonalApiKey.objects.filter(valid=True) |
| 39 | + for key in keys: |
| 40 | + earliest = datetime.datetime.now() - datetime.timedelta(days=days) |
| 41 | + events = PersonApiKeyEvent.objects.filter(key=key, time__gt=earliest) |
| 42 | + count = events.count() |
| 43 | + events = events[:32] |
| 44 | + if count: |
| 45 | + key_name = key.hash()[:8] |
| 46 | + subject = "API key usage for key '%s' for the last %s days" %(key_name, days) |
| 47 | + to = key.person.email_address() |
| 48 | + frm = settings.DEFAULT_FROM_EMAIL |
| 49 | + send_mail(None, to, frm, subject, 'utils/apikey_usage_report.txt', {'person':key.person, |
| 50 | + 'days':days, 'key':key, 'key_name':key_name, 'count':count, 'events':events, } ) |
| 51 | + |
0 commit comments