Projet

Général

Profil

0002-misc-simplify-logging-in-clean-unused-accounts-41284.patch

Benjamin Dauvergne, 03 avril 2020 12:29

Télécharger (3,97 ko)

Voir les différences:

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(-)
src/authentic2/management/commands/clean-unused-accounts.py
17 17
from __future__ import print_function
18 18

  
19 19
import logging
20
import smtplib
21 20

  
22 21
from datetime import timedelta
23 22
from django.contrib.auth import get_user_model
......
39 38
class Command(BaseCommand):
40 39
    help = '''Clean unused accounts'''
41 40

  
41
    verbosity_to_log_level = {
42
        0: logging.CRITICAL,
43
        1: logging.WARNING,
44
        2: logging.INFO,
45
        3: logging.DEBUG,
46
    }
47

  
42 48
    def add_arguments(self, parser):
43 49
        parser.add_argument("--fake", action='store_true', help='do nothing', default=False)
44 50

  
45 51
    def handle(self, *args, **options):
46
        if options['verbosity'] == '0':
47
            logger.setLevel(level=logging.CRITICAL)
48
        if options['verbosity'] == '1':
49
            logger.setLevel(level=logging.WARNING)
50
        elif options['verbosity'] == '2':
51
            logger.setLevel(level=logging.INFO)
52
        elif options['verbosity'] == '3':
53
            logger.setLevel(level=logging.DEBUG)
54 52
        self.fake = options['fake']
55 53

  
56
        self.clean_unused_accounts()
54
        # add StreamHandler for console output
55
        handler = logging.StreamHandler()
56
        handler.setLevel(level=self.verbosity_to_log_level[options['verbosity']])
57
        logger.addHandler(handler)
58
        # prevent logging to external logs when fake
59
        if self.fake:
60
            logger.propagate = False
61

  
62
        try:
63
            self.clean_unused_accounts()
64
        except Exception:
65
            logger.exception('clean-unused-accounts failed')
57 66

  
58 67
    def clean_unused_accounts(self):
59 68
        now = timezone.now()
60
        if self.fake:
61
            logger.info('fake call to clean-unused-accounts')
62 69

  
63 70
        for ou in get_ou_model().objects.filter(clean_unused_accounts_alert__isnull=False):
64 71
            alert_delay = timedelta(days=ou.clean_unused_accounts_alert)
......
87 94
            'days_to_deletion': days_to_deletion,
88 95
            'login_url': urlparse.urljoin(settings.SITE_BASE_URL, settings.LOGIN_URL),
89 96
        }
90
        try:
91
            self.send_mail('authentic2/unused_account_alert', user, ctx)
92
        except smtplib.SMTPException as e:
93
            logger.exception('email sending failure: %s', e)
94
        else:
95
            if not self.fake:
96
                user.last_account_deletion_alert = timezone.now()
97
                user.save()
97
        self.send_mail('authentic2/unused_account_alert', user, ctx)
98
        if not self.fake:
99
            user.last_account_deletion_alert = timezone.now()
100
            user.save()
98 101

  
99 102
    def send_mail(self, prefix, user, ctx):
100 103
        if not user.email:
101 104
            logger.debug('%s has no email, no mail sent', user)
102
        if not self.fake:
105
        else:
103 106
            logger.debug('sending mail to %s', user.email)
104
            send_templated_mail(user.email, prefix, ctx)
107
            if not self.fake:
108
                send_templated_mail(user.email, prefix, ctx)
105 109

  
106 110
    def delete_user(self, user):
107 111
        ctx = {'user': user}
108
        try:
109
            self.send_mail('authentic2/unused_account_delete', user, ctx)
110
        except smtplib.SMTPException as e:
111
            logger.exception('email sending failure: %s', e)
112
        self.send_mail('authentic2/unused_account_delete', user, ctx)
112 113
        if not self.fake:
113 114
            DeletedUser.objects.delete_user(user)
114
-