mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-06-21 01:25:41 +02:00
task create and visualization
This commit is contained in:
parent
5732cd8a6c
commit
f153d16947
6 changed files with 128 additions and 3 deletions
|
@ -1,3 +1,18 @@
|
|||
from django.contrib import admin
|
||||
from .models import CsvData, ImportTask
|
||||
|
||||
# Register your models here.
|
||||
|
||||
class CsvDataAdmin(admin.ModelAdmin):
|
||||
list_display = ('uuid', 'created', 'updated')
|
||||
search_fields = ('uuid', 'created', 'updated')
|
||||
readonly_fields = ('uuid', 'created', 'updated')
|
||||
|
||||
admin.site.register(CsvData, CsvDataAdmin)
|
||||
|
||||
|
||||
class ImportTaskAdmin(admin.ModelAdmin):
|
||||
list_display = ('uuid', 'created', 'updated')
|
||||
search_fields = ('uuid', 'created', 'updated')
|
||||
readonly_fields = ('uuid', 'created', 'updated')
|
||||
|
||||
admin.site.register(ImportTask, ImportTaskAdmin)
|
||||
|
|
22
import_tool/migrations/0005_importtask_import_id_and_more.py
Normal file
22
import_tool/migrations/0005_importtask_import_id_and_more.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Generated by Django 5.0.7 on 2024-07-10 18:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('import_tool', '0004_importtask_backup_profile_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='importtask',
|
||||
name='import_id',
|
||||
field=models.IntegerField(default=0),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='importtask',
|
||||
unique_together={('csv_data', 'import_id')},
|
||||
),
|
||||
]
|
|
@ -14,11 +14,12 @@ class CsvData(models.Model):
|
|||
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
return str(self.id)
|
||||
|
||||
|
||||
class ImportTask(models.Model):
|
||||
csv_data = models.ForeignKey(CsvData, on_delete=models.CASCADE)
|
||||
import_id = models.IntegerField(default=0)
|
||||
router = models.ForeignKey(Router, on_delete=models.SET_NULL, blank=True, null=True)
|
||||
name = models.CharField(max_length=100)
|
||||
ssh_key = models.ForeignKey(SSHKey, on_delete=models.SET_NULL, blank=True, null=True)
|
||||
|
@ -45,3 +46,5 @@ class ImportTask(models.Model):
|
|||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
unique_together = ['csv_data', 'import_id']
|
||||
|
|
|
@ -31,17 +31,52 @@ def view_import_tool_list(request):
|
|||
@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')
|
||||
import_task_list = ImportTask.objects.filter(csv_data=csv_data).order_by('import_id')
|
||||
if request.GET.get('view') == 'raw':
|
||||
import_view = 'raw'
|
||||
elif request.GET.get('view') == 'processed':
|
||||
import_view = 'processed'
|
||||
else:
|
||||
import_view = 'tasks'
|
||||
|
||||
if request.GET.get('action') == 'create_tasks':
|
||||
tasks_created = 0
|
||||
for task in csv_data.import_data:
|
||||
import_task, import_task_created = ImportTask.objects.get_or_create(
|
||||
csv_data=csv_data, import_id=task['import_id'], defaults={
|
||||
'name': task['name'],
|
||||
'username': task['username'],
|
||||
'password': task['password'],
|
||||
'address': task['address'],
|
||||
'port': task['port'],
|
||||
'router_type': task['router_type'],
|
||||
'backup_profile_name': task['backup_profile'],
|
||||
'router_group_name': task['router_group'],
|
||||
'ssh_key_name': task['ssh_key'],
|
||||
'monitoring': True if task['monitoring'] == 'true' else False,
|
||||
}
|
||||
)
|
||||
if import_task_created:
|
||||
tasks_created += 1
|
||||
if tasks_created > 0:
|
||||
messages.success(request, f'Tasks created: {tasks_created}')
|
||||
else:
|
||||
messages.warning(request, 'No new tasks created.')
|
||||
return redirect(f'/router/import_tool/details/?uuid={csv_data.uuid}')
|
||||
elif request.GET.get('action') == 'start_import':
|
||||
import_view = 'tasks'
|
||||
pass
|
||||
elif request.GET.get('action') == 'delete':
|
||||
#import_task_list.delete()
|
||||
#csv_data.delete()
|
||||
messages.warning(request, 'Delete action not implemented yet.')
|
||||
return redirect('/router/import_tool')
|
||||
|
||||
data = {
|
||||
'csv_data': csv_data,
|
||||
'import_task_list': import_task_list,
|
||||
'import_view': import_view,
|
||||
'page_title': f'Import Details - {csv_data.id}',
|
||||
}
|
||||
return render(request, 'import_tool/import_details.html', context=data)
|
||||
|
||||
|
@ -59,3 +94,4 @@ def view_import_csv_file(request):
|
|||
return redirect('success_url')
|
||||
|
||||
return render(request, 'generic_form.html', context=data)
|
||||
|
||||
|
|
|
@ -41,6 +41,12 @@
|
|||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12" style="padding-top: 10px">
|
||||
<a href="/router/import_tool/details/?uuid={{ csv_data.uuid }}&action=create_tasks" class="btn btn-primary">Create import Tasks</a>
|
||||
<a href="/router/import_tool/details/?uuid={{ csv_data.uuid }}&action=start_tasks" class="btn btn-primary">start/resume</a>
|
||||
<a href="/router/import_tool/details/?uuid={{ csv_data.uuid }}&action=delete" onclick="return confirm('Are you sure you want to remove the current import task?\n\nThis action will remove all import data associated with this task, but will not affect routers that have already been imported.\n\nPress OK to confirm or Cancel to return.');" class="btn btn-primary">Delete import</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th style="display: none;">UUID</th>
|
||||
<th>Name</th>
|
||||
<th>Address</th>
|
||||
<th>Status</th>
|
||||
<th>Error message</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for task in import_task_list %}
|
||||
<tr>
|
||||
<td>{{ task.import_id }}</td>
|
||||
<td style="display: none;">{{ task.uuid }}</td>
|
||||
<td>
|
||||
{% if task.router %}
|
||||
<a href="/router/details/?uuid={{ task.router.uuid }}" title="Task name: {{ task.name }}">{{ task.router.name }}</a>
|
||||
{% else %}
|
||||
{{ task.name }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ task.address }}</td>
|
||||
<td id="status-{{ task.uuid }}">
|
||||
{% if task.import_success %}
|
||||
<span class="badge badge-success">Success</span>
|
||||
{% elif task.import_error %}
|
||||
<span class="badge badge-danger">Error</span>
|
||||
{% else %}
|
||||
<span class="badge badge-warning">Pending</span>
|
||||
{% endif %}
|
||||
{% comment %}
|
||||
<span class="badge badge-info">Working...</span>
|
||||
{% endcomment %}
|
||||
</td>
|
||||
<td>{{ task.import_error_message|default_if_none:'' }}</td>
|
||||
</tr>
|
||||
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
Loading…
Add table
Add a link
Reference in a new issue