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:
petrunetworking 2025-02-03 22:32:36 +02:00
parent a730057a6b
commit 9f26425a4f
2 changed files with 99 additions and 100 deletions

View file

@ -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)

View file

@ -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
});
} }
}); });
}); });