diff options
author | akhilbatra898 <akhil.batra@research.iiit.ac.in> | 2017-07-25 03:30:18 +0530 |
---|---|---|
committer | Akhil Batra <akhil.batra@research.iiit.ac.in> | 2017-07-25 02:03:23 +0000 |
commit | 971df12c95bfa17459d042857e5200f4a7f60cd4 (patch) | |
tree | d75610f678ed9c40ac7b63e88143e35fc52ccc07 /qtip/web/bench/views.py | |
parent | 05ed8bbe8a4e3c6092152382fdb42e33fd3841a2 (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.py | 63 |
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 |