diff --git a/router_manager/views.py b/router_manager/views.py index ec99fed..9dfb082 100644 --- a/router_manager/views.py +++ b/router_manager/views.py @@ -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/') \ No newline at end of file diff --git a/routerfleet/urls.py b/routerfleet/urls.py index d309596..5108059 100644 --- a/routerfleet/urls.py +++ b/routerfleet/urls.py @@ -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'), diff --git a/templates/router_manager/router_list.html b/templates/router_manager/router_list.html index dc4c8be..b62542e 100644 --- a/templates/router_manager/router_list.html +++ b/templates/router_manager/router_list.html @@ -17,6 +17,7 @@
Select | Name | Type | Address | @@ -31,6 +32,7 @@
---|---|---|---|
{{ router.name }} | @@ -88,7 +90,10 @@ - + + + @@ -160,4 +165,50 @@ checkStatusChange(); }); + {% endblock %} \ No newline at end of file