diff --git a/flowspec/viewsets.py b/flowspec/viewsets.py index d20032a7dcd2e41f060bdf5b40472a79ea3310c2..eed93f60ac77ee83aedc91302211d5ccba5383a5 100644 --- a/flowspec/viewsets.py +++ b/flowspec/viewsets.py @@ -1,3 +1,5 @@ +import json +import datetime from django.shortcuts import get_object_or_404 from django.conf import settings from django.contrib.auth.models import User @@ -496,6 +498,58 @@ class StatsRoutesViewSet(viewsets.ViewSet): logger.info("StatsRoutesViewSet:::retrieve(): route.name="+str(route.name)) return routestats(request, route.name) +class StatsAllRoutesViewSet(viewsets.ViewSet): + """ + A simple Vieset for retrieving statistics of all routes by + an authenticated user. + """ + permission_classes = (IsAuthenticated,) + def retrieve(self, request): + logger.info("StatsRoutesViewSet:::retrieve(): ") + queryset = Route.objects.all() + from flowspec.views import routestats + route_stats = [] + for r in queryset: + route = get_object_or_404(queryset, id=r.id) + logger.info("StatsRoutesViewSet:::retrieve(): route.name="+str(route.name)) + route_stat = routestats(request, route.name) + route_stats.append(json.loads(route_stat.content.decode('utf-8'))) + + return Response(route_stats, status=status.HTTP_200_OK) + + + +class StatsAllRoutesLastTSViewSet(viewsets.ViewSet): + """ + A simple Vieset for retrieving statistics of all routes with last time stamp by + an authenticated user. + """ + permission_classes = (IsAuthenticated,) + def retrieve(self, request): + logger.info("StatsRoutesViewSet:::retrieve(): ") + queryset = Route.objects.all() + from flowspec.views import routestats + route_stats = [] + for r in queryset: + route = get_object_or_404(queryset, id=r.id) + logger.info("StatsRoutesViewSet:::retrieve(): route.name="+str(route.name)) + route_stat = routestats(request, route.name) + route_stat_data = json.loads(route_stat.content.decode('utf-8')) + + converted_data = list(map(self.time_stamp_converter, route_stat_data["data"])) + max_stats = max(converted_data, key=lambda x: x["time_stamp"]) + del max_stats["time_stamp"] + route_stat_data["data"] = [max_stats] + + route_stats.append(route_stat_data) + + return Response(route_stats, status=status.HTTP_200_OK) + + def time_stamp_converter(self, item): + ts = datetime.datetime.strptime(item["ts"],'%Y-%m-%dT%H:%M:%S.%f') + item["time_stamp"] = ts + return item + ############################################################################# ############################################################################# diff --git a/flowspy/urls.py b/flowspy/urls.py index a1355511dd426cea983739e32746e9449b0d4491..c2ca74857636fd60077539c72d4760fd04cb04ea 100644 --- a/flowspy/urls.py +++ b/flowspy/urls.py @@ -15,6 +15,8 @@ from flowspec.viewsets import ( MatchProtocolViewSet, MatchDscpViewSet, StatsRoutesViewSet, + StatsAllRoutesViewSet, + StatsAllRoutesLastTSViewSet, ) from django_registration import views as registration_views @@ -68,6 +70,8 @@ urlpatterns = [ path('tinymce/', include('tinymce.urls')), url(r'^overview/?$', flowspec_views.overview, name="overview"), url(r'^api/', include(router.urls)), + url(r'^api/stats/all/routes/$', StatsAllRoutesViewSet.as_view({'get': 'retrieve'}), name='statsroutesall'), + url(r'^api/stats/all/routes/last-ts/$', StatsAllRoutesLastTSViewSet.as_view({'get': 'retrieve'}), name='statsroutesall_last_ts'), url(r'^details/(?P<route_slug>[\w\-]+)/$', flowspec_views.routedetails, name="route-details"), url(r'^routestats/(?P<route_slug>[\w\-]+)/$', flowspec_views.routestats, name="routestats"), url(r'^setup/', flowspec_views.setup, name='setup'),