diff --git a/atdb/atdb/settings/base.py b/atdb/atdb/settings/base.py index 65c60282ab49cb6882064eb1c61c0b4507cd4ba2..72505efc2fed6eb785fc74252d6be1c603241732 100644 --- a/atdb/atdb/settings/base.py +++ b/atdb/atdb/settings/base.py @@ -1,24 +1,9 @@ -""" -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/ diff --git a/atdb/atdb/static/taskdatabase/apertif_logo_fancy.jpg b/atdb/atdb/static/taskdatabase/apertif_logo_fancy.jpg deleted file mode 100644 index f56ddcde75fb606494c63b61248d345e5ba92dfd..0000000000000000000000000000000000000000 Binary files a/atdb/atdb/static/taskdatabase/apertif_logo_fancy.jpg and /dev/null differ diff --git a/atdb/atdb/static/taskdatabase/atdb_logo.jpg b/atdb/atdb/static/taskdatabase/atdb_logo.jpg deleted file mode 100644 index fe1d4f74cb342b2686bcae4729f883d64af100e6..0000000000000000000000000000000000000000 Binary files a/atdb/atdb/static/taskdatabase/atdb_logo.jpg and /dev/null differ diff --git a/atdb/atdb/static/taskdatabase/green_check.png b/atdb/atdb/static/taskdatabase/green_check.png deleted file mode 100644 index c6c649b932a948f44de375f4a91a6dbc56c32581..0000000000000000000000000000000000000000 Binary files a/atdb/atdb/static/taskdatabase/green_check.png and /dev/null differ diff --git a/atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png b/atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png index 6bc631ea2b782577efe6afbe77c2943a0be9dd49..5a0e613a1accfe6ac39c7619258afd968c74e88d 100644 Binary files a/atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png and b/atdb/taskdatabase/static/taskdatabase/ATDB-LDV Workflow Diagram.png differ diff --git a/atdb/taskdatabase/templates/tables2/base.html b/atdb/taskdatabase/templates/tables2/base.html index 13c78c7b263990d526072ef41194cbeda7446e2d..0b17f1fc54ab6675cbfb0cedd5aab5f6f5aec67b 100644 --- a/atdb/taskdatabase/templates/tables2/base.html +++ b/atdb/taskdatabase/templates/tables2/base.html @@ -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> diff --git a/atdb/taskdatabase/templates/taskdatabase/base.html b/atdb/taskdatabase/templates/taskdatabase/base.html index 5cf77c36929a920a7778dc5a22d2ed6ac0417fb6..913a91e764f84e14afe0e9bb9ecfb300ab7b556b 100644 --- a/atdb/taskdatabase/templates/taskdatabase/base.html +++ b/atdb/taskdatabase/templates/taskdatabase/base.html @@ -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">×</span> + </button> + {{ message }} + </div> + </div> + {% endfor %} + <!-- to add blocks of code --> {% block myBlock %} {% endblock %} diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index a06f04b9687d18362e048d1fde1b37e5317c89ae..9afc83048178b9bc9a029d38047d75610822414c 100644 --- a/atdb/taskdatabase/templates/taskdatabase/index.html +++ b/atdb/taskdatabase/templates/taskdatabase/index.html @@ -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> diff --git a/atdb/taskdatabase/templates/taskdatabase/task/task_details.html b/atdb/taskdatabase/templates/taskdatabase/task/task_details.html new file mode 100644 index 0000000000000000000000000000000000000000..d59accf9997a1d5078e94a2fa0f4ff504aee2333 --- /dev/null +++ b/atdb/taskdatabase/templates/taskdatabase/task/task_details.html @@ -0,0 +1,42 @@ +{% 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 diff --git a/atdb/taskdatabase/templates/taskdatabase/tasks.html b/atdb/taskdatabase/templates/taskdatabase/tasks.html index 041338aa7e861c7b2ef10b463377d6da26a95337..2f43ac11155e2d2ca121d69a0e8e5c89d0bd995f 100644 --- a/atdb/taskdatabase/templates/taskdatabase/tasks.html +++ b/atdb/taskdatabase/templates/taskdatabase/tasks.html @@ -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,45 +62,43 @@ </a> </td> + {% if user.is_authenticated %} - {% if user.is_authenticated %} + {% if task.resume %} + <td> + <a href="{% url 'task-hold-resume' task.pk 'hold' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-pause"></i> hold</a> + </td> + {% endif %} + + {% if not task.resume %} + <td> + <a href="{% url 'task-hold-resume' task.pk 'resume' my_tasks.number %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-play"></i> start</a> + </td> + {% endif %} - {% if task.resume %} - <td> - <a href="{% url 'task-hold-resume' task.pk 'hold' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-pause"></i> hold</a> - </td> - {% endif %} + <td> + {% if user.is_staff %} - {% if not task.resume %} - <td> - <a href="{% url 'task-hold-resume' task.pk 'resume' my_tasks.number %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-play"></i> start</a> - </td> + {% if task.status != "defining" %} + <a href="{% url 'task-setstatus-view' task.pk 'defining' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-undo"></i> Reset</a> {% endif %} - - <td> - {% if user.is_staff %} - - {% if task.status != "defining" %} - <a href="{% url 'task-setstatus-view' task.pk 'defining' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-undo"></i> Reset</a> - {% endif %} - {% if task.status == "defining" %} - <a href="{% url 'task-setstatus-view' task.pk 'defined' my_tasks.number %}" class="btn btn-success btn-sm" role="button">Stage</a> - {% endif %} - <a href="{% url 'task-setstatus-view' task.pk 'staged' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button"></i> staged</a> - <a href="{% url 'task-setstatus-view' task.pk 'processed' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">processed</a> - <a href="{% url 'task-setstatus-view' task.pk 'validated' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">validated</a> - <a href="{% url 'task-setstatus-view' task.pk 'scrubbed' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">scrubbed</a> - <a href="{% url 'task-setstatus-view' task.pk 'archived' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">archived</a> - <a href="{% url 'task-setstatus-view' task.pk 'finished' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">finished</a> + {% if task.status == "defining" %} + <a href="{% url 'task-setstatus-view' task.pk 'defined' my_tasks.number %}" class="btn btn-success btn-sm" role="button">Stage</a> {% endif %} + <a href="{% url 'task-setstatus-view' task.pk 'staged' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button"></i> staged</a> + <a href="{% url 'task-setstatus-view' task.pk 'processed' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">processed</a> + <a href="{% url 'task-setstatus-view' task.pk 'validated' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">validated</a> + <a href="{% url 'task-setstatus-view' task.pk 'scrubbed' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">scrubbed</a> + <a href="{% url 'task-setstatus-view' task.pk 'archived' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">archived</a> + <a href="{% url 'task-setstatus-view' task.pk 'finished' my_tasks.number %}" class="btn btn-secondary btn-sm" role="button">finished</a> + {% 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> - {% endif %} - </td> + {% 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> {% endif %} + </td> + {% endif %} - </td> </tr> </div> {% endif %} diff --git a/atdb/taskdatabase/templates/taskdatabase/workflow/workflow_details.html b/atdb/taskdatabase/templates/taskdatabase/workflow/workflow_details.html index a957940695a24f8b8a2b5bcffd96df234b86ed51..cbd270cb2e17bf0e1bdaa12d09c2bab5aba3ac23 100644 --- a/atdb/taskdatabase/templates/taskdatabase/workflow/workflow_details.html +++ b/atdb/taskdatabase/templates/taskdatabase/workflow/workflow_details.html @@ -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> diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py index b5721ebbf2fd95572e46f157368dc6efce2ed545..eff28fbd2ed91ac3f50ffadd3d75b092d71b2ceb 100644 --- a/atdb/taskdatabase/urls.py +++ b/atdb/taskdatabase/urls.py @@ -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'), diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 772a8fcaad80ac794e66282f65bd833e64cad434..6cd5f764117d2967ba7ef82d702771d3d386f3d5 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -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: