general: don't log anything for connectors that are down (#25611)
This commit is contained in:
parent
b941ca597f
commit
fbe5473013
|
@ -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:
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue