mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-08-03 09:44:31 +02:00
Improved multiple backup js
This commit is contained in:
parent
5d07a8e8ce
commit
217e271cd4
3 changed files with 84 additions and 64 deletions
|
@ -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})
|
||||||
|
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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 %}
|
Loading…
Add table
Add a link
Reference in a new issue