import tool visualizations

This commit is contained in:
Eduardo Silva 2024-07-10 12:06:00 -03:00
parent b2ef6138d9
commit 5732cd8a6c
7 changed files with 149 additions and 5 deletions

View file

@ -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)

View file

@ -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'),

View file

@ -0,0 +1,48 @@
{% extends 'base.html' %}
{% block content %}
<div class='row'>
<div class='col-lg-12'>
<div class="card card-primary card-outline">
{% if page_title %}
<div class="card-header">
<h3 class="card-title">{{ page_title }}</h3>
</div>
{% endif %}
<div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link {% if import_view == 'tasks' %}active{% endif %}" href="?uuid={{ csv_data.uuid }}&view=taks" role="tab">
Tasks
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if import_view == 'processed' %}active{% endif %}" href="?uuid={{ csv_data.uuid }}&view=processed" role="tab">
Processed data
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if import_view == 'raw' %}active{% endif %}" href="?uuid={{ csv_data.uuid }}&view=raw" role="tab">
Raw data
</a>
</li>
</ul>
<div class="row">
<div class="col-lg-12">
{% 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 %}
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,34 @@
<table class="table table-hover datatables-no-export">
<thead>
<tr>
<th class="min-width">Import ID</th>
<th>Name</th>
<th>Address</th>
<th>Port</th>
<th>Username</th>
<th>Password</th>
<th>SSH Key</th>
<th>Router Type</th>
<th>Backup Profile</th>
<th>Router Group</th>
<th>Monitoring</th>
</tr>
</thead>
<tbody>
{% for import_task in csv_data.import_data %}
<tr>
<td>{{ import_task.import_id }}</td>
<td>{{ import_task.name }}</td>
<td>{{ import_task.address }}</td>
<td>{{ import_task.port }}</td>
<td>{{ import_task.username }}</td>
<td>{{ import_task.password }}</td>
<td>{{ import_task.ssh_key }}</td>
<td>{{ import_task.router_type }}</td>
<td>{{ import_task.backup_profile }}</td>
<td>{{ import_task.router_group }}</td>
<td>{{ import_task.monitoring }}</td>
</tr>
{% endfor %}
</tbody>
</table>

View file

@ -0,0 +1 @@
<pre>{{ csv_data.raw_csv_data }}</pre>

View file

@ -16,11 +16,32 @@
<table class="table table-hover datatables-no-export">
<thead>
<tr>
<th>ID</th>
<th>Created</th>
<th>Total Tasks</th>
<th>Success</th>
<th>Error</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{% for import in import_list %}
<tr>
<td>
<a href="/router/import_tool/details/?uuid={{ import.csv_data.uuid }}">
{{ import.csv_data.id }}
</a>
</td>
<td>
{{ import.csv_data.created }}
</td>
<td>{{ import.task_count }}</td>
<td>{{ import.success_count }}</td>
<td>{{ import.error_count }}</td>
<td>{{ import.status }}</td>
</tr>
{% endfor %}
</tbody>
</table>