aboutsummaryrefslogtreecommitdiffstats
path: root/lib/toaster/toastergui/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/toaster/toastergui/views.py')
-rw-r--r--lib/toaster/toastergui/views.py167
1 files changed, 155 insertions, 12 deletions
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index 7cb9b4237..663e03dfd 100644
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -19,7 +19,7 @@
import operator
from django.db.models import Q
-from django.shortcuts import render
+from django.shortcuts import render, redirect
from orm.models import Build, Target, Task, Layer, Layer_Version, Recipe, LogMessage, Variable
from orm.models import Task_Dependency, Recipe_Dependency, Package, Package_File, Package_Dependency
from orm.models import Target_Installed_Package
@@ -35,6 +35,7 @@ def _build_page_range(paginator, index = 1):
except EmptyPage:
page = paginator.page(paginator.num_pages)
+
page.page_range = [page.number]
crt_range = 0
for i in range(1,5):
@@ -48,22 +49,124 @@ def _build_page_range(paginator, index = 1):
break
return page
-@cache_control(no_store=True)
-def build(request):
- template = 'build.html'
- logs = LogMessage.objects.all()
- build_info = _build_page_range(Paginator(Build.objects.order_by("-id"), 10),request.GET.get('page', 1))
+def _verify_parameters(g, mandatory_parameters):
+ miss = []
+ for mp in mandatory_parameters:
+ if not mp in g:
+ miss.append(mp)
+ if len(miss):
+ return miss
+ return None
+
+def _redirect_parameters(view, g, mandatory_parameters):
+ import urllib
+ from django.core.urlresolvers import reverse
+ url = reverse(view)
+ params = {}
+ for i in g:
+ params[i] = g[i]
+ for i in mandatory_parameters:
+ if not i in params:
+ params[i] = mandatory_parameters[i]
+
+ return redirect(url + "?%s" % urllib.urlencode(params))
+
- context = {'objects': build_info, 'logs': logs ,
- 'hideshowcols' : [
- {'name': 'Output', 'order':10},
- {'name': 'Log', 'order':11},
+# shows the "all builds" page
+def builds(request):
+ template = 'build.html'
+ # define here what parameters the view needs in the GET portion in order to
+ # be able to display something. 'count' and 'page' are mandatory for all views
+ # that use paginators.
+ mandatory_parameters = { 'count': 10, 'page' : 1};
+ retval = _verify_parameters( request.GET, mandatory_parameters )
+ if retval:
+ return _redirect_parameters( builds, request.GET, mandatory_parameters)
+
+ # retrieve the objects that will be displayed in the table
+ build_info = _build_page_range(Paginator(Build.objects.exclude(outcome = Build.IN_PROGRESS).order_by("-id"), request.GET.get('count', 10)),request.GET.get('page', 1))
+
+ # build view-specific information; this is rendered specifically in the builds page
+ build_mru = Build.objects.order_by("-started_on")[:3]
+ for b in [ x for x in build_mru if x.outcome == Build.IN_PROGRESS ]:
+ tf = Task.objects.filter(build = b)
+ b.completeper = tf.exclude(order__isnull=True).count()*100/tf.count()
+ from django.utils import timezone
+ b.eta = timezone.now() + ((timezone.now() - b.started_on)*100/b.completeper)
+
+ # send the data to the template
+ context = {
+ # specific info for
+ 'mru' : build_mru,
+ # TODO: common objects for all table views, adapt as needed
+ 'objects' : build_info,
+ 'tablecols' : [
+ {'name': 'Target ', 'clclass': 'target',},
+ {'name': 'Machine ', 'clclass': 'machine'},
+ {'name': 'Completed on ', 'clclass': 'completed_on'},
+ {'name': 'Failed tasks ', 'clclass': 'failed_tasks'},
+ {'name': 'Errors ', 'clclass': 'errors_no'},
+ {'name': 'Warnings', 'clclass': 'warnings_no'},
+ {'name': 'Output ', 'clclass': 'output'},
+ {'name': 'Started on ', 'clclass': 'started_on', 'hidden' : 1},
+ {'name': 'Time ', 'clclass': 'time', 'hidden' : 1},
+ {'name': 'Output', 'clclass': 'output'},
+ {'name': 'Log', 'clclass': 'log', 'hidden': 1},
]}
return render(request, template, context)
+# build dashboard for a single build, coming in as argument
+def builddashboard(request, build_id):
+ template = "builddashboard.html"
+ if Build.objects.filter(pk=build_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ }
+ return render(request, template, context)
+
+def task(request, build_id, task_id):
+ template = "singletask.html"
+ if Build.objects.filter(pk=build_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ }
+ return render(request, template, context)
+
+def recipe(request, build_id, recipe_id):
+ template = "recipe.html"
+ if Recipe.objects.filter(pk=recipe_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ 'object' : Recipe.objects.filter(pk=recipe_id)[0],
+ }
+ return render(request, template, context)
+
+def package(request, build_id, package_id):
+ template = "singlepackage.html"
+ if Build.objects.filter(pk=build_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ }
+ return render(request, template, context)
+
+def target(request, build_id, target_id):
+ template = "target.html"
+ if Build.objects.filter(pk=build_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ }
+ return render(request, template, context)
+
+
+
def _find_task_revdep(task):
tp = []
for p in Task_Dependency.objects.filter(depends_on=task):
@@ -81,7 +184,7 @@ def _find_task_provider(task):
return trc
return None
-def task(request, build_id):
+def tasks(request, build_id):
template = 'task.html'
tasks = _build_page_range(Paginator(Task.objects.filter(build=build_id), 100),request.GET.get('page', 1))
@@ -94,12 +197,52 @@ def task(request, build_id):
return render(request, template, context)
+def recipes(request, build_id):
+ template = 'recipe.html'
+
+ recipes = _build_page_range(Paginator(Recipe.objects.filter(build_recipe=build_id), 100),request.GET.get('page', 1))
+
+ context = {'build': Build.objects.filter(pk=build_id)[0], 'objects': recipes}
+
+ return render(request, template, context)
+
+
def configuration(request, build_id):
template = 'configuration.html'
variables = _build_page_range(Paginator(Variable.objects.filter(build=build_id), 50), request.GET.get('page', 1))
context = {'build': Build.objects.filter(pk=build_id)[0], 'objects' : variables}
return render(request, template, context)
+def buildtime(request, build_id):
+ template = "buildtime.html"
+ if Build.objects.filter(pk=build_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ }
+ return render(request, template, context)
+
+def cpuusage(request, build_id):
+ template = "cpuusage.html"
+ if Build.objects.filter(pk=build_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ }
+ return render(request, template, context)
+
+def diskio(request, build_id):
+ template = "diskio.html"
+ if Build.objects.filter(pk=build_id).count() == 0 :
+ return redirect(builds)
+ context = {
+ 'build' : Build.objects.filter(pk=build_id)[0],
+ }
+ return render(request, template, context)
+
+
+
+
def bpackage(request, build_id):
template = 'bpackage.html'
packages = Package.objects.filter(build = build_id)
@@ -227,8 +370,8 @@ def model_explorer(request, model_name):
response_data['count'] = queryset.count()
else:
response_data['count'] = 0
-
response_data['list'] = serializers.serialize('json', queryset)
+# response_data = serializers.serialize('json', queryset)
return HttpResponse(json.dumps(response_data),
content_type='application/json')