diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py index 1a9dcec76c3ae3caa4a9ed9237d13602a0c30f76..fb99eb9f8ebb811642cace878ef033a1aedc44da 100644 --- a/atdb/taskdatabase/services/algorithms.py +++ b/atdb/taskdatabase/services/algorithms.py @@ -17,7 +17,7 @@ DJANGO_TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" logger = logging.getLogger(__name__) @timeit -def get_size(status_list): +def get_size(status_list, type): """ aggregate the sizes of all task with a status in the list :param status_list: list of statuses to consider for the aggregation @@ -26,7 +26,11 @@ def get_size(status_list): logger.info("get_size("+str(status_list)+")") - field = 'size_to_process' + if type == 'processed': + field = 'size_processed' + else: + field = 'size_to_process' + query = field + '__sum' tasks = Task.objects.filter(status__in=status_list) sum_value = tasks.aggregate(Sum(field))[query] @@ -40,10 +44,11 @@ def convert_logentries_to_html(log_entries): results = "" try: - results += "<th>service</th><th>status</th><th>timestamp</th><th>cpu_cycles</th><th>wall_clock_time</th><th>logfile</th>" + results += "<th>service</th><th>step</th><th>status</th><th>timestamp</th><th>cpu_cycles</th><th>wall_clock_time</th><th>logfile</th>" results += "<tbody>" for log in log_entries: - line = "<tr><td><b>" + log.step_name + '</b></td>' + line = "<tr><td><b>" + str(log.service) + '</b></td>' + line += "<td><b>" + str(log.step_name) + '</b></td>' line +='<td class="' + log.status + '" >' + log.status + "</td>" try: line += "<td>" + str(log.timestamp.strftime("%m-%d-%Y, %H:%M:%S")) + "</td>" diff --git a/atdb/taskdatabase/templates/query/action_buttons_per_row.html b/atdb/taskdatabase/templates/query/action_buttons_per_row.html index 9447dc1f47d5db8e52920adac9c109504708fa05..03e74f559591f275f5afab323dbb03b777c88b4d 100644 --- a/atdb/taskdatabase/templates/query/action_buttons_per_row.html +++ b/atdb/taskdatabase/templates/query/action_buttons_per_row.html @@ -1,2 +1,9 @@ <a href="{% url 'task-details' record.pk 0 %}" class="btn btn-primary btn-sm" role="button"><i class="fas fa-list"></i> Details</a> +{% if record.resume %} + <a href="{% url 'task-hold-resume' record.pk 'hold' 0 %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-pause"></i> hold</a> + {% endif %} + +{% if not record.resume %} + <a href="{% url 'task-hold-resume' record.pk 'resume' 0 %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-play"></i> start</a> +{% endif %} \ No newline at end of file diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index 271aae411839e98cea70a8d8df85d06ddafb358a..95f65c9482db7bf3778b525cfaa39b4cf433ea13 100644 --- a/atdb/taskdatabase/templates/taskdatabase/index.html +++ b/atdb/taskdatabase/templates/taskdatabase/index.html @@ -80,7 +80,7 @@ {% include 'taskdatabase/pagination.html' %} </div> </div> - <p class="footer"> Version 1.0.0 (30 mar 2021 - 14:00) + <p class="footer"> Version 1.0.0 (1 apr 2021 - 12:00) </div> diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py index 052b477d21516b1b08f740567040f70a186a84f7..73ac3e5803e38dd362a142c3c12ea0f838176b50 100644 --- a/atdb/taskdatabase/urls.py +++ b/atdb/taskdatabase/urls.py @@ -54,8 +54,8 @@ urlpatterns = [ path('tasks/<int:pk>/setstatus/<new_status>/<page>', views.TaskSetStatus, name='task-setstatus-view'), path('tasks/<int:pk>/setstatus/<new_status>', views.TaskSetStatus, name='task-details-setstatus'), - path('tasks/<int:pk>/change_priority/<priority_change>/<page>', views.TaskChangePriority, name='task-change-priority'), - path('tasks/<int:pk>/change_priority/<priority_change>', views.TaskChangePriority, name='task-change-priority'), + path('tasks/<int:pk>/change_priority/<priority_change>/<page>', views.ChangePriority, name='task-change-priority'), + path('tasks/<int:pk>/change_priority/<priority_change>', views.ChangePriority, name='task-change-priority'), path('tasks/sort-tasks/<sort>', views.SortTasks, name='sort-tasks'), @@ -63,7 +63,7 @@ urlpatterns = [ path('tasks/set_active_filter', views.TaskSetActiveFilter, name='task-set-active-filter'), path('tasks/task-set-onhold-filter/<onhold>', views.TaskSetOnHoldFilter, name='task-set-onhold-filter'), path('tasks/<int:pk>/set_status/<new_status>/<page>', views.TaskSetStatusTables2, name = 'task-setstatus'), - path('tasks/set_status_multi/<new_status>', views.TaskSetStatusMultiTables2, name='task-multi-setstatus'), + path('tasks/set_status_multi/<new_status>', views.TaskSetStatusMulti, name='task-multi-setstatus'), path('tasks/<int:pk>/hold/<hold_it>/<page>', views.Hold, name='task-hold-resume'), diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index a9c06528882f1940353062585f988ed95546a2b3..b9757b70ff548f1d76a0a7b72f8725b36d34fb38 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -458,7 +458,12 @@ def Hold(request,pk,hold_it,page): task = Task.objects.get(pk=pk) task.resume = (hold_it == 'resume') task.save() - return redirect('/atdb/?page='+page) + if page==0: + # redirect to details screen + return redirect('/atdb/query') + else: + # redirect to tasks list + return redirect('/atdb/?page='+page) @login_required def TaskSetStatus(request,pk,new_status,page=0): @@ -495,7 +500,7 @@ def TaskSetOnHoldFilter(request, onhold): @login_required -def TaskChangePriority(request,pk,priority_change,page=0): +def ChangePriority(request, pk, priority_change, page=0): model = Task task = Task.objects.get(pk=pk) priority = task.priority + int(priority_change) @@ -529,7 +534,7 @@ def TaskSetStatusTables2(request,pk,new_status,page): return redirect('/atdb/query/?page='+page) @login_required -def TaskSetStatusMultiTables2(request,new_status): +def TaskSetStatusMulti(request, new_status): # read the current querylist from the session # yikes, this doesn't work if 2 users are simultaneously logged in @@ -562,7 +567,14 @@ class GetSizeView(generics.ListAPIView): # if no 'status__in=' is given, then use the default list status_list = settings.STATUSSES_WITH_DATA - size = algorithms.get_size(status_list) + try: + type = query_params['type'][0] + # should be 'processed' or 'to_process' + except: + # if no 'type=' is given, then use the default list + type = 'to_process' + + size = algorithms.get_size(status_list, type) # return a response return Response({