Skip to content
Snippets Groups Projects
Commit 215bd0f7 authored by Nico Vermaas's avatar Nico Vermaas
Browse files

Merge branch 'SDC-480-diagnostics-overview' into 'master'

Sdc 480 diagnostics overview

See merge request !192
parents a0266689 35ba205d
No related branches found
No related tags found
3 merge requests!198Master,!197Master,!192Sdc 480 diagnostics overview
Pipeline #24568 passed
Showing
with 568 additions and 62 deletions
from django.db import models
from django.urls import reverse
from django.utils.timezone import datetime
from django.db.models import Sum
# constants
datetime_format_string = '%Y-%m-%dT%H:%M:%SZ'
......@@ -18,6 +17,43 @@ class Workflow(models.Model):
return str(self.id)
def convert_quality_to_dict_for_template(task):
d = {}
try:
d['QA uv-coverage'] = str(task.quality['uv-coverage'])
d['QA sensitivity'] = str(task.quality['sensitivity'])
d['QA observing-conditions'] = str(task.quality['observing-conditions'])
d['QA diagnostic plots'] = "(link)"
d['Workflow summary parset'] = "(link)"
d['Summary logs'] = "(link)"
d['QA summary.hf5'] = "(link)"
except Exception as err:
pass
return d
# convert the quality information from the JSONfield into a easy parsable list for the template
def convert_quality_to_list_for_template(task):
list = []
try:
list.append(str(task.quality['uv-coverage']))
list.append(str(task.quality['sensitivity']))
list.append(str(task.quality['observing-conditions']))
list.append("(link)")
list.append("(link)")
list.append("(link)")
list.append("(link)")
except Exception as err:
pass
return list
class Task(models.Model):
# Task control properties
......@@ -69,6 +105,31 @@ class Task(models.Model):
except:
return "no_predecessor"
@property
def has_quality(self):
# todo: check if there is a 'quality' structure in the 'task.outputs'
try:
quality = self.outputs[0]['quality']
return True
except:
return False
@property
def quality(self):
# todo: check if there is a 'quality' structure in the 'task.outputs'
try:
return self.outputs[0]['quality']
except:
return None
@property
def quality_as_list(self):
try:
q = convert_quality_to_list_for_template(self)
return q
except:
return None
class LogEntry(models.Model):
cpu_cycles = models.IntegerField(null=True,blank=True)
wall_clock_time = models.IntegerField(null=True,blank=True)
......
......@@ -106,6 +106,32 @@ def convert_logentries_to_html(log_entries):
return results
def convert_quality_to_html(task):
results = ""
try:
results = ""
results += "<tr><td><b>SAS_ID</b></td><td>" + str(task.sas_id) + "</td></tr>"
results += "<tr><td><b>Project</b></td><td>" + str(task.project) + "</td></tr>"
results += "<tr><td><b>ATDB Filter</b></td><td>" + str(task.filter) + "</td></tr>"
results += "<tr><td><b>Input Type</b></td><td>" + "???" + "</td></tr>"
results += "<tr><td><b>NrJobs (MSs)</b></td><td>" + "???" + "</td></tr>"
results += "<tr><td><b>QA uv-coverage</b></td><td>" + str(task.quality['uv-coverage']) + "</td></tr>"
results += "<tr><td><b>QA sensitivity</b></td><td>" + str(task.quality['sensitivity']) + "</td></tr>"
results += "<tr><td><b>QA observing-conditions</b></td><td>" + str(task.quality['observing-conditions']) + "</td></tr>"
results += "<tr><td><b>QA diagnostic plots</b></td><td>" + "(link)" + "</td></tr>"
results += "<tr><td><b>Workflow summary parset</b></td><td>" + "(link)" + "</td></tr>"
results += "<tr><td><b>Summary logs</b></td><td>" + "(link)" + "</td></tr>"
results += "<tr><td><b>QA summary.hf5</b></td><td>" + "(link)" + "</td></tr>"
except Exception as err:
results = "<tr><td>" + str(err) + "</td></tr>"
# results = "<tr><td>no data</td></tr>"
return results
def convert_list_of_dicts_to_html(my_blob):
results = ""
my_list = []
......
......@@ -37,19 +37,24 @@
<div class="container-fluid">
<ul class="nav navbar-nav">
<!-- Header -->
<li><a class="navbar-brand" href="{% url 'homepage' %}">
<li><a class="navbar-brand" href="{% url 'index' %}">
<img src="{% static 'taskdatabase/new_ldv_logo.png' %}" height="30" alt="">
&nbsp;ATDB</a>
</li>
<li><a class="nav-link" href="{% url 'homepage' %}">Tasks</a></li>
<li><a class="nav-link" href="{% url 'index' %}">Tasks</a></li>
{% comment %}
<li><a class="nav-link" href="{% url 'postprocessing-tasks' %}">PostProcessing</a></li>
{% endcomment %}
{% if user.is_authenticated %}
<li><a class="nav-link" href="{% url 'task-details'%}">Details</a></li>
<li><a class="nav-link" href="{% url 'task-details'%}">Task Details</a></li>
<li><a class="nav-link" href="{% url 'quality-tasks' %}">Quality</a></li>
{% endif %}
<li><a class="nav-link" href="{% url 'dashboard' 'active_nores' %}">Dashboard</a></li>
<li><a class="nav-link" href="{% url 'query' %}">Query</a></li>
<li><a class="nav-link" href="{% url 'query' %}">Filter</a></li>
<li><a class="nav-link" href="{% url 'monitoring' %}">Monitoring</a></li>
......
......@@ -19,53 +19,7 @@
<table class="table table-striped table-bordered table-sm">
<thead>
<tr>
<th>
<a href="{% url 'sort-tasks' '-pk' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
ID
<a href="{% url 'sort-tasks' 'id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>Details</th>
<th>
<a href="{% url 'sort-tasks' '-workflow' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Workflow
<a href="{% url 'sort-tasks' 'workflow' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-priority' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Priority
<a href="{% url 'sort-tasks' 'priority' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-status' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Status
<a href="{% url 'sort-tasks' 'status' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-project' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Project
<a href="{% url 'sort-tasks' 'project' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-sas_id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
SAS_ID
<a href="{% url 'sort-tasks' 'sas_id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-creationTime' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
CreationTime
<a href="{% url 'sort-tasks' 'creationTime' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-size_to_process' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Size
<a href="{% url 'sort-tasks' 'size_to_process' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>Actions</th>
</tr>
{% include 'taskdatabase/tasks_headers.html' %}
</thead>
<tbody>
{% include 'taskdatabase/tasks.html' %}
......@@ -80,7 +34,7 @@
{% include 'taskdatabase/pagination.html' %}
</div>
</div>
<p class="footer"> Version 1.0.0 (1 feb 2021 - 14:00)
<p class="footer"> Version 1.0.0 (4 feb 2021 - 15:00)
</div>
......
......@@ -4,6 +4,14 @@
{% block myBlock %}
<div class="hiking-container container-fluid">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-8">
<h4>Monitoring</h4>
</div>
</div>
<div class="col-sm-6 col-md-8 col-lg-12">
&nbsp;
<div class="thumbnail">
......
{% extends 'taskdatabase/base.html' %}
{% load static %}
{% block myBlock %}
<div class="container-fluid details-container">
{% include 'taskdatabase/filter/filter_buttons.html' %}
&nbsp;
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
{% include 'taskdatabase/pagination.html' %}
&nbsp;
{% if my_tasks %}
<div class="panel panel-success">
<div class="panel-body">
<table class="table table-striped table-bordered table-sm">
<thead>
<tr>
<th>
<a href="{% url 'sort-tasks' '-pk' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
ID
<a href="{% url 'sort-tasks' 'id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>Details</th>
<th>
<a href="{% url 'sort-tasks' '-workflow' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Workflow
<a href="{% url 'sort-tasks' 'workflow' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-priority' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Priority
<a href="{% url 'sort-tasks' 'priority' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-status' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Status
<a href="{% url 'sort-tasks' 'status' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-project' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Project
<a href="{% url 'sort-tasks' 'project' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-sas_id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
SAS_ID
<a href="{% url 'sort-tasks' 'sas_id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-creationTime' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
CreationTime
<a href="{% url 'sort-tasks' 'creationTime' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-size_to_process' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Size
<a href="{% url 'sort-tasks' 'size_to_process' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% include 'taskdatabase/tasks.html' %}
</tbody>
</table>
{% else %}
<p>No recent Tasks.</p>
{% endif %}
</div>
</div>
{% include 'taskdatabase/pagination.html' %}
</div>
</div>
<p class="footer"> Version 1.0.0 (3 feb 2021 - 8:00)
</div>
{% include 'taskdatabase/localstorage_scripts.html' %}
{% endblock %}
{% extends 'taskdatabase/base.html' %}
{% load static %}
{% block myBlock %}
<div class="container-fluid details-container">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-8">
<h4>Quality</h4>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
{% include 'taskdatabase/pagination.html' %}
&nbsp;
{% if my_tasks %}
<div class="panel panel-success">
<div class="panel-body">
<table class="table table-striped table-bordered table-sm">
<thead>
{% include 'taskdatabase/tasks_quality_headers.html' %}
</thead>
<tbody>
{% include 'taskdatabase/tasks_quality.html' %}
</tbody>
</table>
{% else %}
<p>No recent Tasks.</p>
{% endif %}
</div>
</div>
{% include 'taskdatabase/pagination.html' %}
</div>
</div>
</div>
</div>
</div>
{% include 'taskdatabase/localstorage_scripts.html' %}
{% endblock %}
......@@ -15,6 +15,13 @@
><i class="fas fa-list"></i> Details
</a>&nbsp;
{% if task.has_quality %}
<a class="btn btn-primary btn-sm"
href="{% url 'task-quality' task.id my_tasks.number %}"
data-popup-url="{% url 'task-quality' task.id my_tasks.number %}"
><i class="fas fa-balance-scale-right"></i> Quality
</a>&nbsp;
{% endif %}
{% endif %}
</td>
<td>
......
<div class="card">
<div class="card-body">
<h4>Task: {{ task.id }}</h4>
<h4>Task: {{ task.id }} ({{ task.task_type }})</h4>
<table class="table table-striped">
<tbody>
<tr><td><b>id</b></td><td><a href="{% url 'task-detail-view-api' task.pk %}" target="_blank">{{ task.id }} </a></td></tr>
......@@ -45,6 +45,13 @@
data-popup-url="{% url 'show-metrics' task.id %}"
target="_blank"><i class="fas fa-clock"></i>&nbsp;metrics
</a>
{% if task.has_quality %}
<a class="open-modal btn btn-primary btn-sm"
href="{% url 'task-quality' task.id 1 %}"
data-popup-url="{% url 'task-quality' task.id 1 %}"
><i class="fas fa-balance-scale-right"></i> Quality
</a>&nbsp;
{% endif %}
</td>
</tr>
<tr><td><b>filter</b></td><td>{{ task.filter }}</td></tr>
......
<div class="card">
<div class="card-body">
<h4>Quality</h4>
<table class="table table-striped">
{{ quality | safe }}
</table>
</div>
</div>
\ No newline at end of file
{% load static %}
{% block myBlock %}
<div class="container-fluid details-container">
<div class="row">
<div class="col-md">
{% include "taskdatabase/tasks/quality_card.html" %}
</div>
</div>
</div>
{% include "taskdatabase/modal/modal_script.html" %}
{% include "taskdatabase/modal/modal.html" %}
{% endblock %}
<tr>
<th>
<a href="{% url 'sort-tasks' '-pk' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
ID
<a href="{% url 'sort-tasks' 'id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>Details</th>
<th>
<a href="{% url 'sort-tasks' '-workflow' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Workflow
<a href="{% url 'sort-tasks' 'workflow' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-priority' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Priority
<a href="{% url 'sort-tasks' 'priority' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-status' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Status
<a href="{% url 'sort-tasks' 'status' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-project' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Project
<a href="{% url 'sort-tasks' 'project' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-sas_id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
SAS_ID
<a href="{% url 'sort-tasks' 'sas_id' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-creationTime' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
CreationTime
<a href="{% url 'sort-tasks' 'creationTime' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>
<a href="{% url 'sort-tasks' '-size_to_process' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a>
Size
<a href="{% url 'sort-tasks' 'size_to_process' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
</th>
<th>Actions</th>
</tr>
\ No newline at end of file
{% load static %}
{% for task in my_tasks %}
{% if task.status != "removed_invisible" %}
<div class="row">
<tr class="{{ task.status }}">
<td>
<a href="{{ task.get_absolute_url }}" target="_blank">{{ task.id }} </a>
</td>
<td>
{% if user.is_authenticated %}
<a class="btn btn-primary btn-sm"
href="{% url 'task-details' task.id my_tasks.number %}"
data-popup-url="{% url 'task-details' task.id my_tasks.number %}"
><i class="fas fa-list"></i> Details
</a>&nbsp;
{% endif %}
</td>
{% if task.resume %}
<td class="bigger">{{ task.status }}</td>
{% endif %}
{% if not task.resume %}
<td class="bigger">{{ task.status }} (holding)</td>
{% endif %}
<td>{{ task.project }}</td>
<td>{{ task.sas_id }}</td>
<td>{{ task.filter }} </td>
{% if task.has_quality %}
{% for value in task.quality_as_list %}
<td>{{value}}</td>
{% endfor %}
{% endif %}
<td>
</tr>
</div>
{% endif %}
{% endfor %}
{% include "taskdatabase/modal/modal_script.html" %}
{% include "taskdatabase/modal/modal.html" %}
\ No newline at end of file
<tr>
<th>ID</th>
<th>Details</th>
<th>Status</th>
<th>Project</th>
<th>SAS_ID</th>
<th>filter</th>
<th>uv-coverage</th>
<th>Sensitivity</th>
<th>Conditions</th>
<th>Diagnostic plots</th>
<th>Summary parset</th>
<th>Summary logs</th>
<th>Summary hf5</th>
</tr>
\ No newline at end of file
......@@ -12,10 +12,14 @@ urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name='registration/login.html')),
# --- GUI ---
path('', views.IndexView.as_view(), name='homepage'),
path('', views.IndexView.as_view(), name='index'),
path('postprocessing-tasks', views.PostProcessingTasksView.as_view(), name='postprocessing-tasks'),
path('quality-tasks', views.QualityTasksView.as_view(), name='quality-tasks'),
path('task_details/<int:id>/<page>', views.TaskDetails, name='task-details'),
path('task_details/', views.TaskDetails, name='task-details'),
path('task_quality/<int:id>/<page>', views.TaskQuality, name='task-quality'),
path('task_quality/', views.TaskQuality, name='task-quality'),
path('show-inputs/<int:id>/', views.ShowInputs, name='show-inputs'),
path('show-outputs/<int:id>/', views.ShowOutputs, name='show-outputs'),
......
......@@ -155,7 +155,8 @@ class MonitorFilter(filters.FilterSet):
class QueryView(SingleTableMixin, FilterView):
table_class = TaskTable
model = Task
queryset = Task.objects.filter(task_type='regular')
# queryset = Task.objects.filter(task_type='regular')
queryset = Task.objects.all()
template_name = "query/index.html"
filterset_class = TaskFilterQueryPage
......@@ -221,7 +222,136 @@ class IndexView(ListView):
tasks = get_searched_tasks(search_box, sort)
# only return the 'regular' tasks, and not the 'postprocessing' tasks in the GUI
tasks = tasks.filter(task_type='regular')
# tasks = tasks.filter(task_type='regular')
paginator = Paginator(tasks, config.TASKS_PER_PAGE) # Show 50 tasks per page
page = self.request.GET.get('page')
try:
# check if there was a page on the session, if so, use it.
if page == None:
page = self.request.session['page']
self.request.session['page'] = None
except:
pass
try:
tasks = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
tasks = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
tasks = paginator.page(paginator.num_pages)
return tasks
class PostProcessingTasksView(ListView):
"""
This is the main view of ATDB. It shows a pagination list of tasks, sorted by creationTime.
"""
template_name = 'taskdatabase/postprocessing.html'
# by default this returns the list in an object called object_list, so use 'object_list' in the html page.
# but if 'context_object_name' is defined, then this returned list is named and can be accessed that way in html.
context_object_name = 'my_tasks'
def get_queryset(self):
status = self.request.GET.get('status')
search_box = self.request.GET.get('search_box', None)
# get the sort variable from the session or use default
try:
sort = self.request.session['sort']
except:
sort = '-creationTime'
tasks = Task.objects.order_by(sort)
# check if there is a 'task_filter' put on the session
try:
filter = self.request.session['task_filter']
if filter != 'all':
tasks = get_searched_tasks(filter, sort)
except:
pass
# check if there is a 'task_onhold_filter' put on the session
try:
onhold = self.request.session['task_onhold_filter']
if onhold != None:
tasks = tasks.filter(resume=not onhold)
except:
pass
if (search_box is not None):
tasks = get_searched_tasks(search_box, sort)
# only return the 'regular' tasks, and not the 'postprocessing' tasks in the GUI
tasks = tasks.filter(task_type='postprocessing')
paginator = Paginator(tasks, config.TASKS_PER_PAGE) # Show 50 tasks per page
page = self.request.GET.get('page')
try:
# check if there was a page on the session, if so, use it.
if page == None:
page = self.request.session['page']
self.request.session['page'] = None
except:
pass
try:
tasks = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
tasks = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
tasks = paginator.page(paginator.num_pages)
return tasks
class QualityTasksView(ListView):
"""
This is the main view of ATDB. It shows a pagination list of tasks, sorted by creationTime.
"""
template_name = 'taskdatabase/quality_page.html'
# by default this returns the list in an object called object_list, so use 'object_list' in the html page.
# but if 'context_object_name' is defined, then this returned list is named and can be accessed that way in html.
context_object_name = 'my_tasks'
def get_queryset(self):
status = self.request.GET.get('status')
search_box = self.request.GET.get('search_box', None)
# get the sort variable from the session or use default
try:
sort = self.request.session['sort']
except:
sort = '-creationTime'
tasks = Task.objects.order_by(sort)
# check if there is a 'task_filter' put on the session
try:
filter = self.request.session['task_filter']
if filter != 'all':
tasks = get_searched_tasks(filter, sort)
except:
pass
if (search_box is not None):
tasks = get_searched_tasks(search_box, sort)
# exclude the tasks without quality information
tasks = tasks.exclude(outputs__isnull=True)
tasks = tasks.exclude(outputs__0__quality__isnull=True)
paginator = Paginator(tasks, config.TASKS_PER_PAGE) # Show 50 tasks per page
page = self.request.GET.get('page')
......@@ -290,6 +420,32 @@ def TaskDetails(request, id=0, page=0):
return render(request, "taskdatabase/tasks/task_details.html", {'task': task, 'logentries': logentries_html})
def TaskQuality(request, id=0, page=0):
try:
task = Task.objects.get(id=id)
# store the requested task_id on the session
request.session['task_id'] = task.id
except:
# when an invalid id is given, like '/atdb/task_details/0/',
# then look if there is a task stored on the session
try:
task_on_session = request.session['task_id']
task = Task.objects.get(id=task_on_session)
except:
messages.add_message(request, messages.WARNING, 'no task selected.')
return redirect('homepage')
# store the current page on the session
request.session['page'] = page
quality_html = algorithms.convert_quality_to_html(task)
return render(request, "taskdatabase/tasks/task_quality.html", {'task': task, 'quality': quality_html})
def ShowInputs(request, id):
task = Task.objects.get(id=id)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment