summaryrefslogtreecommitdiffstats
path: root/qtip/web/bench/views.py
diff options
context:
space:
mode:
authorakhilbatra898 <akhil.batra@research.iiit.ac.in>2017-07-25 03:30:18 +0530
committerAkhil Batra <akhil.batra@research.iiit.ac.in>2017-07-25 02:03:23 +0000
commit971df12c95bfa17459d042857e5200f4a7f60cd4 (patch)
treed75610f678ed9c40ac7b63e88143e35fc52ccc07 /qtip/web/bench/views.py
parent05ed8bbe8a4e3c6092152382fdb42e33fd3841a2 (diff)
Implement benchmark running and logging the output
- Run benchmark by adding new tasks - Modify Task model to have log as log files - Add new urls for respective views - Module for running benchmarks in background - Updating status of tasks - Listing and detailed log of all tasks - Add corresponding html templates Change-Id: I244d1bb74949eeb470c738363f6917191e0f052d Signed-off-by: akhilbatra898 <akhil.batra@research.iiit.ac.in>
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