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

add task details page

parent d31b8cbd
Branches
No related tags found
3 merge requests!73Master,!54Master,!47add task details page
Showing
with 149 additions and 69 deletions
"""
Django settings for atdb project.
Generated by 'django-admin startproject' using Django 2.0.3.
For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'cie-((m#n$br$6l53yash45*2^mwuux*2u)bad5(0flx@krnj9'
......@@ -94,14 +79,6 @@ REST_FRAMEWORK = {
'PAGE_SIZE': 100
}
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
'REPLACE_WITH_DB_JSON': False
}
# Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
......@@ -192,6 +169,15 @@ LOGGING = {
}
}
from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
messages.DEBUG: 'alert-secondary',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
}
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
......
atdb/atdb/static/taskdatabase/apertif_logo_fancy.jpg

205 KiB

atdb/atdb/static/taskdatabase/atdb_logo.jpg

42.4 KiB

atdb/atdb/static/taskdatabase/green_check.png

120 KiB

atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png

140 KiB | W: | H:

atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png

117 KiB | W: | H:

atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png
atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png
atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png
atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -34,11 +34,11 @@
<div class="container-fluid">
<ul class="nav navbar-nav">
<!-- Header -->
<li><a class="navbar-brand" href="{% url 'index' %}">
<li><a class="navbar-brand" href="{% url 'homepage' %}">
<img src="{% static 'taskdatabase/ldvlogo_small.png' %}" height="30" alt="">
ATDB-LDV</a>
</li>
<li><a class="nav-link" href="{% url 'index' %}">Tasks</a></li>
<li><a class="nav-link" href="{% url 'homepage' %}">Tasks</a></li>
<li><a class="nav-link" href="{% url 'tables2' %}">Query</a></li>
<li><a class="nav-link" href="{% url 'diagram' %}">State Diagram</a></li>
<li><a class="nav-link" href="{% url 'admin:index' %}">Admin</a></li>
......
......@@ -34,11 +34,12 @@
<div class="container-fluid">
<ul class="nav navbar-nav">
<!-- Header -->
<li><a class="navbar-brand" href="{% url 'index' %}">
<li><a class="navbar-brand" href="{% url 'homepage' %}">
<img src="{% static 'taskdatabase/ldvlogo_small.png' %}" height="30" alt="">
ATDB-LDV Dashboard</a>
</li>
<li><a class="nav-link" href="{% url 'index' %}">Tasks</a></li>
<li><a class="nav-link" href="{% url 'homepage' %}">Tasks</a></li>
<li><a class="nav-link" href="{% url 'task-details' 0 0 %}">Details</a></li>
<li><a class="nav-link" href="{% url 'tables2' %}">Query</a></li>
<li><a class="nav-link" href="{% url 'diagram' %}">State Diagram</a></li>
{% if user.is_staff %}
......@@ -53,6 +54,17 @@
</nav>
{% for message in messages %}
<div class="container-fluid p-0">
<div class="alert {{ message.tags }} alert-dismissible" role="alert" >
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
{{ message }}
</div>
</div>
{% endfor %}
<!-- to add blocks of code -->
{% block myBlock %}
{% endblock %}
......
......@@ -46,7 +46,7 @@
{% include 'taskdatabase/pagination.html' %}
</div>
</div>
<p class="footer"> Version 1.0.0 (4 mar 2021 - 15:00)
<p class="footer"> Version 1.0.0 (5 mar 2021 - 12:00)
</div>
......
{% extends 'taskdatabase/base.html' %}
{% load static %}
{% block myBlock %}
<div class="container">
<div class="row">
<div class="col-sm">
<div class="card">
<div class="card-body">
<h3>Task: {{ task.id }}</h3>
<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>
<tr><td><b>status</b></td><td>{{ task.status }}</td></tr>
<td><b>tasks list</b></td><td><a href="{% url 'tasks-api' %}" class="btn btn-secondary btn-sm" role="button" target="_blank">REST API</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-sm">
<div class="card">
<div class="card-body">
<h3>Logentries: {{ task.id }}</h3>
<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>
<tr><td><b>status</b></td><td>{{ task.status }}</td></tr>
<td><b>tasks list</b></td><td><a href="{% url 'tasks-api' %}" class="btn btn-secondary btn-sm" role="button" target="_blank">REST API</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
......@@ -31,6 +31,12 @@
<td>{{ task.size_to_process|filesizeformat }} </td>
<td>
<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 %}"
> Task
</a>
<a class="open-modal btn btn-primary btn-sm"
href="{% url 'workflow-details' task.workflow %}"
data-popup-url="{% url 'workflow-details' task.workflow %}"
......@@ -56,7 +62,6 @@
</a>
</td>
{% if user.is_authenticated %}
{% if task.resume %}
......@@ -89,12 +94,11 @@
{% endif %}
{% if task.status == "processed" %}
<a href="{% url 'task-setstatus-view' task.pk 'validated' my_tasks.number %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-check"></i> Validate</a>
<a href="{% url 'task-setstatus-view' task.pk 'validated' my_tasks.number %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-check"></i> validate</a>
{% endif %}
</td>
{% endif %}
</td>
</tr>
</div>
{% endif %}
......
......@@ -14,7 +14,7 @@
<tr><td><b>commit_id</b></td><td>{{ workflow.commit_id }}</td></tr>
<tr><td><b>path</b></td><td>{{ workflow.path }}</td></tr>
<tr>
<td><b>workflows list</b></td><td><a href="{% url 'workflows' %}" class="btn btn-secondary btn-sm" role="button">REST API</a></td>
<td><b>workflows list</b></td><td><a href="{% url 'workflows-api' %}" class="btn btn-secondary btn-sm" role="button" target="_blank">REST API</a></td>
</tr>
</tbody>
</table>
......
......@@ -4,8 +4,15 @@ from . import views
urlpatterns = [
# --- GUI ---
path('', views.IndexView.as_view(), name='homepage'),
path('/<page>', views.IndexView.as_view(), name='homepage_page'),
path('task_details/<int:id>/<page>', views.TaskDetails, name='task-details'),
path('', views.IndexView.as_view(), name='index'),
path('show-inputs/<int:id>/', views.ShowInputs, name='show-inputs'),
path('show-outputs/<int:id>/', views.ShowOutputs, name='show-outputs'),
path('show-metrics/<int:id>/', views.ShowMetrics, name='show-metrics'),
path('workflow_details/<int:id>/', views.WorkflowDetails, name='workflow-details'),
path('dashboard/', views.DashboardView.as_view(), name='dashboard'),
path('dashboard/charts', views.ChartsView.as_view(), name='dashboard-charts'),
......@@ -16,15 +23,11 @@ urlpatterns = [
path('diagram/', views.DiagramView.as_view(), name='diagram'),
# --- REST API ---
path('tasks/', views.TaskListViewAPI.as_view()),
path('tasks/', views.TaskListViewAPI.as_view(), name='tasks-api'),
path('tasks/<int:pk>/', views.TaskDetailsViewAPI.as_view(), name='task-detail-view-api'),
path('show-inputs/<int:id>/', views.ShowInputs, name='show-inputs'),
path('show-outputs/<int:id>/', views.ShowOutputs, name='show-outputs'),
path('show-metrics/<int:id>/', views.ShowMetrics, name='show-metrics'),
path('workflows/', views.WorkflowListViewAPI.as_view(), name='workflows'),
path('workflows/', views.WorkflowListViewAPI.as_view(), name='workflows-api'),
path('workflows/<int:pk>/', views.WorkflowDetailsViewAPI.as_view(), name='workflow-detail-view-api'),
path('workflow_details/<int:id>/', views.WorkflowDetails, name='workflow-details'),
path('logentries/', views.LogEntryListViewAPI.as_view()),
path('logentries/<int:pk>/', views.LogEntryDetailsViewAPI.as_view(), name='logentry-detail-view-api'),
......
......@@ -6,6 +6,8 @@ import datetime
from . import config
from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic import ListView
from django.contrib import messages
from rest_framework import generics, pagination
from rest_framework.response import Response
from django_filters import rest_framework as filters
......@@ -96,8 +98,8 @@ class FilteredTaskListView(SingleTableMixin, FilterView):
table_class = TaskTable
model = Task
template_name = "tables2/index.html"
filterset_class = TaskFilterGUI
#filterset_class = TaskFilterGUI
filterset_class = TaskFilter
class DiagramView(ListView):
model = Task
......@@ -136,6 +138,14 @@ class IndexView(ListView):
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:
......@@ -218,6 +228,29 @@ class TaskDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView):
return TaskWriteSerializer
def TaskDetails(request, id, page):
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
return render(request, "taskdatabase/task/task_details.html", {'task': task })
def convert_list_of_dicts_to_html(my_list):
results = ""
try:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment