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

Merge branch 'master' into SDC-438-filters-on-dashboard

# Conflicts:
#	atdb/taskdatabase/templates/taskdatabase/index.html
parents 0da9c2ed 945d4d8a
No related branches found
No related tags found
2 merge requests!200apply filter to dashboard,!199apply filter to dashboard
Showing
with 551 additions and 65 deletions
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
from django.utils.timezone import datetime from django.utils.timezone import datetime
from django.db.models import Sum
# constants # constants
datetime_format_string = '%Y-%m-%dT%H:%M:%SZ' datetime_format_string = '%Y-%m-%dT%H:%M:%SZ'
...@@ -18,6 +17,25 @@ class Workflow(models.Model): ...@@ -18,6 +17,25 @@ class Workflow(models.Model):
return str(self.id) return str(self.id)
# 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): class Task(models.Model):
# Task control properties # Task control properties
...@@ -69,6 +87,31 @@ class Task(models.Model): ...@@ -69,6 +87,31 @@ class Task(models.Model):
except: except:
return "no_predecessor" 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): class LogEntry(models.Model):
cpu_cycles = models.IntegerField(null=True,blank=True) cpu_cycles = models.IntegerField(null=True,blank=True)
wall_clock_time = models.IntegerField(null=True,blank=True) wall_clock_time = models.IntegerField(null=True,blank=True)
......
...@@ -106,6 +106,31 @@ def convert_logentries_to_html(log_entries): ...@@ -106,6 +106,31 @@ def convert_logentries_to_html(log_entries):
return results 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): def convert_list_of_dicts_to_html(my_blob):
results = "" results = ""
my_list = [] my_list = []
......
...@@ -37,19 +37,24 @@ ...@@ -37,19 +37,24 @@
<div class="container-fluid"> <div class="container-fluid">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<!-- Header --> <!-- 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=""> <img src="{% static 'taskdatabase/new_ldv_logo.png' %}" height="30" alt="">
&nbsp;ATDB</a> &nbsp;ATDB</a>
</li> </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 %} {% 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' %}">Quality</a></li>
{% endif %} {% endif %}
<li><a class="nav-link" href="{% url 'dashboard' 'active_nores' %}">Dashboard</a></li> <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> <li><a class="nav-link" href="{% url 'monitoring' %}">Monitoring</a></li>
......
...@@ -19,53 +19,7 @@ ...@@ -19,53 +19,7 @@
<table class="table table-striped table-bordered table-sm"> <table class="table table-striped table-bordered table-sm">
<thead> <thead>
<tr> {% include 'taskdatabase/tasks_headers.html' %}
<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> </thead>
<tbody> <tbody>
{% include 'taskdatabase/tasks.html' %} {% include 'taskdatabase/tasks.html' %}
...@@ -80,12 +34,11 @@ ...@@ -80,12 +34,11 @@
{% include 'taskdatabase/pagination.html' %} {% include 'taskdatabase/pagination.html' %}
</div> </div>
</div> </div>
<p class="footer"> Version 1.0.0 (3 feb 2021 - 14:00) <p class="footer"> Version 1.0.0 (4 feb 2021 - 16:00)
</div> </div>
{% include 'taskdatabase/localstorage_scripts.html' %} {% include 'taskdatabase/localstorage_scripts.html' %}
{% endblock %} {% endblock %}
...@@ -4,6 +4,14 @@ ...@@ -4,6 +4,14 @@
{% block myBlock %} {% block myBlock %}
<div class="hiking-container container-fluid"> <div class="hiking-container container-fluid">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-8">
<h3>Monitoring</h3>
</div>
</div>
<div class="col-sm-6 col-md-8 col-lg-12"> <div class="col-sm-6 col-md-8 col-lg-12">
&nbsp; &nbsp;
<div class="thumbnail"> <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">
<h3>Quality Diagnostics</h3>
</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 %}
...@@ -9,12 +9,19 @@ ...@@ -9,12 +9,19 @@
</td> </td>
<td> <td>
{% if user.is_authenticated %} {% if user.is_authenticated %}
<a class="btn btn-primary btn-sm" <a class="btn btn-primary btn-sm"
href="{% url 'task-details' task.id my_tasks.number %}" href="{% url 'task-details' task.id my_tasks.number %}"
data-popup-url="{% 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 ><i class="fas fa-list"></i> Details
</a>&nbsp; </a>&nbsp;
{% if task.has_quality %}
<a class="open-modal 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 %} {% endif %}
</td> </td>
<td> <td>
......
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<h4>Task: {{ task.id }}</h4> <h4>Task: {{ task.id }} ({{ task.task_type }})</h4>
<table class="table table-striped"> <table class="table table-striped">
<tbody> <tbody>
<tr><td><b>id</b></td><td><a href="{% url 'task-detail-view-api' task.pk %}" target="_blank">{{ task.id }} </a></td></tr> <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 @@ ...@@ -45,6 +45,13 @@
data-popup-url="{% url 'show-metrics' task.id %}" data-popup-url="{% url 'show-metrics' task.id %}"
target="_blank"><i class="fas fa-clock"></i>&nbsp;metrics target="_blank"><i class="fas fa-clock"></i>&nbsp;metrics
</a> </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> </td>
</tr> </tr>
<tr><td><b>filter</b></td><td>{{ task.filter }}</td></tr> <tr><td><b>filter</b></td><td>{{ task.filter }}</td></tr>
......
<div class="card">
<div class="card-body">
<h4>Quality Diagnostics</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 = [ ...@@ -12,10 +12,14 @@ urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name='registration/login.html')), path('login/', auth_views.LoginView.as_view(template_name='registration/login.html')),
# --- GUI --- # --- 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', views.ShowQualityPage.as_view(), name='quality'),
path('task_details/<int:id>/<page>', views.TaskDetails, name='task-details'), path('task_details/<int:id>/<page>', views.TaskDetails, name='task-details'),
path('task_details/', 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-inputs/<int:id>/', views.ShowInputs, name='show-inputs'),
path('show-outputs/<int:id>/', views.ShowOutputs, name='show-outputs'), path('show-outputs/<int:id>/', views.ShowOutputs, name='show-outputs'),
......
...@@ -155,7 +155,8 @@ class MonitorFilter(filters.FilterSet): ...@@ -155,7 +155,8 @@ class MonitorFilter(filters.FilterSet):
class QueryView(SingleTableMixin, FilterView): class QueryView(SingleTableMixin, FilterView):
table_class = TaskTable table_class = TaskTable
model = Task 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" template_name = "query/index.html"
filterset_class = TaskFilterQueryPage filterset_class = TaskFilterQueryPage
...@@ -221,7 +222,136 @@ class IndexView(ListView): ...@@ -221,7 +222,136 @@ class IndexView(ListView):
tasks = get_searched_tasks(search_box, sort) tasks = get_searched_tasks(search_box, sort)
# only return the 'regular' tasks, and not the 'postprocessing' tasks in the GUI # 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 ShowQualityPage(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 paginator = Paginator(tasks, config.TASKS_PER_PAGE) # Show 50 tasks per page
page = self.request.GET.get('page') page = self.request.GET.get('page')
...@@ -279,7 +409,7 @@ def TaskDetails(request, id=0, page=0): ...@@ -279,7 +409,7 @@ def TaskDetails(request, id=0, page=0):
task = Task.objects.get(id=task_on_session) task = Task.objects.get(id=task_on_session)
except: except:
messages.add_message(request, messages.WARNING, 'no task selected.') messages.add_message(request, messages.WARNING, 'no task selected.')
return redirect('homepage') return redirect('index')
# store the current page on the session # store the current page on the session
request.session['page'] = page request.session['page'] = page
...@@ -290,6 +420,32 @@ def TaskDetails(request, id=0, page=0): ...@@ -290,6 +420,32 @@ def TaskDetails(request, id=0, page=0):
return render(request, "taskdatabase/tasks/task_details.html", {'task': task, 'logentries': logentries_html}) 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('index')
# 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): def ShowInputs(request, id):
task = Task.objects.get(id=id) task = Task.objects.get(id=id)
...@@ -341,7 +497,7 @@ def ShowMonitoring(request): ...@@ -341,7 +497,7 @@ def ShowMonitoring(request):
distinct_services_per_host = LatestMonitor.objects.all().order_by('name', 'hostname', '-timestamp').distinct('name', 'hostname') distinct_services_per_host = LatestMonitor.objects.all().order_by('name', 'hostname', '-timestamp').distinct('name', 'hostname')
monitor_results = algorithms.convert_monitor_to_html(request, distinct_services_per_host) monitor_results = algorithms.convert_monitor_to_html(request, distinct_services_per_host)
return render(request, "taskdatabase/monitoring.html", {'monitor_results': monitor_results}) return render(request, "taskdatabase/monitoring_page.html", {'monitor_results': monitor_results})
class DiagramView(ListView): class DiagramView(ListView):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment