From 40b414bd3f364786212560358484920ad4f84552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 25 Dec 2018 18:29:13 +0100 Subject: [PATCH] implement api stats --- src/c3nav/mapdata/api.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/c3nav/mapdata/api.py b/src/c3nav/mapdata/api.py index 51c97a01..6d37ad9a 100644 --- a/src/c3nav/mapdata/api.py +++ b/src/c3nav/mapdata/api.py @@ -44,6 +44,20 @@ def optimize_query(qs): return qs +def api_stats(view_name): + def wrapper(func): + @wraps(func) + def wrapped_func(self, request, *args, **kwargs): + response = func(self, request, *args, **kwargs) + if response.status_code < 400 and kwargs: + name, value = next(iter(kwargs.items())) + if not isinstance(value, str) or not value.startswith('c:'): + increment_cache_key('apistats__%s__%s__%s' % (view_name, name, value)) + return response + return wrapped_func + return wrapper + + def api_etag(permissions=True, etag_func=AccessPermission.etag_func, cache_parameters=None, base_mapdata_check=False): def wrapper(func): @wraps(func) @@ -333,6 +347,7 @@ class LocationViewSetBase(RetrieveModelMixin, GenericViewSet): simple_geometry=True)) @action(detail=True, methods=['get']) + @api_stats('location_details') @api_etag(base_mapdata_check=True) def details(self, request, **kwargs): location = self.get_object() @@ -349,6 +364,7 @@ class LocationViewSetBase(RetrieveModelMixin, GenericViewSet): )) @action(detail=True, methods=['get']) + @api_stats('location_geometry') @api_etag(base_mapdata_check=True) def geometry(self, request, **kwargs): location = self.get_object()