0001-general-don-t-log-anything-for-connectors-that-are-d.patch
passerelle/base/models.py | ||
---|---|---|
141 | 141 | |
142 | 142 |
def __init__(self, *args, **kwargs): |
143 | 143 |
super(BaseResource, self).__init__(*args, **kwargs) |
144 |
self.logger = ProxyLogger(self.log_level, self.get_connector_slug(), self.slug)
|
|
144 |
self.logger = ProxyLogger(connector=self)
|
|
145 | 145 | |
146 | 146 |
def __unicode__(self): |
147 | 147 |
return self.title |
... | ... | |
238 | 238 |
resource_pk=self.pk).first() |
239 | 239 |
return current_status |
240 | 240 | |
241 |
def down(self): |
|
242 |
status = self.get_availability_status() |
|
243 |
return (status and status.down()) |
|
244 | ||
241 | 245 |
def export_json(self): |
242 | 246 |
d = { |
243 | 247 |
'@type': 'passerelle-resource', |
... | ... | |
477 | 481 | |
478 | 482 |
class ProxyLogger(object): |
479 | 483 | |
480 |
def __init__(self, level, appname=None, slug=None): |
|
481 |
self.appname = appname |
|
482 |
self.slug = slug |
|
483 |
if appname: |
|
484 |
logger_name = 'passerelle.resource.%s.%s' % (self.appname, self.slug) |
|
485 |
else: |
|
486 |
logger_name = 'passerelle.resource' |
|
487 | ||
484 |
def __init__(self, connector): |
|
485 |
self.connector = connector |
|
486 |
self.appname = connector.get_connector_slug() |
|
487 |
self.slug = connector.slug |
|
488 |
logger_name = 'passerelle.resource.%s.%s' % (self.appname, self.slug) |
|
488 | 489 |
self._logger = logging.getLogger(logger_name) |
489 |
self._logger.setLevel(level) |
|
490 |
self._logger.setLevel(connector.log_level)
|
|
490 | 491 | |
491 | 492 |
@property |
492 | 493 |
def level(self): |
493 | 494 |
return self._logger.getEffectiveLevel() |
494 | 495 | |
495 | 496 |
def _log(self, levelname, message, *args, **kwargs): |
497 |
if self.connector.down(): |
|
498 |
# don't log if the connector is known to be down |
|
499 |
return |
|
496 | 500 |
levelno = getattr(logging, levelname) |
497 | 501 |
if self._logger.level <= levelno: |
498 | 502 |
tests/test_generic_endpoint.py | ||
---|---|---|
84 | 84 |
mocked_get.return_value = utils.FakedResponse(content=payload, status_code=200) |
85 | 85 | |
86 | 86 |
# simple logger |
87 |
logger = ProxyLogger('DEBUG') |
|
87 |
arcgis.log_evel = 'DEBUG' |
|
88 |
logger = ProxyLogger(connector=arcgis) |
|
88 | 89 |
logger.debug('this is a debug test') |
89 | 90 |
logger.info('this is an info test') |
90 | 91 |
tests/test_proxylogger.py | ||
---|---|---|
1 | 1 |
import logging |
2 | 2 | |
3 |
import pytest |
|
4 |
from httmock import all_requests, HTTMock |
|
5 | ||
3 | 6 |
from passerelle.base.models import ProxyLogger, ResourceLog |
7 |
from passerelle.apps.feeds.models import Feed |
|
8 | ||
9 |
from .test_availability import down_mock |
|
10 | ||
11 | ||
12 |
@pytest.fixture |
|
13 |
def connector(): |
|
14 |
connector, created = Feed.objects.get_or_create(slug='some-slug') |
|
15 |
connector.log_level = 'DEBUG' |
|
16 |
connector.url = 'http://example.net/' |
|
17 |
connector.save() |
|
18 |
return connector |
|
4 | 19 | |
5 | 20 | |
6 |
def test_proxy_logger_basic(db): |
|
7 |
pr = ProxyLogger(level=u'DEBUG', appname=u'some-app', slug=u'some-slug')
|
|
21 |
def test_proxy_logger_basic(db, connector):
|
|
22 |
pr = ProxyLogger(connector)
|
|
8 | 23 |
pr.debug(u'some message') |
9 | 24 |
rl_query = ResourceLog.objects.all() |
10 | 25 |
assert len(rl_query) == 1 |
11 | 26 |
rl = rl_query.first() |
12 | 27 |
assert rl.message == u'some message' |
13 | 28 |
assert rl.levelno == logging.DEBUG |
14 |
assert rl.appname == u'some-app'
|
|
29 |
assert rl.appname == u'feeds'
|
|
15 | 30 |
assert rl.slug == u'some-slug' |
16 | 31 | |
17 | 32 | |
18 |
def test_proxy_logger_std_interpolation(db): |
|
19 |
pr = ProxyLogger(level=u'DEBUG') |
|
33 |
def test_proxy_logger_std_interpolation(db, connector): |
|
34 |
ResourceLog.objects.all().delete() |
|
35 |
pr = ProxyLogger(connector) |
|
20 | 36 |
pr.debug(u'some message %s', u'some var') |
21 | 37 |
rl_query = ResourceLog.objects.all() |
22 | 38 |
rl = rl_query.first() |
23 | 39 |
assert rl.message == u'some message some var' |
24 | 40 | |
25 | 41 | |
26 |
def test_proxy_logger_dict_interpolation(db): |
|
27 |
pr = ProxyLogger(level=u'DEBUG') |
|
42 |
def test_proxy_logger_dict_interpolation(db, connector): |
|
43 |
ResourceLog.objects.all().delete() |
|
44 |
pr = ProxyLogger(connector) |
|
28 | 45 |
pr.debug(u'some message %(var_name)s', {u'var_name': u'some var'}) |
29 | 46 |
rl_query = ResourceLog.objects.all() |
30 | 47 |
rl = rl_query.first() |
31 | 48 |
assert rl.message == u'some message some var' |
32 | 49 | |
33 | 50 | |
34 |
def test_proxy_logger_ignore(db): |
|
35 |
pr = ProxyLogger(level=u'INFO') |
|
51 |
def test_proxy_logger_ignore(db, connector): |
|
52 |
ResourceLog.objects.all().delete() |
|
53 |
connector.log_level = 'INFO' |
|
54 |
pr = ProxyLogger(connector) |
|
55 |
pr.debug(u'some message') |
|
56 |
assert len(ResourceLog.objects.all()) == 0 |
|
57 | ||
58 |
def test_proxy_logger_ignore_when_down(db, connector): |
|
59 |
with HTTMock(down_mock): # set connector as down |
|
60 |
connector.availability() |
|
61 |
assert connector.down() is True |
|
62 |
ResourceLog.objects.all().delete() |
|
63 |
pr = ProxyLogger(connector) |
|
36 | 64 |
pr.debug(u'some message') |
37 | 65 |
assert len(ResourceLog.objects.all()) == 0 |
38 |
- |