summaryrefslogtreecommitdiffstats
path: root/qtip/web/bench/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'qtip/web/bench/views.py')
-rw-r--r--qtip/web/bench/views.py63
1 files changed, 58 insertions, 5 deletions
diff --git a/qtip/web/bench/views.py b/qtip/web/bench/views.py
index 786b67d5..6de5e4cc 100644
--- a/qtip/web/bench/views.py
+++ b/qtip/web/bench/views.py
@@ -9,16 +9,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+from multiprocessing import Process
from django.contrib.auth.mixins import LoginRequiredMixin
-# from django.utils.decorators import method_decorator
from django.views.generic.edit import CreateView, UpdateView
+from django.views.generic.list import ListView
+from django.views.generic.detail import DetailView
+from django.views import View
+from django.shortcuts import render, redirect
+from django.core.files.base import ContentFile
+from django.utils import timezone
+import forms
import models
-
-# from django.shortcuts import render
-
-# Create your views here.
+import utils
class ReposView(LoginRequiredMixin, CreateView):
@@ -39,3 +43,52 @@ class RepoUpdate(LoginRequiredMixin, UpdateView):
context = super(RepoUpdate, self).get_context_data(**kwargs)
context["repos"] = self.model.objects.all()
return context
+
+
+class Run(LoginRequiredMixin, View):
+ template_name = 'bench/run.html'
+ form_class = forms.TaskForm
+
+ def get(self, request):
+ task_form = self.form_class()
+ return render(request, self.template_name, {'form': task_form})
+
+ def post(self, request):
+ task_form = self.form_class(request.POST)
+ if task_form.is_valid():
+ new_task = task_form.save()
+ new_task.log.save("run_%s.log" % new_task.pk, ContentFile(''))
+ p = Process(target=self.start_task, args=(new_task,))
+ p.start()
+ return redirect('tasks')
+ p.join()
+
+ def start_task(self, task):
+ task = models.Task.objects.get(pk=task.pk)
+ task.status = 'IP'
+ task.save()
+ with open(task.log.path, "a") as logfile:
+ for line in utils.run(task.repo):
+ logfile.write(line)
+ now = timezone.now()
+ task = models.Task.objects.get(pk=task.pk)
+ task.end_time = now
+ task.status = 'F'
+ task.save()
+
+
+class Logs(LoginRequiredMixin, ListView):
+ model = models.Task
+
+
+class TaskView(LoginRequiredMixin, DetailView):
+ model = models.Task
+
+ def get_context_data(self, **kwargs):
+ context = super(TaskView, self).get_context_data(**kwargs)
+ try:
+ with open(context['object'].log.path, "r") as log_file:
+ context['log'] = log_file.read()
+ except ValueError:
+ context['log'] = "No log to show"
+ return context