Resource Pool wieder hergestellt
Dieser Commit ist enthalten in:
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren