Improved multiple backup js

This commit is contained in:
Eduardo Silva 2025-02-05 16:49:59 -03:00
parent 5d07a8e8ce
commit 217e271cd4
3 changed files with 84 additions and 64 deletions

View file

@ -258,10 +258,7 @@ def view_create_instant_backup_multiple_routers(request):
for uuid in uuids: for uuid in uuids:
router = get_object_or_404(Router, uuid=uuid) router = get_object_or_404(Router, uuid=uuid)
error = create_instant_backup(router) error = create_instant_backup(router)
if error: results.append({'router': router.name, 'status': error})
results.append({'router': router.name, 'status': error})
else:
results.append({'router': router.name, 'status': 'backup started'})
return JsonResponse({'results': results}) return JsonResponse({'results': results})

View file

@ -142,6 +142,6 @@ STATICFILES_DIRS = [
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
MEDIA_ROOT = '/var/lib/routerfleet/' MEDIA_ROOT = '/var/lib/routerfleet/'
ROUTERFLEET_VERSION = 7023 ROUTERFLEET_VERSION = 7501
from routerfleet.production_settings import * from routerfleet.production_settings import *

View file

@ -74,17 +74,14 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-lg-12 text-right"> <div class="col-lg-12 text-right">
<div class="btn-group" role="group"> <a href="/router/manage/" class="btn btn-primary">Add Router</a>
<a href="/router/manage/" class="btn btn-primary">Add Router</a> <a href="/router/import_tool/" class="btn btn-primary">Import Tool</a>
<a href="/router/import_tool/" class="btn btn-warning">Import Tool</a> <button id="select-all" class="btn btn-outline-primary" title="Select All"><i class="fas fa-check-square"></i></button>
<button id="select-all" class="btn btn-outline-success"><i class="fas fa-check-square"></i> Select All</button> <button id="select-none" class="btn btn-outline-primary" title="Select None"><i class="fas fa-square"></i></button>
<button id="select-none" class="btn btn-outline-danger"><i class="fas fa-square"></i> Select None</button> <button id="create-backup" class="btn btn-warning" style="display: none;">Create Backup Task</button>
<button id="create-backup" class="btn btn-warning" style="display: none;">Create Backup Task</button>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -159,58 +156,84 @@
checkStatusChange(); checkStatusChange();
}); });
</script> </script>
<script>
$(document).ready(function() { <script>
$('.router-checkbox').prop('checked', false); $(document).ready(function() {
$('.router-checkbox').prop('checked', false);
$('#select-all').click(function() {
$('.router-checkbox').prop('checked', true).trigger('change'); $('#select-all').click(function() {
}); $('.router-checkbox').prop('checked', true).trigger('change');
});
$('#select-none').click(function() {
$('.router-checkbox').prop('checked', false).trigger('change'); $('#select-none').click(function() {
}); $('.router-checkbox').prop('checked', false).trigger('change');
});
$('.router-checkbox').change(function() {
var checkedCount = $('.router-checkbox:checked').length; $('.router-checkbox').change(function() {
$('#create-backup').toggle(checkedCount >= 1); var checkedCount = $('.router-checkbox:checked').length;
}); $('#create-backup').toggle(checkedCount >= 1);
});
$('#create-backup').click(function() {
var selectedRouters = $('.router-checkbox:checked').map(function() { $('#create-backup').click(function() {
return $(this).data('uuid'); var selectedRouters = $('.router-checkbox:checked').map(function() {
}).get(); return $(this).data('uuid');
}).get();
$.ajax({
url: '/router/create_instant_backup/multiple/', $.ajax({
method: 'POST', url: '/router/create_instant_backup/multiple/',
data: { method: 'POST',
routers: selectedRouters, data: {
csrfmiddlewaretoken: '{{ csrf_token }}' routers: selectedRouters,
}, csrfmiddlewaretoken: '{{ csrf_token }}'
success: function(response) { },
let messages = response.results.map(item => `${item.router}: ${item.status}`).join('\n'); success: function(response) {
// Create success toast let successRouters = [];
$(document).Toasts('create', { let errorMessages = [];
class: 'bg-success',
title: 'Backup Status', response.results.forEach(function(item) {
body: 'The following routers were backed up: ' + messages, if (item.status === null || item.status === undefined || item.status === '') {
delay: 10000, successRouters.push(item.router);
autohide: true } else {
}); errorMessages.push(item.router + ': ' + item.status);
}, }
error: function(xhr) { });
// Create error toast
$(document).Toasts('create', { if (successRouters.length > 0) {
class: 'bg-danger', $(document).Toasts('create', {
title: 'Error', class: 'bg-success',
body: 'Error: ' + xhr.responseJSON.error, title: 'Backup Started',
delay: 10000, body: 'Backup started for:<br>' + successRouters.join('<br>'),
autohide: true delay: 10000,
}); autohide: true
} });
}
if (errorMessages.length > 0) {
$(document).Toasts('create', {
class: 'bg-danger',
title: 'Backup Errors',
body: 'Problems:<br>' + errorMessages.join('<br>'),
delay: 10000,
autohide: true
});
}
$('.router-checkbox').prop('checked', false).trigger('change');
},
error: function(xhr) {
$(document).Toasts('create', {
class: 'bg-danger',
title: 'Error',
body: 'Error: ' + xhr.responseJSON.error,
delay: 10000,
autohide: true
});
$('.router-checkbox').prop('checked', false).trigger('change');
}
});
}); });
}); });
});
</script> </script>
{% endblock %} {% endblock %}