From c46c3543b110aafee4e7c8b5cef68bb51a881e8b Mon Sep 17 00:00:00 2001 From: Jan Remmer Siebels Date: Mon, 29 Sep 2025 20:42:54 +0200 Subject: [PATCH] Add detailed debugging to backup_cancel function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🐛 Debug Enhancement: - Added extensive print statements to track execution flow - Identify exact location where 'User matching query does not exist' occurs - Added traceback logging for better error diagnosis - Isolated potential problem areas: user access, model saves, audit logging This will help pinpoint where the user query error happens during backup cancellation. --- app/stiftung/views.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/app/stiftung/views.py b/app/stiftung/views.py index 6b13d88..898860a 100644 --- a/app/stiftung/views.py +++ b/app/stiftung/views.py @@ -6013,9 +6013,13 @@ def backup_restore(request): def backup_cancel(request, backup_id): """Cancel a running backup job""" from stiftung.models import BackupJob + import traceback try: + print(f"DEBUG: Attempting to cancel backup job {backup_id}") backup_job = BackupJob.objects.get(id=backup_id) + print(f"DEBUG: Found backup job - ID: {backup_job.id}, Status: {backup_job.status}") + print(f"DEBUG: Created by: {backup_job.created_by}, Current user: {request.user}") # Only allow cancelling running or pending jobs if backup_job.status not in ['running', 'pending']: @@ -6024,35 +6028,53 @@ def backup_cancel(request, backup_id): # Check if user has permission to cancel (either own job or admin) # Handle case where created_by might be None (user deleted) + print(f"DEBUG: Checking permissions - created_by: {backup_job.created_by}, is_staff: {request.user.is_staff}") if backup_job.created_by is not None and backup_job.created_by != request.user and not request.user.is_staff: messages.error(request, "Sie können nur Ihre eigenen Backup-Jobs abbrechen.") return redirect("stiftung:backup_management") # Mark as cancelled + print("DEBUG: About to mark job as cancelled") from django.utils import timezone backup_job.status = "cancelled" backup_job.completed_at = timezone.now() + + print(f"DEBUG: About to set error message with username: {request.user.username}") backup_job.error_message = f"Abgebrochen von {request.user.username}" + + print("DEBUG: About to save backup job") backup_job.save() + print("DEBUG: Backup job saved successfully") # Log the cancellation (with error handling) try: + print("DEBUG: About to log system action") from stiftung.audit import log_system_action + + print(f"DEBUG: About to call get_backup_type_display") + backup_type_display = backup_job.get_backup_type_display() + print(f"DEBUG: Backup type display: {backup_type_display}") + log_system_action( request=request, action="backup_cancel", - description=f"Backup-Job abgebrochen: {backup_job.get_backup_type_display()}", + description=f"Backup-Job abgebrochen: {backup_type_display}", details={"backup_job_id": str(backup_job.id)}, ) + print("DEBUG: System action logged successfully") except Exception as audit_error: + print(f"ERROR in audit logging: {audit_error}") + print(f"ERROR traceback: {traceback.format_exc()}") # Don't fail the cancellation if logging fails - print(f"Warning: Could not log backup cancellation: {audit_error}") - + messages.success(request, f"Backup-Job wurde abgebrochen.") except BackupJob.DoesNotExist: + print(f"ERROR: Backup job {backup_id} not found") messages.error(request, "Backup-Job nicht gefunden.") except Exception as e: + print(f"ERROR: Unexpected error in backup_cancel: {e}") + print(f"ERROR traceback: {traceback.format_exc()}") messages.error(request, f"Fehler beim Abbrechen des Backup-Jobs: {e}") return redirect("stiftung:backup_management")