Projet

Général

Profil

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

Lauréline Guérin, 24 janvier 2022 09:09

Télécharger (5,51 ko)

Voir les différences:

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

 passerelle/views.py            | 25 ++++++++++++++++++++++++-
 tests/test_cmis.py             |  2 +-
 tests/test_generic_endpoint.py | 23 ++++++++++++++---------
 3 files changed, 39 insertions(+), 11 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
                    extra.append(key)
518 518
            raise WrongParameter(missing, extra)
519 519

  
520
        def log_result(result):
521
            try:
522
                data = json.dumps(result, cls=JSONEncoder)
523
            except TypeError:
524
                data = str(result)
525
            self.connector.logger.debug(
526
                'endpoint %s %s (%r) ' % (request.method, url, payload),
527
                extra={
528
                    'request': request,
529
                    'connector': connector_name,
530
                    'connector_endpoint': endpoint_name,
531
                    'connector_endpoint_method': request.method,
532
                    'connector_endpoint_url': url,
533
                    'connector_payload': payload,
534
                    'connector_result': data,
535
                    'connector_result_in_cache': in_cache,
536
                },
537
            )
538

  
520 539
        params = self.get_params(request, *args, **kwargs)
540
        in_cache = False
521 541
        if request.method == 'GET' and self.endpoint.endpoint_info.cache_duration:
522 542
            cache_key = hashlib.md5(
523 543
                force_bytes(repr(self.get_object().slug) + repr(self.endpoint) + repr(params))
......
525 545
            result = cache.get(cache_key)
526 546
            if result is not None:
527 547
                # filter result after caching
548
                in_cache = True
528 549
                result = self.filter_result(request, params, result)
550
                log_result(result)
529 551
                return result
530 552

  
531 553
        result = self.endpoint(request, **params)
......
533 555
            cache.set(cache_key, result, self.endpoint.endpoint_info.cache_duration)
534 556
        # filter result after caching
535 557
        result = self.filter_result(request, params, result)
558
        log_result(result)
536 559
        return result
537 560

  
538 561
    def filter_result(self, request, params, result):
tests/test_cmis.py
575 575
    if not debug:
576 576
        assert ResourceLog.objects.count() == 2
577 577
    else:
578
        assert ResourceLog.objects.count() == 10
578
        assert ResourceLog.objects.count() == 11
579 579
        logs = list(ResourceLog.objects.all())
580 580
        assert logs[3].message == 'cmislib GET request to http://example.com/cmisatom'
581 581
        assert logs[4].message == 'cmislib GET response (200)'
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
-