added in router list checkbox to posible select multiple routers and create backup task

This commit is contained in:
petrunetworking 2025-01-31 01:31:41 +02:00
parent 9770555ebf
commit a730057a6b
3 changed files with 99 additions and 2 deletions

View file

@ -227,3 +227,48 @@ def view_create_instant_backup_task(request):
messages.success(request, 'Backup task created successfully')
return redirect(router_details_url)
@login_required()
def view_create_instant_backup_multiple_routers(request):
# Check user permissions
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=20).exists():
uuid = request.GET.get('uuid')
if uuid:
router_details_url = f'/router/details/?uuid={uuid}'
messages.warning(request, 'Sorry, you do not have permission to create instant backup. Please contact your system administrator if you believe this is an error.')
return redirect(router_details_url)
else:
messages.warning(request, 'Sorry, you do not have permission to create instant backup. Please contact your system administrator if you believe this is an error.')
return redirect('/router/list/')
# Get UUIDs from the request
uuids = request.GET.getlist('uuid') # Changed to getlist for multiple UUIDs
if not uuids:
messages.warning(request, 'At least one UUID is required for Create Backup Task')
return redirect('/router/list/')
# Loop through each UUID and process the backup
for uuid in uuids:
router = get_object_or_404(Router, uuid=uuid)
router_details_url = f'/router/details/?uuid={router.uuid}'
# Check for existing backup tasks
if RouterBackup.objects.filter(router=router, success=False, error=False).exists():
messages.warning(request, f'Backup task not created for {router.name}| Active router backup task already exists')
continue # Skip to the next router
if router.routerstatus.backup_lock is not None:
messages.warning(request, f'Backup task not created for {router.name}| Router backup is currently locked')
continue # Skip to the next router
if not router.backup_profile:
messages.warning(request, f'Backup task not created for {router.name}| Router has no backup profile')
continue # Skip to the next router
router_backup = RouterBackup.objects.create(router=router, schedule_time=timezone.now(), schedule_type='instant')
# Update backup lock status
router.routerstatus.backup_lock = router_backup.schedule_time
router.routerstatus.save()
messages.success(request, f'Backup task created successfully for {router.name}')
return redirect('/router/list/')

View file

@ -6,7 +6,7 @@ from dashboard.views import view_dashboard, view_status,backup_statistics_data,r
from integration_manager.views import view_wireguard_webadmin_launcher, view_manage_wireguard_integration, view_launch_wireguard_webadmin
from user_manager.views import view_manage_user, view_user_list
from accounts.views import view_login, view_logout, view_create_first_user
from router_manager.views import view_router_list, view_manage_router, view_router_group_list, view_ssh_key_list, view_manage_router_group, view_manage_sshkey, view_router_details, view_create_instant_backup_task, view_router_availability
from router_manager.views import view_create_instant_backup_multiple_routers, view_router_list, view_manage_router, view_router_group_list, view_ssh_key_list, view_manage_router_group, view_manage_sshkey, view_router_details, view_create_instant_backup_task, view_router_availability
from backup.views import view_backup_profile_list, view_manage_backup_profile, view_backup_list, view_backup_details, view_debug_run_backups, view_compare_backups, view_backup_download, view_backup_delete
from monitoring.views import view_export_router_list, view_update_router_status, view_router_config_timestamp, view_router_last_status_change
from backup_data.views import view_generate_backup_schedule, view_create_backup_tasks, view_perform_backup_tasks, view_housekeeping
@ -37,6 +37,7 @@ urlpatterns = [
path('router/manage_group/', view_manage_router_group, name='manage_router_group'),
path('router/manage_sshkey/', view_manage_sshkey, name='manage_sshkey'),
path('router/create_instant_backup/', view_create_instant_backup_task, name='create_instant_backup_task'),
path('router/create_instant_backup/multiple/', view_create_instant_backup_multiple_routers, name='create_instant_backup_multiple'),
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'),

View file

@ -17,6 +17,7 @@
<table class="table table-hover datatables-no-export">
<thead>
<tr>
<th>Select</th>
<th>Name</th>
<th>Type</th>
<th>Address</th>
@ -31,6 +32,7 @@
<tbody>
{% for router in router_list %}
<tr {% if not router.enabled %}style="text-decoration: line-through;"{% endif %}>
<td><input type="checkbox" class="router-checkbox" data-uuid="{{ router.uuid }}"></td>
<td>
<a href="/router/details/?uuid={{ router.uuid }}">{{ router.name }}</a>
</td>
@ -88,7 +90,10 @@
</div>
</div>
<div class="form-group mb-0" id="backup-type-container" style="display: none;">
</div>
<button id="create-backup" class="btn btn-warning mr-2" style="display: none;">Create Backup Task</button>
</div>
</div>
</div>
</div>
@ -160,4 +165,50 @@
checkStatusChange();
});
</script>
<script>
$(document).ready(function() {
$('.router-checkbox').prop('checked', false);
// Check checkbox change event
$('.router-checkbox').change(function() {
var checkedCount = $('.router-checkbox:checked').length;
// Show the backup type selector and the backup button only if 2 or more routers are selected
if (checkedCount >= 2) {
$('#backup-type-container').show(); // Show the backup type dropdown
$('#create-backup').show(); // Show the backup button
} else {
$('#backup-type-container').hide(); // Hide the backup type dropdown
$('#create-backup').hide(); // Hide the backup button
}
});
// Backup button click event
$('#create-backup').click(function() {
var selectedRouters = [];
$('.router-checkbox:checked').each(function() {
selectedRouters.push($(this).data('uuid')); // Collect UUIDs of selected routers
});
// Perform the backup operation (AJAX or redirect)
alert('Creating ' + backupType + ' backup for routers: ' + selectedRouters.join(', '));
// Example AJAX request
$.ajax({
url: '/router/create_instant_backup/multiple/',
method: 'POST',
data: {
routers: selectedRouters,
csrfmiddlewaretoken: '{{ csrf_token }}' // Ensure CSRF token is included for Django
},
success: function(response) {
alert('Backup started for selected routers');
},
error: function(xhr, status, error) {
alert('Error starting backup: ' + error);
}
});
});
});
</script>
{% endblock %}