From 5732cd8a6ca2ac9a8813fa8bd03d96610bc18d2b Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Wed, 10 Jul 2024 12:06:00 -0300 Subject: [PATCH] import tool visualizations --- import_tool/views.py | 45 +++++++++++++++-- routerfleet/urls.py | 3 +- templates/import_tool/import_details.html | 48 +++++++++++++++++++ .../import_tool/import_details_processed.html | 34 +++++++++++++ templates/import_tool/import_details_raw.html | 1 + .../import_tool/import_details_tasks.html | 0 templates/import_tool/import_tool_list.html | 23 ++++++++- 7 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 templates/import_tool/import_details.html create mode 100644 templates/import_tool/import_details_processed.html create mode 100644 templates/import_tool/import_details_raw.html create mode 100644 templates/import_tool/import_details_tasks.html diff --git a/import_tool/views.py b/import_tool/views.py index 3981b25..f68dda0 100644 --- a/import_tool/views.py +++ b/import_tool/views.py @@ -1,12 +1,26 @@ -from django.shortcuts import render +from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.decorators import login_required from .models import CsvData, ImportTask from .forms import CsvDataForm - +from django.contrib import messages @login_required() def view_import_tool_list(request): - import_list = CsvData.objects.all().order_by('-created') + import_list = [] + for csv_data in CsvData.objects.all().order_by('-created'): + import_summary = { + 'csv_data': csv_data, + 'task_count': csv_data.importtask_set.filter(csv_data=csv_data).count(), + 'success_count': csv_data.importtask_set.filter(csv_data=csv_data, import_success=True).count(), + 'error_count': csv_data.importtask_set.filter(csv_data=csv_data, import_error=True).count(), + } + if import_summary['task_count'] != import_summary['success_count'] + import_summary['error_count']: + import_summary['status'] = 'In Progress' + elif import_summary['error_count'] > 0: + import_summary['status'] = 'Completed with Errors' + else: + import_summary['status'] = 'Completed' + import_list.append(import_summary) data = { 'import_list': import_list, 'page_title': 'CSV import List', @@ -14,9 +28,34 @@ def view_import_tool_list(request): return render(request, 'import_tool/import_tool_list.html', context=data) +@login_required() +def view_import_details(request): + csv_data = get_object_or_404(CsvData, uuid=request.GET.get('uuid')) + import_task_list = ImportTask.objects.filter(csv_data=csv_data).order_by('-created') + if request.GET.get('view') == 'raw': + import_view = 'raw' + elif request.GET.get('view') == 'processed': + import_view = 'processed' + else: + import_view = 'tasks' + data = { + 'csv_data': csv_data, + 'import_task_list': import_task_list, + 'import_view': import_view, + } + return render(request, 'import_tool/import_details.html', context=data) + + @login_required() def view_import_csv_file(request): form = CsvDataForm(request.POST or None) data = {'form': form, 'page_title': 'Import CSV File'} + if form.is_valid(): + csv_data_instance = form.save(commit=False) + csv_data_instance.import_data = form.cleaned_data['import_data'] + csv_data_instance.save() + + messages.success(request, 'CSV data successfully processed and saved.') + return redirect('success_url') return render(request, 'generic_form.html', context=data) diff --git a/routerfleet/urls.py b/routerfleet/urls.py index c3f9828..2ae9bfa 100644 --- a/routerfleet/urls.py +++ b/routerfleet/urls.py @@ -10,7 +10,7 @@ from monitoring.views import view_export_router_list, view_update_router_status, from backup_data.views import view_generate_backup_schedule, view_create_backup_tasks, view_perform_backup_tasks, view_housekeeping from routerfleet_tools.views import cron_check_updates from message_center.views import view_message_channel_list, view_manage_message_settings, view_manage_message_channel, view_debug_test_messages, view_cron_concatenate_notifications, view_cron_send_messages, view_cron_daily_reports, view_message_history -from import_tool.views import view_import_tool_list, view_import_csv_file +from import_tool.views import view_import_tool_list, view_import_csv_file, view_import_details urlpatterns = [ @@ -35,6 +35,7 @@ urlpatterns = [ path('router/create_instant_backup/', view_create_instant_backup_task, name='create_instant_backup_task'), path('router/import_tool/', view_import_tool_list, name='import_tool_list'), path('router/import_tool/csv/', view_import_csv_file, name='import_csv_file'), + path('router/import_tool/details/', view_import_details, name='import_details'), path('backup/profile_list/', view_backup_profile_list, name='backup_profile_list'), path('backup/manage_profile/', view_manage_backup_profile, name='manage_backup_profile'), path('backup/backup_list/', view_backup_list, name='backup_list'), diff --git a/templates/import_tool/import_details.html b/templates/import_tool/import_details.html new file mode 100644 index 0000000..cd12196 --- /dev/null +++ b/templates/import_tool/import_details.html @@ -0,0 +1,48 @@ +{% extends 'base.html' %} + + +{% block content %} +
+
+
+ {% if page_title %} +
+

{{ page_title }}

+
+ {% endif %} +
+ +
+
+ {% if import_view == 'tasks' %} + {% include 'import_tool/import_details_tasks.html' %} + {% elif import_view == 'processed' %} + {% include 'import_tool/import_details_processed.html' %} + {% elif import_view == 'raw' %} + {% include 'import_tool/import_details_raw.html' %} + {% endif %} +
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/import_tool/import_details_processed.html b/templates/import_tool/import_details_processed.html new file mode 100644 index 0000000..78d6804 --- /dev/null +++ b/templates/import_tool/import_details_processed.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + {% for import_task in csv_data.import_data %} + + + + + + + + + + + + + + {% endfor %} + +
Import IDNameAddressPortUsernamePasswordSSH KeyRouter TypeBackup ProfileRouter GroupMonitoring
{{ import_task.import_id }}{{ import_task.name }}{{ import_task.address }}{{ import_task.port }}{{ import_task.username }}{{ import_task.password }}{{ import_task.ssh_key }}{{ import_task.router_type }}{{ import_task.backup_profile }}{{ import_task.router_group }}{{ import_task.monitoring }}
\ No newline at end of file diff --git a/templates/import_tool/import_details_raw.html b/templates/import_tool/import_details_raw.html new file mode 100644 index 0000000..1551dea --- /dev/null +++ b/templates/import_tool/import_details_raw.html @@ -0,0 +1 @@ +
{{ csv_data.raw_csv_data }}
\ No newline at end of file diff --git a/templates/import_tool/import_details_tasks.html b/templates/import_tool/import_details_tasks.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/import_tool/import_tool_list.html b/templates/import_tool/import_tool_list.html index cbfe19a..2dafb51 100644 --- a/templates/import_tool/import_tool_list.html +++ b/templates/import_tool/import_tool_list.html @@ -16,11 +16,32 @@ - + + + + + + + {% for import in import_list %} + + + + + + + + + {% endfor %}
IDCreatedTotal TasksSuccessErrorStatus
+ + {{ import.csv_data.id }} + + + {{ import.csv_data.created }} + {{ import.task_count }}{{ import.success_count }}{{ import.error_count }}{{ import.status }}