implement api stats

This commit is contained in:
Laura Klünder 2018-12-25 18:29:13 +01:00
parent d77585d6a6
commit 40b414bd3f

View file

@ -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()