general: don't log anything for connectors that are down (#25611)

This commit is contained in:
Frédéric Péters 2018-08-13 14:47:21 +02:00
parent b941ca597f
commit fbe5473013
4 changed files with 53 additions and 20 deletions

View File

@ -141,7 +141,7 @@ class BaseResource(models.Model):
def __init__(self, *args, **kwargs):
super(BaseResource, self).__init__(*args, **kwargs)
self.logger = ProxyLogger(self.log_level, self.get_connector_slug(), self.slug)
self.logger = ProxyLogger(connector=self)
def __unicode__(self):
return self.title
@ -238,6 +238,10 @@ class BaseResource(models.Model):
resource_pk=self.pk).first()
return current_status
def down(self):
status = self.get_availability_status()
return (status and status.down())
def export_json(self):
d = {
'@type': 'passerelle-resource',
@ -477,22 +481,22 @@ class ResourceStatus(models.Model):
class ProxyLogger(object):
def __init__(self, level, appname=None, slug=None):
self.appname = appname
self.slug = slug
if appname:
logger_name = 'passerelle.resource.%s.%s' % (self.appname, self.slug)
else:
logger_name = 'passerelle.resource'
def __init__(self, connector):
self.connector = connector
self.appname = connector.get_connector_slug()
self.slug = connector.slug
logger_name = 'passerelle.resource.%s.%s' % (self.appname, self.slug)
self._logger = logging.getLogger(logger_name)
self._logger.setLevel(level)
self._logger.setLevel(connector.log_level)
@property
def level(self):
return self._logger.getEffectiveLevel()
def _log(self, levelname, message, *args, **kwargs):
if self.connector.down():
# don't log if the connector is known to be down
return
levelno = getattr(logging, levelname)
if self._logger.level <= levelno:

0
tests/__init__.py Normal file
View File

View File

@ -84,7 +84,8 @@ def test_proxy_logger(mocked_get, caplog, app, arcgis):
mocked_get.return_value = utils.FakedResponse(content=payload, status_code=200)
# simple logger
logger = ProxyLogger('DEBUG')
arcgis.log_evel = 'DEBUG'
logger = ProxyLogger(connector=arcgis)
logger.debug('this is a debug test')
logger.info('this is an info test')

View File

@ -1,37 +1,65 @@
import logging
import pytest
from httmock import all_requests, HTTMock
from passerelle.base.models import ProxyLogger, ResourceLog
from passerelle.apps.feeds.models import Feed
from .test_availability import down_mock
def test_proxy_logger_basic(db):
pr = ProxyLogger(level=u'DEBUG', appname=u'some-app', slug=u'some-slug')
@pytest.fixture
def connector():
connector, created = Feed.objects.get_or_create(slug='some-slug')
connector.log_level = 'DEBUG'
connector.url = 'http://example.net/'
connector.save()
return connector
def test_proxy_logger_basic(db, connector):
pr = ProxyLogger(connector)
pr.debug(u'some message')
rl_query = ResourceLog.objects.all()
assert len(rl_query) == 1
rl = rl_query.first()
assert rl.message == u'some message'
assert rl.levelno == logging.DEBUG
assert rl.appname == u'some-app'
assert rl.appname == u'feeds'
assert rl.slug == u'some-slug'
def test_proxy_logger_std_interpolation(db):
pr = ProxyLogger(level=u'DEBUG')
def test_proxy_logger_std_interpolation(db, connector):
ResourceLog.objects.all().delete()
pr = ProxyLogger(connector)
pr.debug(u'some message %s', u'some var')
rl_query = ResourceLog.objects.all()
rl = rl_query.first()
assert rl.message == u'some message some var'
def test_proxy_logger_dict_interpolation(db):
pr = ProxyLogger(level=u'DEBUG')
def test_proxy_logger_dict_interpolation(db, connector):
ResourceLog.objects.all().delete()
pr = ProxyLogger(connector)
pr.debug(u'some message %(var_name)s', {u'var_name': u'some var'})
rl_query = ResourceLog.objects.all()
rl = rl_query.first()
assert rl.message == u'some message some var'
def test_proxy_logger_ignore(db):
pr = ProxyLogger(level=u'INFO')
def test_proxy_logger_ignore(db, connector):
ResourceLog.objects.all().delete()
connector.log_level = 'INFO'
pr = ProxyLogger(connector)
pr.debug(u'some message')
assert len(ResourceLog.objects.all()) == 0
def test_proxy_logger_ignore_when_down(db, connector):
with HTTMock(down_mock): # set connector as down
connector.availability()
assert connector.down() is True
ResourceLog.objects.all().delete()
pr = ProxyLogger(connector)
pr.debug(u'some message')
assert len(ResourceLog.objects.all()) == 0