mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-07-20 02:45:12 +02:00
Update bug When I click on "Create backup task," it doesn’t seem to work. The console shows this error: "Uncaught ReferenceError: backupType is not defined."
This commit is contained in:
parent
a730057a6b
commit
9f26425a4f
2 changed files with 99 additions and 100 deletions
|
@ -1,5 +1,6 @@
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
|
from django.http import JsonResponse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
@ -227,48 +228,44 @@ def view_create_instant_backup_task(request):
|
||||||
messages.success(request, 'Backup task created successfully')
|
messages.success(request, 'Backup task created successfully')
|
||||||
return redirect(router_details_url)
|
return redirect(router_details_url)
|
||||||
|
|
||||||
@login_required()
|
@login_required
|
||||||
def view_create_instant_backup_multiple_routers(request):
|
def view_create_instant_backup_multiple_routers(request):
|
||||||
# Check user permissions
|
if request.method == 'POST':
|
||||||
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=20).exists():
|
if not UserAcl.objects.filter(user=request.user, user_level__gte=20).exists():
|
||||||
uuid = request.GET.get('uuid')
|
return JsonResponse({'error': 'Permission denied.'}, status=403)
|
||||||
if uuid:
|
|
||||||
router_details_url = f'/router/details/?uuid={uuid}'
|
uuids = request.POST.getlist('routers[]') # Ajustat pentru a primi lista corect
|
||||||
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:
|
if not uuids:
|
||||||
messages.warning(request, 'At least one UUID is required for Create Backup Task')
|
return JsonResponse({'error': 'No routers selected.'}, status=400)
|
||||||
return redirect('/router/list/')
|
|
||||||
|
|
||||||
# Loop through each UUID and process the backup
|
results = []
|
||||||
for uuid in uuids:
|
for uuid in uuids:
|
||||||
router = get_object_or_404(Router, uuid=uuid)
|
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():
|
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')
|
results.append({'router': router.name, 'status': 'active backup task exists'})
|
||||||
continue # Skip to the next router
|
continue
|
||||||
|
|
||||||
if router.routerstatus.backup_lock is not None:
|
if router.routerstatus.backup_lock:
|
||||||
messages.warning(request, f'Backup task not created for {router.name}| Router backup is currently locked')
|
results.append({'router': router.name, 'status': 'backup locked'})
|
||||||
continue # Skip to the next router
|
continue
|
||||||
|
|
||||||
if not router.backup_profile:
|
if not router.backup_profile:
|
||||||
messages.warning(request, f'Backup task not created for {router.name}| Router has no backup profile')
|
results.append({'router': router.name, 'status': 'no backup profile'})
|
||||||
continue # Skip to the next router
|
continue
|
||||||
|
|
||||||
router_backup = RouterBackup.objects.create(router=router, schedule_time=timezone.now(), schedule_type='instant')
|
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.backup_lock = router_backup.schedule_time
|
||||||
router.routerstatus.save()
|
router.routerstatus.save()
|
||||||
messages.success(request, f'Backup task created successfully for {router.name}')
|
|
||||||
|
|
||||||
return redirect('/router/list/')
|
results.append({'router': router.name, 'status': 'backup started'})
|
||||||
|
|
||||||
|
return JsonResponse({'results': results})
|
||||||
|
|
||||||
|
return JsonResponse({'error': 'Invalid request method.'}, status=405)
|
||||||
|
|
|
@ -27,18 +27,14 @@
|
||||||
<th>Auth</th>
|
<th>Auth</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for router in router_list %}
|
{% for router in router_list %}
|
||||||
<tr {% if not router.enabled %}style="text-decoration: line-through;"{% endif %}>
|
<tr {% if not router.enabled %}style="text-decoration: line-through;"{% endif %}>
|
||||||
<td><input type="checkbox" class="router-checkbox" data-uuid="{{ router.uuid }}"></td>
|
<td><input type="checkbox" class="router-checkbox" data-uuid="{{ router.uuid }}"></td>
|
||||||
<td>
|
<td><a href="/router/details/?uuid={{ router.uuid }}">{{ router.name }}</a></td>
|
||||||
<a href="/router/details/?uuid={{ router.uuid }}">{{ router.name }}</a>
|
|
||||||
</td>
|
|
||||||
<td>{{ router.get_router_type_display }}</td>
|
<td>{{ router.get_router_type_display }}</td>
|
||||||
<td>{{ router.address }}</td>
|
<td>{{ router.address }}</td>
|
||||||
|
|
||||||
<td id="status-{{ router.uuid }}">
|
<td id="status-{{ router.uuid }}">
|
||||||
{% if router.monitoring %}
|
{% if router.monitoring %}
|
||||||
{% if router.routerstatus.status_online %}
|
{% if router.routerstatus.status_online %}
|
||||||
|
@ -59,9 +55,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>{{ router.routergroup_set.count }}</td>
|
||||||
{{ router.routergroup_set.count }}
|
|
||||||
</td>
|
|
||||||
<td class="min-width">
|
<td class="min-width">
|
||||||
{% if router.router_type != 'monitoring' %}
|
{% if router.router_type != 'monitoring' %}
|
||||||
{% if router.ssh_key %}
|
{% if router.ssh_key %}
|
||||||
|
@ -80,19 +74,19 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row mb-3">
|
||||||
<div class="col-lg-12">
|
<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-outline-primary">Import tool</a>
|
<a href="/router/import_tool/" class="btn btn-warning">Import Tool</a>
|
||||||
|
<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-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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group mb-0" id="backup-type-container" style="display: none;">
|
|
||||||
</div>
|
</div>
|
||||||
<button id="create-backup" class="btn btn-warning mr-2" style="display: none;">Create Backup Task</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -168,44 +162,52 @@
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('.router-checkbox').prop('checked', false);
|
$('.router-checkbox').prop('checked', false);
|
||||||
// Check checkbox change event
|
|
||||||
|
$('#select-all').click(function() {
|
||||||
|
$('.router-checkbox').prop('checked', true).trigger('change');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#select-none').click(function() {
|
||||||
|
$('.router-checkbox').prop('checked', false).trigger('change');
|
||||||
|
});
|
||||||
|
|
||||||
$('.router-checkbox').change(function() {
|
$('.router-checkbox').change(function() {
|
||||||
var checkedCount = $('.router-checkbox:checked').length;
|
var checkedCount = $('.router-checkbox:checked').length;
|
||||||
|
$('#create-backup').toggle(checkedCount >= 1);
|
||||||
// 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() {
|
$('#create-backup').click(function() {
|
||||||
var selectedRouters = [];
|
var selectedRouters = $('.router-checkbox:checked').map(function() {
|
||||||
$('.router-checkbox:checked').each(function() {
|
return $(this).data('uuid');
|
||||||
selectedRouters.push($(this).data('uuid')); // Collect UUIDs of selected routers
|
}).get();
|
||||||
});
|
|
||||||
|
|
||||||
// Perform the backup operation (AJAX or redirect)
|
|
||||||
alert('Creating ' + backupType + ' backup for routers: ' + selectedRouters.join(', '));
|
|
||||||
|
|
||||||
// Example AJAX request
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/router/create_instant_backup/multiple/',
|
url: '/router/create_instant_backup/multiple/',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: {
|
data: {
|
||||||
routers: selectedRouters,
|
routers: selectedRouters,
|
||||||
csrfmiddlewaretoken: '{{ csrf_token }}' // Ensure CSRF token is included for Django
|
csrfmiddlewaretoken: '{{ csrf_token }}'
|
||||||
},
|
},
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
alert('Backup started for selected routers');
|
let messages = response.results.map(item => `${item.router}: ${item.status}`).join('\n');
|
||||||
|
// Create success toast
|
||||||
|
$(document).Toasts('create', {
|
||||||
|
class: 'bg-success',
|
||||||
|
title: 'Backup Status',
|
||||||
|
body: 'The following routers were backed up: ' + messages,
|
||||||
|
delay: 10000,
|
||||||
|
autohide: true
|
||||||
|
});
|
||||||
},
|
},
|
||||||
error: function(xhr, status, error) {
|
error: function(xhr) {
|
||||||
alert('Error starting backup: ' + error);
|
// Create error toast
|
||||||
|
$(document).Toasts('create', {
|
||||||
|
class: 'bg-danger',
|
||||||
|
title: 'Error',
|
||||||
|
body: 'Error: ' + xhr.responseJSON.error,
|
||||||
|
delay: 10000,
|
||||||
|
autohide: true
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue