From 426891a7a024452076fbd612700f5877048e8ef3 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 3 Apr 2020 12:16:35 +0200 Subject: [PATCH 2/3] misc: simplify logging in clean-unused-accounts (#41284) --- .../commands/clean-unused-accounts.py | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/src/authentic2/management/commands/clean-unused-accounts.py b/src/authentic2/management/commands/clean-unused-accounts.py index 0e07accf..7ec6dfd7 100644 --- a/src/authentic2/management/commands/clean-unused-accounts.py +++ b/src/authentic2/management/commands/clean-unused-accounts.py @@ -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) -- 2.24.0