diff --git a/beat/web/backend/api.py b/beat/web/backend/api.py index 45373e109c1003994036a7d727ebc713819fcc3e..363bbf2b6aebba0c9720e123fc87b17d9b7d1e1d 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 d7b2197695b90bd3d89efc8af8745206c5619c3c..e5faf3d8cf06d313978ed12103d6347416d398a5 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 7fbbf79db02cd8da6e4cee59d1d9ba3bf650c346..33c58bc66f3b8695e3d2ac437825667a95a5e066 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 b4dd5c7d96a4e61fc5a1f1bc13c478a3f521e25f..d94c6f927820ad0436990aa94494b90863fc0ce8 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'))