Projet

Général

Profil

0001-views-add-a-log-on-endpoint-result-60911.patch

Lauréline Guérin, 21 janvier 2022 12:01

Télécharger (4,63 ko)

Voir les différences:

Subject: [PATCH] views: add a log on endpoint result (#60911)

 passerelle/views.py            | 21 ++++++++++++++++++++-
 tests/test_generic_endpoint.py | 23 ++++++++++++++---------
 2 files changed, 34 insertions(+), 10 deletions(-)
passerelle/views.py
56 56
from passerelle.compat import json_loads
57 57
from passerelle.utils.conversion import normalize
58 58
from passerelle.utils.json import unflatten
59
from passerelle.utils.jsonresponse import APIError
59
from passerelle.utils.jsonresponse import APIError, JSONEncoder
60 60
from passerelle.utils.paginator import InfinitePaginator
61 61

  
62 62
from .forms import ResourceLogSearchForm
......
517 517
            raise WrongParameter(missing, extra)
518 518

  
519 519
        params = self.get_params(request, *args, **kwargs)
520
        in_cache = False
520 521
        if request.method == 'GET' and self.endpoint.endpoint_info.cache_duration:
521 522
            cache_key = hashlib.md5(
522 523
                force_bytes(repr(self.get_object().slug) + repr(self.endpoint) + repr(params))
......
524 525
            result = cache.get(cache_key)
525 526
            if result is not None:
526 527
                # filter result after caching
528
                in_cache = True
527 529
                result = self.filter_result(request, params, result)
528 530
                return result
529 531

  
......
532 534
            cache.set(cache_key, result, self.endpoint.endpoint_info.cache_duration)
533 535
        # filter result after caching
534 536
        result = self.filter_result(request, params, result)
537
        try:
538
            data = json.dumps(result, cls=JSONEncoder)
539
        except TypeError:
540
            data = str(result)
541
        self.connector.logger.debug(
542
            'endpoint %s %s (%r) ' % (request.method, url, payload),
543
            extra={
544
                'request': request,
545
                'connector': connector_name,
546
                'connector_endpoint': endpoint_name,
547
                'connector_endpoint_method': request.method,
548
                'connector_endpoint_url': url,
549
                'connector_payload': payload,
550
                'connector_result': data,
551
                'connector_result_in_cache': in_cache,
552
            },
553
        )
535 554
        return result
536 555

  
537 556
    def filter_result(self, request, params, result):
tests/test_generic_endpoint.py
132 132
    assert '/arcgis/test/mapservice-query?' in log.extra['connector_endpoint_url']
133 133

  
134 134
    # Resource Generic Logger
135
    for record in caplog.records:
136
        if record.name != 'passerelle.resource.arcgis.test':
137
            continue
138
        assert record.levelno == 20
139
        assert record.levelname == 'INFO'
140
        assert record.name == 'passerelle.resource.arcgis.test'
141
        assert u"endpoint GET /arcgis/test/mapservice-query?" in record.message
135
    record = caplog.records[0]
136
    assert record.levelno == 20
137
    assert record.levelname == 'INFO'
138
    assert record.name == 'passerelle.resource.arcgis.test'
139
    assert u"endpoint GET /arcgis/test/mapservice-query?" in record.message
140
    assert not hasattr(record, 'connector_result')
141
    record = caplog.records[1]
142
    assert record.levelno == 10
143
    assert record.levelname == 'DEBUG'
144
    assert record.name == 'passerelle.resource.arcgis.test'
145
    assert u"endpoint GET /arcgis/test/mapservice-query?" in record.message
146
    assert hasattr(record, 'connector_result')
142 147

  
143 148
    data = resp.json['data']
144 149
    assert data[0]['id'] == '4'
......
174 179
        status=200,
175 180
    )
176 181

  
177
    log1, log2 = ResourceLog.objects.filter(appname='arcgis', slug='test').all()
178
    assert log1.extra['transaction_id'] == log2.extra['transaction_id']
182
    log1, log2, log3 = ResourceLog.objects.filter(appname='arcgis', slug='test').all()
183
    assert log1.extra['transaction_id'] == log2.extra['transaction_id'] == log3.extra['transaction_id']
179 184

  
180 185

  
181 186
@mock.patch('passerelle.utils.Request.patch')
182
-