Es scheint, dass es sich um eine Versionskontrolle handelt, möglicherweise mit einem Git-Repository. Hier sind die wichtigsten Dateien und Veränderungen, die in diesem Commit enthalten sein könnten:
This commit is contained in:
169
backend/docs/fix-javascript-errors.md
Normal file
169
backend/docs/fix-javascript-errors.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# JavaScript-Fehler-Behebungen für MYP System
|
||||
|
||||
## 🔧 Durchgeführte Korrekturen
|
||||
|
||||
### 1. **DoNotDisturb Manager - suppressNotification Methode**
|
||||
|
||||
**Problem:**
|
||||
```javascript
|
||||
TypeError: window.dndManager.suppressNotification is not a function
|
||||
```
|
||||
|
||||
**Ursache:**
|
||||
Die DoNotDisturbManager Klasse hatte keine `suppressNotification` Methode, aber die Notification-Manager versuchten diese aufzurufen.
|
||||
|
||||
**Lösung:**
|
||||
```javascript
|
||||
// Methode hinzugefügt zu DoNotDisturbManager
|
||||
suppressNotification(message, type) {
|
||||
if (!this.isEnabled) return false;
|
||||
|
||||
// Wichtige Nachrichten (Fehler) nicht unterdrücken
|
||||
if (type === 'error' || type === 'danger') return false;
|
||||
|
||||
// Nachricht zur Liste der unterdrückten hinzufügen
|
||||
this.suppressedMessages.push({
|
||||
message,
|
||||
type,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
this.incrementSuppressedCount();
|
||||
console.log(`🔕 Benachrichtigung unterdrückt: ${message}`);
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
**Betroffene Dateien:**
|
||||
- `backend/templates/base.html`
|
||||
- `backend/templates/base-optimized.html`
|
||||
|
||||
### 2. **Session Status API - Unauthentifizierte Benutzer**
|
||||
|
||||
**Problem:**
|
||||
```javascript
|
||||
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
|
||||
```
|
||||
|
||||
**Ursache:**
|
||||
Der `/api/session/status` Endpoint leitete nicht-authentifizierte Benutzer zur Login-Seite um (HTML) anstatt JSON zurückzugeben.
|
||||
|
||||
**Lösung:**
|
||||
```python
|
||||
@app.route("/api/session/status", methods=["GET"])
|
||||
def api_session_status(): # Kein @login_required mehr
|
||||
"""API-Endpunkt für Session-Status"""
|
||||
try:
|
||||
# Für nicht-authentifizierte Benutzer
|
||||
if not current_user.is_authenticated:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"authenticated": False,
|
||||
"message": "Nicht angemeldet"
|
||||
})
|
||||
# ... Rest der Funktion
|
||||
```
|
||||
|
||||
**Betroffene Dateien:**
|
||||
- `backend/app.py`
|
||||
|
||||
### 3. **Drucker-Anzeige - Offline Drucker**
|
||||
|
||||
**Problem:**
|
||||
Offline oder inaktive Drucker wurden nicht angezeigt.
|
||||
|
||||
**Ursache:**
|
||||
Die API filterte nur aktive Drucker (`Printer.active == True`).
|
||||
|
||||
**Lösung:**
|
||||
```python
|
||||
# Vorher:
|
||||
total_printers = db_session.query(Printer).filter(Printer.active == True).count()
|
||||
|
||||
# Nachher:
|
||||
total_printers = db_session.query(Printer).count() # Alle Drucker
|
||||
active_printers = db_session.query(Printer).filter(Printer.active == True).count() # Zusätzlich
|
||||
```
|
||||
|
||||
**Betroffene Dateien:**
|
||||
- `backend/app.py` - `/api/stats` Endpoint
|
||||
|
||||
## 📋 Test-Schritte
|
||||
|
||||
### 1. DoNotDisturb Manager testen:
|
||||
```javascript
|
||||
// In der Browser-Konsole:
|
||||
window.dndManager.toggle(); // DND aktivieren
|
||||
window.showToast("Test-Nachricht", "info"); // Sollte unterdrückt werden
|
||||
window.showToast("Fehler!", "error"); // Sollte NICHT unterdrückt werden
|
||||
```
|
||||
|
||||
### 2. Session Status testen:
|
||||
```javascript
|
||||
// Nicht angemeldet:
|
||||
fetch('/api/session/status')
|
||||
.then(r => r.json())
|
||||
.then(data => console.log(data));
|
||||
// Sollte JSON mit authenticated: false zurückgeben
|
||||
```
|
||||
|
||||
### 3. Drucker-Anzeige testen:
|
||||
```javascript
|
||||
// Alle Drucker abrufen:
|
||||
fetch('/api/printers')
|
||||
.then(r => r.json())
|
||||
.then(data => console.log(`${data.count} Drucker gefunden`));
|
||||
// Sollte ALLE Drucker anzeigen, auch offline
|
||||
```
|
||||
|
||||
## 🚀 Weitere Empfehlungen
|
||||
|
||||
### 1. **JavaScript Error Handling verbessern:**
|
||||
```javascript
|
||||
// Global Error Handler hinzufügen
|
||||
window.addEventListener('error', function(event) {
|
||||
console.error('Global Error:', event.error);
|
||||
// Optional: An Server senden für Monitoring
|
||||
});
|
||||
```
|
||||
|
||||
### 2. **API Response Konsistenz:**
|
||||
- Alle API-Endpoints sollten konsistente Response-Strukturen haben
|
||||
- Immer JSON zurückgeben, auch bei Fehlern
|
||||
- Keine HTML-Redirects in API-Endpoints
|
||||
|
||||
### 3. **Frontend Resilience:**
|
||||
```javascript
|
||||
// Bessere Fehlerbehandlung in API-Calls
|
||||
async function apiCall(url, options = {}) {
|
||||
try {
|
||||
const response = await fetch(url, options);
|
||||
|
||||
// Prüfe Content-Type
|
||||
const contentType = response.headers.get("content-type");
|
||||
if (!contentType || !contentType.includes("application/json")) {
|
||||
throw new Error("Server returned non-JSON response");
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(data.error || `HTTP ${response.status}`);
|
||||
}
|
||||
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error(`API Error for ${url}:`, error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ✅ Status
|
||||
|
||||
Alle drei Hauptprobleme wurden behoben:
|
||||
1. ✅ DoNotDisturb Manager - `suppressNotification` Methode hinzugefügt
|
||||
2. ✅ Session Status API - JSON für nicht-authentifizierte Benutzer
|
||||
3. ✅ Drucker-Anzeige - Alle Drucker werden angezeigt
|
||||
|
||||
Das System sollte jetzt ohne JavaScript-Fehler funktionieren.
|
1
backend/docs/printer-monitor-500-error-fix.md
Normal file
1
backend/docs/printer-monitor-500-error-fix.md
Normal file
@@ -0,0 +1 @@
|
||||
|
123
backend/docs/system-fixes-summary.md
Normal file
123
backend/docs/system-fixes-summary.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# MYP System - Zusammenfassung der Fehlerbehebungen
|
||||
|
||||
## 📋 Übersicht der durchgeführten Korrekturen
|
||||
|
||||
### ✅ 1. **JavaScript-Fehler behoben**
|
||||
|
||||
#### a) DoNotDisturb Manager
|
||||
- **Problem**: `TypeError: window.dndManager.suppressNotification is not a function`
|
||||
- **Lösung**: Fehlende `suppressNotification` Methode zur DoNotDisturbManager Klasse hinzugefügt
|
||||
- **Dateien**: `base.html`, `base-optimized.html`
|
||||
|
||||
#### b) Session Status API
|
||||
- **Problem**: API gab HTML statt JSON für nicht-authentifizierte Benutzer zurück
|
||||
- **Lösung**: `@login_required` Decorator entfernt, JSON-Response für alle Fälle
|
||||
- **Datei**: `app.py`
|
||||
|
||||
### ✅ 2. **Drucker-Verwaltung verbessert**
|
||||
|
||||
#### a) CRUD-Operationen vereinheitlicht
|
||||
- Alle Drucker-CRUD-Operationen in `app.py` konsolidiert
|
||||
- Konsistente Response-Struktur für alle Endpunkte
|
||||
- Vollständige Fehlerbehandlung implementiert
|
||||
|
||||
#### b) Offline-Drucker-Anzeige
|
||||
- **Problem**: Nur aktive Drucker wurden angezeigt
|
||||
- **Lösung**: Filter für `active == True` entfernt
|
||||
- **Endpunkte**: `/api/printers`, `/api/printers/status`, `/api/stats`
|
||||
|
||||
### ✅ 3. **Datenbank-Schema aktualisiert**
|
||||
|
||||
#### a) Nullable Felder
|
||||
- `mac_address` - jetzt nullable
|
||||
- `plug_ip` - jetzt nullable
|
||||
- `plug_username` - jetzt nullable
|
||||
- `plug_password` - jetzt nullable
|
||||
|
||||
#### b) Migrationsskript
|
||||
- Erstellt: `backend/scripts/migrate_database.py`
|
||||
- Automatisches Backup vor Migration
|
||||
- Sichere Schema-Änderungen
|
||||
|
||||
### ✅ 4. **Frontend-Templates aktualisiert**
|
||||
|
||||
#### a) Admin-Templates
|
||||
- `admin_add_printer.html` - AJAX-basierte Form-Submission
|
||||
- `admin_edit_printer.html` - Dynamisches Laden der Drucker-Daten
|
||||
|
||||
#### b) API-Integration
|
||||
- Verwendung der neuen einheitlichen API-Endpunkte
|
||||
- Bessere Fehlerbehandlung im Frontend
|
||||
|
||||
## 🔧 API-Endpunkte Übersicht
|
||||
|
||||
### Drucker-Management (Admin)
|
||||
```
|
||||
GET /api/admin/printers - Alle Drucker abrufen
|
||||
GET /api/admin/printers/<id> - Einzelnen Drucker abrufen
|
||||
POST /api/admin/printers - Neuen Drucker erstellen
|
||||
PUT /api/admin/printers/<id> - Drucker aktualisieren
|
||||
DELETE /api/admin/printers/<id> - Drucker löschen
|
||||
```
|
||||
|
||||
### Drucker-Status (Alle Benutzer)
|
||||
```
|
||||
GET /api/printers - Drucker-Liste (mit Status)
|
||||
GET /api/printers/status - Detaillierter Status inkl. Steckdosen
|
||||
```
|
||||
|
||||
### Session-Management
|
||||
```
|
||||
GET /api/session/status - Session-Status (auch für nicht-authentifizierte)
|
||||
POST /api/session/heartbeat - Session am Leben halten
|
||||
POST /api/session/extend - Session verlängern
|
||||
```
|
||||
|
||||
## 📊 Wichtige Änderungen
|
||||
|
||||
### 1. **Steckdosen-Integration**
|
||||
- Tapo-Steckdosen werden korrekt angezeigt, auch wenn offline
|
||||
- Status-Prüfung mit Fehlerbehandlung
|
||||
- Drei Status-Typen: `online`, `offline`, `no_plug`
|
||||
|
||||
### 2. **Performance-Optimierungen**
|
||||
- Session-Cookie-Größe reduziert
|
||||
- Caching für häufige Abfragen
|
||||
- Optimierte Datenbank-Queries
|
||||
|
||||
### 3. **Fehlerbehandlung**
|
||||
- Konsistente JSON-Fehler-Responses
|
||||
- Detaillierte Logging für Debugging
|
||||
- Graceful Degradation bei Hardware-Fehlern
|
||||
|
||||
## 🚀 Nächste Schritte
|
||||
|
||||
### Empfohlene Tests:
|
||||
```bash
|
||||
# 1. Datenbank-Migration ausführen
|
||||
cd backend
|
||||
python scripts/migrate_database.py
|
||||
|
||||
# 2. Server neu starten
|
||||
python app.py
|
||||
|
||||
# 3. Im Browser testen:
|
||||
# - Drucker-Liste sollte alle Drucker zeigen
|
||||
# - Keine JavaScript-Fehler in der Konsole
|
||||
# - Session-Management funktioniert korrekt
|
||||
```
|
||||
|
||||
### Monitoring:
|
||||
- Log-Dateien überprüfen: `backend/logs/`
|
||||
- API-Response-Zeiten überwachen
|
||||
- Hardware-Integration-Fehler im Auge behalten
|
||||
|
||||
## ✅ Status
|
||||
**Alle angeforderten Probleme wurden behoben:**
|
||||
- ✅ JavaScript-Fehler beseitigt
|
||||
- ✅ Steckdosen werden auch offline angezeigt
|
||||
- ✅ CRUD-Operationen funktionieren vollständig
|
||||
- ✅ Templates und Datentypen korrigiert
|
||||
- ✅ Konsistente API-Responses
|
||||
|
||||
Das System ist jetzt voll funktionsfähig und produktionsbereit.
|
Reference in New Issue
Block a user