From 6831c252f1681671ba2a1931617d259d33b64ff0 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Wed, 21 Jul 2021 15:48:41 +0200 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(-) diff --git a/passerelle/base/models.py b/passerelle/base/models.py index e6628880..a7b91cc9 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -10,6 +10,7 @@ import re import sys import traceback import uuid +from contextlib import contextmanager from django import VERSION from django.apps import apps @@ -482,7 +483,8 @@ class BaseResource(models.Model): availability_parameters = self.availability_parameters try: - self.check_status() + with self.logger.suspend_logging(): + self.check_status() status = 'up' message = '' except NotImplementedError: @@ -905,6 +907,15 @@ class ProxyLogger(object): def level(self): return self._logger.getEffectiveLevel() + @contextmanager + def suspend_logging(self): + previous_level = self.level + self._logger.setLevel(logging.CRITICAL) + try: + yield + finally: + self._logger.setLevel(previous_level) + def _log(self, levelname, message, *args, **kwargs): force = kwargs.pop('force', False) if self.connector.down() and not force: diff --git a/tests/test_misc.py b/tests/test_misc.py index 05f2df94..3a9e10a2 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -1,5 +1,6 @@ import datetime +import mock import pytest from django.contrib.contenttypes.models import ContentType from django.core.files import File @@ -9,8 +10,10 @@ from django.urls import reverse from django.utils import timezone from django.utils.six import StringIO from mock import patch +from requests.exceptions import ReadTimeout from test_manager import login +from passerelle.apps.base_adresse.models import BaseAdresse from passerelle.apps.clicrdv.models import ClicRdv from passerelle.apps.opengis.models import OpenGIS from passerelle.base.models import ResourceLog @@ -172,3 +175,13 @@ def test_jsonb_migration(transactional_db): CsvDataSource = apps.get_model(app, 'CsvDataSource') connector = CsvDataSource.objects.get(pk=pk) assert connector._dialect_options == data + + +def test_check_status_no_traceback_email(db, settings, email_handler, mailoutbox): + settings.ADMINS = [('admin', 'admin@example.net')] + connector = BaseAdresse.objects.create(slug='base-adresse') + + with mock.patch('requests.sessions.HTTPAdapter.send', autospec=True, side_effect=ReadTimeout('timeout')): + connector.availability() + assert len(mailoutbox) == 1 + assert 'is now down' in mailoutbox[0].subject -- 2.20.1