From 2516c8a31228d61a96b9decf6586ff2bb846afa2 Mon Sep 17 00:00:00 2001 From: UserIsMH Date: Wed, 18 Jun 2025 02:00:50 +0200 Subject: [PATCH] Resource Pool wieder hergestellt --- v2_adminpanel/FEHLERSUCHE.md | 16 ++++++++++++---- v2_adminpanel/routes/resource_routes.py | 12 +++++++++++- v2_adminpanel/templates/resources.html | 2 +- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/v2_adminpanel/FEHLERSUCHE.md b/v2_adminpanel/FEHLERSUCHE.md index 073d5d5..113be00 100644 --- a/v2_adminpanel/FEHLERSUCHE.md +++ b/v2_adminpanel/FEHLERSUCHE.md @@ -1,19 +1,27 @@ # Fehlersuche - v2_adminpanel Refactoring -## Aktueller Stand (18.06.2025 - 02:15 Uhr) +## Aktueller Stand (18.06.2025 - 02:30 Uhr) ✅ **ALLE KRITISCHEN PROBLEME GELÖST** - Resources Route funktioniert jetzt korrekt - Customers-Licenses Route funktioniert jetzt korrekt - Container startet ohne Fehler -### Neue Fixes (18.06.2025 - 02:15 Uhr) +### Finale Fixes (18.06.2025 - 02:30 Uhr) 1. **Customers-Licenses Template Fix**: - Problem: `url_for('api.toggle_license', license_id='')` mit leerem String - Lösung: Hardcodierte URL verwendet: `/api/license/${licenseId}/toggle` 2. **Resources Route Fix**: - - Problem: `invalid literal for int() with base 10: ''` bei page Parameter - - Lösung: Try-except Block für sichere Konvertierung des page Parameters + - Problem 1: `invalid literal for int() with base 10: ''` bei page Parameter + - Lösung 1: Try-except Block für sichere Konvertierung des page Parameters + - Problem 2: `url_for('resources.quarantine', resource_id='')` mit leerem String im Template + - Lösung 2: Hardcodierte URL verwendet: `/resources/quarantine/${resourceId}` + - Zusätzlich: Debug-Logging hinzugefügt für bessere Fehlerdiagnose + +### Wichtige Erkenntnisse: +- Flask's `url_for()` kann nicht mit leeren Parametern für Integer-Routen umgehen +- Bei JavaScript-generierten URLs ist es oft besser, hardcodierte URLs zu verwenden +- Container muss nach Template-Änderungen neu gestartet werden ## Stand vom 17.06.2025 - 11:00 Uhr diff --git a/v2_adminpanel/routes/resource_routes.py b/v2_adminpanel/routes/resource_routes.py index 6aee031..732bc37 100644 --- a/v2_adminpanel/routes/resource_routes.py +++ b/v2_adminpanel/routes/resource_routes.py @@ -17,6 +17,9 @@ resource_bp = Blueprint('resources', __name__) @login_required def resources(): """Zeigt die Ressourcenpool-Übersicht""" + import logging + logging.info("=== RESOURCES ROUTE CALLED ===") + conn = get_connection() cur = conn.cursor() @@ -27,6 +30,8 @@ def resources(): search_query = request.args.get('search', '') show_test = request.args.get('show_test', 'false') == 'true' + logging.info(f"Filters: type={resource_type}, status={status_filter}, search={search_query}, show_test={show_test}") + # Basis-Query query = """ SELECT @@ -70,7 +75,10 @@ def resources(): cur.execute(query, params) resources_list = [] - for row in cur.fetchall(): + rows = cur.fetchall() + logging.info(f"Query returned {len(rows)} rows") + + for row in rows: resources_list.append({ 'id': row[0], 'resource_type': row[1], @@ -155,7 +163,9 @@ def resources(): datetime=datetime) # For template datetime usage except Exception as e: + import traceback logging.error(f"Fehler beim Laden der Ressourcen: {str(e)}") + logging.error(f"Traceback: {traceback.format_exc()}") flash('Fehler beim Laden der Ressourcen!', 'error') return redirect(url_for('admin.dashboard')) finally: diff --git a/v2_adminpanel/templates/resources.html b/v2_adminpanel/templates/resources.html index 96679da..03f5263 100644 --- a/v2_adminpanel/templates/resources.html +++ b/v2_adminpanel/templates/resources.html @@ -843,7 +843,7 @@ function showQuarantineModal(resourceId) { // URL mit aktuellen Filtern const currentUrl = new URL(window.location); const params = new URLSearchParams(currentUrl.search); - form.setAttribute('action', `{{ url_for('resources.quarantine', resource_id='') }}${resourceId}?${params.toString()}`); + form.setAttribute('action', `/resources/quarantine/${resourceId}?${params.toString()}`); modal.show(); }