Projet

Général

Profil

0001-base-do-not-log-errors-in-check-status-45001.patch

Valentin Deniaud, 21 juillet 2021 15:53

Télécharger (2,9 ko)

Voir les différences:

Subject: [PATCH] base: do not log errors in check status (#45001)

 passerelle/base/models.py | 13 ++++++++++++-
 tests/test_misc.py        | 13 +++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)
passerelle/base/models.py
10 10
import sys
11 11
import traceback
12 12
import uuid
13
from contextlib import contextmanager
13 14

  
14 15
from django import VERSION
15 16
from django.apps import apps
......
482 483
        availability_parameters = self.availability_parameters
483 484

  
484 485
        try:
485
            self.check_status()
486
            with self.logger.suspend_logging():
487
                self.check_status()
486 488
            status = 'up'
487 489
            message = ''
488 490
        except NotImplementedError:
......
905 907
    def level(self):
906 908
        return self._logger.getEffectiveLevel()
907 909

  
910
    @contextmanager
911
    def suspend_logging(self):
912
        previous_level = self.level
913
        self._logger.setLevel(logging.CRITICAL)
914
        try:
915
            yield
916
        finally:
917
            self._logger.setLevel(previous_level)
918

  
908 919
    def _log(self, levelname, message, *args, **kwargs):
909 920
        force = kwargs.pop('force', False)
910 921
        if self.connector.down() and not force:
tests/test_misc.py
1 1
import datetime
2 2

  
3
import mock
3 4
import pytest
4 5
from django.contrib.contenttypes.models import ContentType
5 6
from django.core.files import File
......
9 10
from django.utils import timezone
10 11
from django.utils.six import StringIO
11 12
from mock import patch
13
from requests.exceptions import ReadTimeout
12 14
from test_manager import login
13 15

  
16
from passerelle.apps.base_adresse.models import BaseAdresse
14 17
from passerelle.apps.clicrdv.models import ClicRdv
15 18
from passerelle.apps.opengis.models import OpenGIS
16 19
from passerelle.base.models import ResourceLog
......
172 175
    CsvDataSource = apps.get_model(app, 'CsvDataSource')
173 176
    connector = CsvDataSource.objects.get(pk=pk)
174 177
    assert connector._dialect_options == data
178

  
179

  
180
def test_check_status_no_traceback_email(db, settings, email_handler, mailoutbox):
181
    settings.ADMINS = [('admin', 'admin@example.net')]
182
    connector = BaseAdresse.objects.create(slug='base-adresse')
183

  
184
    with mock.patch('requests.sessions.HTTPAdapter.send', autospec=True, side_effect=ReadTimeout('timeout')):
185
        connector.availability()
186
    assert len(mailoutbox) == 1
187
    assert 'is now down' in mailoutbox[0].subject
175
-