From 5d499bb2493ad6521e31d37d7cf7df6c744bab96 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.dos.anjos@gmail.com>
Date: Thu, 21 Apr 2016 18:53:23 +0200
Subject: [PATCH] [backend] Move cancel-experiments from API to view

---
 beat/web/backend/api.py      | 17 -----------------
 beat/web/backend/api_urls.py |  6 ------
 beat/web/backend/urls.py     |  6 ++++++
 beat/web/backend/views.py    | 22 ++++++++++++++++++----
 4 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/beat/web/backend/api.py b/beat/web/backend/api.py
index 45373e109..363bbf2b6 100644
--- a/beat/web/backend/api.py
+++ b/beat/web/backend/api.py
@@ -29,34 +29,17 @@ from rest_framework.decorators import api_view, permission_classes
 from rest_framework.response import Response
 from rest_framework import permissions
 
-from ..common.permissions import IsSuperuser
-
 from ..utils.api import send_email_to_administrators
 from ..utils import scheduler as scheduler_api
 
 from .models import Environment
 
-from ..experiments.models import Experiment
-
 import simplejson as json
 
 
 #----------------------------------------------------------
 
 
-@api_view(['POST'])
-@permission_classes([IsSuperuser])
-def cancel_all_experiments(request):
-
-    for q in Experiment.objects.filter(status__in=(Experiment.RUNNING, Experiment.SCHEDULED)):
-        q.cancel()
-
-    return Response(status=200)
-
-
-#----------------------------------------------------------
-
-
 @api_view(['GET'])
 @permission_classes([permissions.AllowAny])
 def accessible_environments_list(request):
diff --git a/beat/web/backend/api_urls.py b/beat/web/backend/api_urls.py
index d7b219769..e5faf3d8c 100644
--- a/beat/web/backend/api_urls.py
+++ b/beat/web/backend/api_urls.py
@@ -30,12 +30,6 @@ from . import api
 
 urlpatterns = [
 
-    url(
-        r'^cancel-all-experiments/$',
-        api.cancel_all_experiments,
-        name='backend-api-cancel-all-experiments',
-        ),
-
     url(
         r'^environments/$',
         api.accessible_environments_list,
diff --git a/beat/web/backend/urls.py b/beat/web/backend/urls.py
index 7fbbf79db..33c58bc66 100644
--- a/beat/web/backend/urls.py
+++ b/beat/web/backend/urls.py
@@ -36,6 +36,12 @@ urlpatterns = [
       name='scheduler',
       ),
 
+    url(
+      r'^cancel-experiments/$',
+      views.cancel_all_experiments,
+      name='cancel-experiments',
+      ),
+
     url(
         r'^environments/(?P<name>[-\.\w\s]+)/(?P<version>[-\.\w]+)/$',
         views.environment,
diff --git a/beat/web/backend/views.py b/beat/web/backend/views.py
index b4dd5c7d9..d94c6f927 100644
--- a/beat/web/backend/views.py
+++ b/beat/web/backend/views.py
@@ -28,8 +28,9 @@
 import collections
 import simplejson
 
-from django.http import Http404
+from django.http import Http404, HttpResponseRedirect
 from django.conf import settings
+from django.core.urlresolvers import reverse
 from django.shortcuts import get_object_or_404
 from django.shortcuts import render_to_response
 from django.template import RequestContext
@@ -38,6 +39,7 @@ from django.http import HttpResponseForbidden
 from django.contrib import messages
 
 from .models import Environment, Worker, Queue
+from ..experiments.models import Experiment
 from . import state
 
 
@@ -68,9 +70,6 @@ def scheduler(request):
 
     cache_gb = int(cache['capacity-in-megabytes'] / 1024.0)
 
-    # Organize the data a bit
-    response.data['workers'] = collections.OrderedDict(sorted([(k,v) for k,v in response.data['workers'].items()], key=lambda x: (not x[1].has_key('active'), x[1]['db_status']!='Active', x[0])))
-
     return render_to_response('backend/scheduler.html',
             dict(
                 jobs=state.jobs(),
@@ -119,3 +118,18 @@ def list_environments(request):
                 ),
             context_instance=RequestContext(request),
             )
+
+
+
+#----------------------------------------------------------
+
+
+@login_required
+def cancel_all_experiments(request):
+
+    if not(request.user.is_superuser): return HttpResponseForbidden()
+
+    for q in Experiment.objects.filter(status__in=(Experiment.RUNNING, Experiment.SCHEDULED)):
+        q.cancel()
+
+    return HttpResponseRedirect(reverse('backend:scheduler'))
-- 
GitLab