Skip to content
Snippets Groups Projects
Commit ffbe0460 authored by Nino tsulaia's avatar Nino tsulaia Committed by David Schmitz
Browse files

Added endpoint to get stats for all routes only with last time stamp

parent 7d62c8e0
No related branches found
No related tags found
No related merge requests found
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
#############################################################################
#############################################################################
......
......@@ -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'),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment