logs: log 405 error as warning using ProxyLogger (#51263)

This commit is contained in:
Nicolas Roche 2021-03-17 12:41:55 +01:00
parent 0b542110ca
commit c693de3344
2 changed files with 39 additions and 2 deletions

View File

@ -450,7 +450,20 @@ class GenericEndpointView(GenericConnectorMixin, SingleObjectMixin, View):
return is_authorized(request, self.connector, perm)
def perform(self, request, *args, **kwargs):
connector_name, endpoint_name = kwargs['connector'], kwargs['endpoint']
url = request.get_full_path()
if request.method.lower() not in self.endpoint.endpoint_info.methods:
self.connector.logger.warning(
'endpoint %s %s (=> 405)' % (request.method, url),
extra={
'request': request,
'connector': connector_name,
'connector_endpoint': endpoint_name,
'connector_endpoint_method': self._allowed_methods(),
'connector_endpoint_url': url,
},
)
return self.http_method_not_allowed(request, *args, **kwargs)
if not self.check_perms(request):
raise PermissionDenied()
@ -476,8 +489,6 @@ class GenericEndpointView(GenericConnectorMixin, SingleObjectMixin, View):
raise WrongParameter(missing, extra)
# auto log request's inputs
connector_name, endpoint_name = kwargs['connector'], kwargs['endpoint']
url = request.get_full_path()
payload = request.body[
: self.connector.logging_parameters.requests_max_size or settings.LOGGED_REQUESTS_MAX_SIZE
]

View File

@ -157,6 +157,32 @@ def test_proxy_logger_transaction_id(mocked_send, app, arcgis):
assert log1.extra['transaction_id'] == log2.extra['transaction_id']
@mock.patch('passerelle.utils.Request.patch')
def test_proxy_logger_on_405(mocked_patch, caplog, app, arcgis):
mocked_patch.return_value = utils.FakedResponse(status_code=500)
# simple logger
arcgis.log_evel = 'WARNING'
log = ResourceLog.objects.filter(appname='arcgis', slug='test').delete()
caplog.clear()
resp = app.patch('/arcgis/test/district', status=405)
assert not resp.text
# Resource Custom DB Logger
log = ResourceLog.objects.filter(appname='arcgis', slug='test').first()
assert log.levelno == 30
assert log.message == 'endpoint PATCH /arcgis/test/district (=> 405)'
assert log.extra['connector_endpoint_method'] == ['GET']
# Resource Generic Logger
for record in caplog.records:
if record.name != 'passerelle.resource.arcgis.test':
continue
assert record.levelno == 30
assert record.levelname == 'WARNING'
assert record.message == 'endpoint PATCH /arcgis/test/district (=> 405)'
class FakeConnectorBase(object):
slug = 'connector'