misc: simplify logging in clean-unused-accounts (#41284)

This commit is contained in:
Benjamin Dauvergne 2020-04-03 12:16:35 +02:00
parent f2f80d5f30
commit 426891a7a0
1 changed files with 27 additions and 26 deletions

View File

@ -17,7 +17,6 @@
from __future__ import print_function
import logging
import smtplib
from datetime import timedelta
from django.contrib.auth import get_user_model
@ -39,26 +38,34 @@ User = get_user_model()
class Command(BaseCommand):
help = '''Clean unused accounts'''
verbosity_to_log_level = {
0: logging.CRITICAL,
1: logging.WARNING,
2: logging.INFO,
3: logging.DEBUG,
}
def add_arguments(self, parser):
parser.add_argument("--fake", action='store_true', help='do nothing', default=False)
def handle(self, *args, **options):
if options['verbosity'] == '0':
logger.setLevel(level=logging.CRITICAL)
if options['verbosity'] == '1':
logger.setLevel(level=logging.WARNING)
elif options['verbosity'] == '2':
logger.setLevel(level=logging.INFO)
elif options['verbosity'] == '3':
logger.setLevel(level=logging.DEBUG)
self.fake = options['fake']
self.clean_unused_accounts()
# add StreamHandler for console output
handler = logging.StreamHandler()
handler.setLevel(level=self.verbosity_to_log_level[options['verbosity']])
logger.addHandler(handler)
# prevent logging to external logs when fake
if self.fake:
logger.propagate = False
try:
self.clean_unused_accounts()
except Exception:
logger.exception('clean-unused-accounts failed')
def clean_unused_accounts(self):
now = timezone.now()
if self.fake:
logger.info('fake call to clean-unused-accounts')
for ou in get_ou_model().objects.filter(clean_unused_accounts_alert__isnull=False):
alert_delay = timedelta(days=ou.clean_unused_accounts_alert)
@ -87,27 +94,21 @@ class Command(BaseCommand):
'days_to_deletion': days_to_deletion,
'login_url': urlparse.urljoin(settings.SITE_BASE_URL, settings.LOGIN_URL),
}
try:
self.send_mail('authentic2/unused_account_alert', user, ctx)
except smtplib.SMTPException as e:
logger.exception('email sending failure: %s', e)
else:
if not self.fake:
user.last_account_deletion_alert = timezone.now()
user.save()
self.send_mail('authentic2/unused_account_alert', user, ctx)
if not self.fake:
user.last_account_deletion_alert = timezone.now()
user.save()
def send_mail(self, prefix, user, ctx):
if not user.email:
logger.debug('%s has no email, no mail sent', user)
if not self.fake:
else:
logger.debug('sending mail to %s', user.email)
send_templated_mail(user.email, prefix, ctx)
if not self.fake:
send_templated_mail(user.email, prefix, ctx)
def delete_user(self, user):
ctx = {'user': user}
try:
self.send_mail('authentic2/unused_account_delete', user, ctx)
except smtplib.SMTPException as e:
logger.exception('email sending failure: %s', e)
self.send_mail('authentic2/unused_account_delete', user, ctx)
if not self.fake:
DeletedUser.objects.delete_user(user)