final-cleanup: Produktionsfertige Konfiguration - Alle Ports auf 443 vereinheitlicht, TLS-Zertifikate vorgeneriert, Zentraler Installer erstellt
This commit is contained in:
@@ -1,276 +0,0 @@
|
||||
# Datenbank-Verbesserungen - MYP System
|
||||
|
||||
## Übersicht
|
||||
|
||||
Das MYP-System wurde mit umfassenden Datenbank-Verbesserungen ausgestattet, die Stabilität, Sicherheit und Performance erheblich steigern. Diese Dokumentation beschreibt alle implementierten Features.
|
||||
|
||||
## 🚀 Implementierte Features
|
||||
|
||||
### 1. Write-Ahead Logging (WAL)
|
||||
- **Aktiviert**: SQLite WAL-Modus für bessere Concurrency
|
||||
- **Vorteile**:
|
||||
- Gleichzeitige Lese- und Schreiboperationen
|
||||
- Bessere Performance bei hoher Last
|
||||
- Reduzierte Sperrzeiten
|
||||
- **Konfiguration**: Automatisch aktiviert in `models.py`
|
||||
|
||||
### 2. Connection Pooling
|
||||
- **Engine-Optimierung**: Konfigurierte SQLAlchemy-Engine mit Pooling
|
||||
- **Parameter**:
|
||||
- Pool-Größe: 20 Verbindungen
|
||||
- Max Overflow: 30 zusätzliche Verbindungen
|
||||
- Connection Timeout: 30 Sekunden
|
||||
- Pool Recycle: 3600 Sekunden
|
||||
|
||||
### 3. Intelligentes Caching-System
|
||||
- **Thread-sicherer Cache**: Implementiert mit `threading.local()`
|
||||
- **Cache-Strategien**:
|
||||
- User-Daten: 5-10 Minuten
|
||||
- Printer-Status: 1-2 Minuten
|
||||
- Job-Daten: 30 Sekunden - 5 Minuten
|
||||
- Statistiken: 10 Minuten
|
||||
- **Cache-Invalidierung**: Automatisch bei Datenänderungen
|
||||
|
||||
### 4. Automatisches Backup-System
|
||||
- **Tägliche Backups**: Automatisch um Mitternacht
|
||||
- **Komprimierung**: Gzip-Komprimierung für Speichereffizienz
|
||||
- **Rotation**: Automatische Bereinigung alter Backups (30 Tage)
|
||||
- **Manueller Trigger**: Admin-Interface für sofortige Backups
|
||||
|
||||
### 5. Datenbank-Monitoring
|
||||
- **Gesundheitsprüfung**: Integritätschecks und Performance-Monitoring
|
||||
- **Statistiken**: Detaillierte DB-Metriken
|
||||
- **Wartungsalerts**: Automatische Benachrichtigungen bei Problemen
|
||||
|
||||
### 6. Automatische Wartung
|
||||
- **Scheduler**: Hintergrund-Thread für Wartungsaufgaben
|
||||
- **Operationen**:
|
||||
- ANALYZE für Query-Optimierung
|
||||
- WAL-Checkpoints
|
||||
- Incremental Vacuum
|
||||
- PRAGMA optimize
|
||||
|
||||
## 📁 Dateistruktur
|
||||
|
||||
```
|
||||
backend/app/
|
||||
├── models.py # Erweiterte Modelle mit Caching
|
||||
├── utils/
|
||||
│ └── database_utils.py # Backup & Monitoring Utilities
|
||||
├── database/
|
||||
│ ├── myp_database.db # Hauptdatenbank
|
||||
│ ├── myp_database.db-wal # WAL-Datei
|
||||
│ ├── myp_database.db-shm # Shared Memory
|
||||
│ └── backups/ # Backup-Verzeichnis
|
||||
│ ├── myp_backup_20241201_120000.db.gz
|
||||
│ └── ...
|
||||
```
|
||||
|
||||
## 🔧 Konfiguration
|
||||
|
||||
### SQLite-Optimierungen
|
||||
```sql
|
||||
PRAGMA journal_mode = WAL;
|
||||
PRAGMA synchronous = NORMAL;
|
||||
PRAGMA cache_size = -64000; # 64MB Cache
|
||||
PRAGMA temp_store = MEMORY;
|
||||
PRAGMA mmap_size = 268435456; # 256MB Memory Map
|
||||
PRAGMA foreign_keys = ON;
|
||||
```
|
||||
|
||||
### Cache-Konfiguration
|
||||
```python
|
||||
# Cache-Zeiten (Sekunden)
|
||||
USER_CACHE_TIME = 300 # 5 Minuten
|
||||
PRINTER_CACHE_TIME = 120 # 2 Minuten
|
||||
JOB_CACHE_TIME = 180 # 3 Minuten
|
||||
STATS_CACHE_TIME = 600 # 10 Minuten
|
||||
```
|
||||
|
||||
## 🛠 API-Endpunkte
|
||||
|
||||
### Datenbank-Statistiken
|
||||
```http
|
||||
GET /api/admin/database/stats
|
||||
```
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"stats": {
|
||||
"database_size_mb": 15.2,
|
||||
"wal_size_mb": 2.1,
|
||||
"journal_mode": "wal",
|
||||
"cache_size": -64000,
|
||||
"table_counts": {
|
||||
"users": 25,
|
||||
"printers": 8,
|
||||
"jobs": 1247
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Gesundheitsprüfung
|
||||
```http
|
||||
GET /api/admin/database/health
|
||||
```
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"health": {
|
||||
"status": "healthy",
|
||||
"issues": [],
|
||||
"recommendations": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Backup erstellen
|
||||
```http
|
||||
POST /api/admin/database/backup
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"compress": true
|
||||
}
|
||||
```
|
||||
|
||||
### Backup-Liste abrufen
|
||||
```http
|
||||
GET /api/admin/database/backups
|
||||
```
|
||||
|
||||
### Backup wiederherstellen
|
||||
```http
|
||||
POST /api/admin/database/backup/restore
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"backup_path": "/path/to/backup.db.gz"
|
||||
}
|
||||
```
|
||||
|
||||
### Datenbank optimieren
|
||||
```http
|
||||
POST /api/admin/database/optimize
|
||||
```
|
||||
|
||||
### Alte Backups bereinigen
|
||||
```http
|
||||
POST /api/admin/database/backup/cleanup
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"keep_days": 30
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 Performance-Verbesserungen
|
||||
|
||||
### Vor den Verbesserungen
|
||||
- Einzelne DB-Verbindung
|
||||
- Keine Caching-Mechanismen
|
||||
- Manuelle Backups erforderlich
|
||||
- Keine Performance-Überwachung
|
||||
|
||||
### Nach den Verbesserungen
|
||||
- **50-80% schnellere Abfragen** durch Caching
|
||||
- **Verbesserte Concurrency** durch WAL-Modus
|
||||
- **Automatische Wartung** reduziert manuelle Eingriffe
|
||||
- **Proaktive Überwachung** verhindert Ausfälle
|
||||
|
||||
## 🔒 Sicherheitsfeatures
|
||||
|
||||
### Backup-Sicherheit
|
||||
- Komprimierte Backups reduzieren Speicherbedarf
|
||||
- Automatische Rotation verhindert Speicherüberläufe
|
||||
- Sicherheitsbackup vor Wiederherstellung
|
||||
|
||||
### Zugriffskontrolle
|
||||
- Alle Admin-Endpunkte erfordern Admin-Berechtigung
|
||||
- Pfad-Validierung bei Backup-Operationen
|
||||
- Fehlerbehandlung mit detailliertem Logging
|
||||
|
||||
### Datenintegrität
|
||||
- Regelmäßige Integritätsprüfungen
|
||||
- WAL-Modus verhindert Datenverlust
|
||||
- Foreign Key Constraints aktiviert
|
||||
|
||||
## 🚨 Monitoring & Alerts
|
||||
|
||||
### Automatische Überwachung
|
||||
- **WAL-Dateigröße**: Alert bei >100MB
|
||||
- **Freier Speicherplatz**: Warnung bei <1GB
|
||||
- **Integritätsprüfung**: Tägliche Checks
|
||||
- **Performance-Metriken**: Kontinuierliche Sammlung
|
||||
|
||||
### Log-Kategorien
|
||||
```
|
||||
[DATABASE] - Allgemeine Datenbank-Operationen
|
||||
[BACKUP] - Backup-Operationen
|
||||
[CACHE] - Cache-Operationen
|
||||
[MAINTENANCE] - Wartungsaufgaben
|
||||
[HEALTH] - Gesundheitsprüfungen
|
||||
```
|
||||
|
||||
## 🔄 Wartungsplan
|
||||
|
||||
### Automatisch (Hintergrund)
|
||||
- **Täglich**: Backup, Optimierung, Gesundheitsprüfung
|
||||
- **Wöchentlich**: Bereinigung alter Backups
|
||||
- **Stündlich**: Cache-Bereinigung, WAL-Checkpoints
|
||||
|
||||
### Manuell (Admin-Interface)
|
||||
- Sofortige Backups vor kritischen Änderungen
|
||||
- Manuelle Optimierung bei Performance-Problemen
|
||||
- Backup-Wiederherstellung bei Datenverlust
|
||||
|
||||
## 📈 Metriken & KPIs
|
||||
|
||||
### Performance-Indikatoren
|
||||
- Durchschnittliche Query-Zeit
|
||||
- Cache-Hit-Rate
|
||||
- WAL-Checkpoint-Häufigkeit
|
||||
- Backup-Erfolgsrate
|
||||
|
||||
### Kapazitätsplanung
|
||||
- Datenbankwachstum pro Monat
|
||||
- Backup-Speicherverbrauch
|
||||
- Cache-Effizienz
|
||||
|
||||
## 🛡 Disaster Recovery
|
||||
|
||||
### Backup-Strategie
|
||||
1. **Tägliche automatische Backups**
|
||||
2. **30-Tage Aufbewahrung**
|
||||
3. **Komprimierte Speicherung**
|
||||
4. **Schnelle Wiederherstellung**
|
||||
|
||||
### Recovery-Prozess
|
||||
1. System stoppen
|
||||
2. Backup auswählen
|
||||
3. Wiederherstellung durchführen
|
||||
4. Integritätsprüfung
|
||||
5. System neu starten
|
||||
|
||||
## 🎯 Nächste Schritte
|
||||
|
||||
### Geplante Erweiterungen
|
||||
- [ ] Replikation für High Availability
|
||||
- [ ] Erweiterte Metriken-Dashboard
|
||||
- [ ] Automatische Performance-Tuning
|
||||
- [ ] Cloud-Backup-Integration
|
||||
|
||||
### Optimierungsmöglichkeiten
|
||||
- [ ] Adaptive Cache-Größen
|
||||
- [ ] Intelligente Backup-Zeitpunkte
|
||||
- [ ] Predictive Maintenance
|
||||
- [ ] Real-time Monitoring Dashboard
|
||||
|
||||
---
|
||||
|
||||
**Status**: ✅ Vollständig implementiert und getestet
|
||||
**Version**: 2.0
|
||||
**Letzte Aktualisierung**: Dezember 2024
|
@@ -1,127 +0,0 @@
|
||||
# MYP Platform - 3D-Drucker Reservierungssystem
|
||||
|
||||
Ein Reservierungssystem für 3D-Drucker, das automatisch TP-Link Tapo P110 Smart Plugs steuert, um die Stromversorgung von Druckern basierend auf den reservierten Zeitslots zu verwalten.
|
||||
|
||||
## Features
|
||||
|
||||
- Reservierung von 3D-Druckern für bestimmte Zeiträume
|
||||
- Automatische Steuerung der TP-Link Tapo P110 Smart Plugs
|
||||
- Echtzeit-Überwachung von laufenden Druckaufträgen
|
||||
- Administrationsbereich für Druckerverwaltung
|
||||
- Benutzerauthentifizierung und Autorisierung
|
||||
- Statistiken zu Druckaufträgen und Materialverbrauch
|
||||
- Dark Mode für eine angenehme Nutzung bei schlechten Lichtverhältnissen
|
||||
- Responsive Design für verschiedene Gerätegrößen
|
||||
|
||||
## Technologie-Stack
|
||||
|
||||
- **Backend**: Python 3.11 mit Flask
|
||||
- **Frontend**: HTML/CSS/JavaScript mit Tailwind CSS
|
||||
- **Datenbank**: SQLite mit SQLAlchemy ORM
|
||||
- **Authentifizierung**: Flask-Login
|
||||
- **Hardware-Integration**: PyP100 für Tapo Smart Plug Steuerung
|
||||
- **Automatisierung**: Integrierter Job-Scheduler für Drucker-Steuerung
|
||||
|
||||
## Systemanforderungen
|
||||
|
||||
- Python 3.11+
|
||||
- Node.js und npm (für Tailwind CSS)
|
||||
- Netzwerkzugang zu TP-Link Tapo P110 Smart Plugs
|
||||
- Unterstützte Betriebssysteme: Linux, Windows, macOS
|
||||
|
||||
## Installation
|
||||
|
||||
1. **Repository klonen**:
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd myp-platform
|
||||
```
|
||||
|
||||
2. **Python-Abhängigkeiten installieren**:
|
||||
```bash
|
||||
cd backend/app
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
3. **Node-Abhängigkeiten installieren und CSS bauen**:
|
||||
```bash
|
||||
npm install
|
||||
npm run build:css
|
||||
```
|
||||
|
||||
4. **Datenbank initialisieren**:
|
||||
```bash
|
||||
python init_db.py
|
||||
```
|
||||
|
||||
5. **Server starten**:
|
||||
```bash
|
||||
# Standardstart
|
||||
python app.py
|
||||
|
||||
# Oder mit spezifischem Port (empfohlen)
|
||||
python app.py --port=5000
|
||||
```
|
||||
|
||||
## API Endpunkte
|
||||
|
||||
| Methode | Endpunkt | Beschreibung |
|
||||
|---------|------------------------|--------------------------------------------------------|
|
||||
| GET | /api/jobs | Gibt alle Jobs (für Admins) oder eigene Jobs zurück |
|
||||
| GET | /api/jobs/active | Gibt alle aktiven Druckaufträge zurück |
|
||||
| GET | /api/jobs/{id} | Gibt Details zu einem bestimmten Job zurück |
|
||||
| POST | /api/jobs | Erstellt eine neue Druckerreservierung |
|
||||
| GET | /api/printers | Gibt alle verfügbaren Drucker zurück |
|
||||
|
||||
## Scheduler
|
||||
|
||||
Das System enthält einen eingebauten Scheduler, der automatisch:
|
||||
- Drucker einschaltet, wenn ein Auftrag beginnt
|
||||
- Drucker ausschaltet, wenn ein Auftrag endet
|
||||
- Den Status von Druckern aktualisiert
|
||||
- Die Auftragsstatistiken sammelt
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Die Konfiguration erfolgt über die Datei `config/settings.py`. Wichtige Einstellungen umfassen:
|
||||
- Datenbankpfad
|
||||
- Tapo-Zugangsdaten
|
||||
- Drucker-Konfigurationen
|
||||
- Logging-Einstellungen
|
||||
- Webserver-Einstellungen
|
||||
|
||||
## CSS-System
|
||||
|
||||
Die Anwendung nutzt Tailwind CSS für das Styling mit separaten Dateien für Light- und Dark-Mode.
|
||||
|
||||
### Tailwind Build
|
||||
|
||||
```bash
|
||||
# CSS bauen
|
||||
npm run build:css
|
||||
|
||||
# CSS im Watch-Modus (für Entwicklung)
|
||||
npm run watch:css
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Nur angemeldete Benutzer können Druckaufträge erstellen
|
||||
- Nur Besitzer eines Druckauftrags können diesen verwalten
|
||||
- Nur Administratoren haben Zugriff auf alle Jobs und Systemeinstellungen
|
||||
- Passwörter werden mit bcrypt gesichert
|
||||
|
||||
## Fehlerbehandlung und Logging
|
||||
|
||||
Das System führt detaillierte Logs in folgenden Kategorien:
|
||||
- App-Log (allgemeine Anwendungslogs)
|
||||
- Auth-Log (Authentifizierungsereignisse)
|
||||
- Jobs-Log (Druckauftragsoperationen)
|
||||
- Printer-Log (Druckerstatusänderungen)
|
||||
- Scheduler-Log (Automatisierungsaktionen)
|
||||
- Error-Log (Fehlerprotokollierung)
|
||||
|
||||
## Entwicklung
|
||||
|
||||
Diese Anwendung ist für den Offline-Betrieb konzipiert und verwendet keine externen CDNs.
|
||||
Weitere Informationen zur Entwicklungsumgebung finden Sie in der `TAILWIND_SETUP.md`.
|
@@ -18,35 +18,21 @@ class AdminLiveDashboard {
|
||||
}
|
||||
|
||||
detectApiBaseUrl() {
|
||||
// Versuche verschiedene Ports zu erkennen
|
||||
const currentHost = window.location.hostname;
|
||||
const currentPort = window.location.port;
|
||||
const currentProtocol = window.location.protocol;
|
||||
const currentPort = window.location.port;
|
||||
|
||||
console.log('🔍 Aktuelle URL-Informationen:', {
|
||||
host: currentHost,
|
||||
port: currentPort,
|
||||
protocol: currentProtocol,
|
||||
fullUrl: window.location.href
|
||||
});
|
||||
console.log('🔍 Live Dashboard API URL Detection:', { currentHost, currentProtocol, currentPort });
|
||||
|
||||
// Wenn wir bereits auf dem richtigen Port sind, verwende relative URLs
|
||||
if (currentPort === '5000' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (gleicher Port oder Standard)');
|
||||
if (currentPort === '443' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (HTTPS Port 443)');
|
||||
return '';
|
||||
}
|
||||
|
||||
// Wenn wir auf 8443 sind, versuche 5000 (häufiger Fall)
|
||||
if (currentPort === '8443') {
|
||||
const fallbackUrl = `http://${currentHost}:5000`;
|
||||
console.log('🔄 Fallback von HTTPS:8443 zu HTTP:5000:', fallbackUrl);
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
||||
// Für andere Ports, verwende Standard-Backend-Port
|
||||
const defaultPort = currentProtocol === 'https:' ? '8443' : '5000';
|
||||
const fallbackUrl = `${currentProtocol}//${currentHost}:${defaultPort}`;
|
||||
console.log('🔄 Standard-Fallback:', fallbackUrl);
|
||||
// Für alle anderen Fälle, verwende HTTPS auf Port 443
|
||||
const fallbackUrl = `https://${currentHost}`;
|
||||
console.log('🔄 Fallback zu HTTPS:443:', fallbackUrl);
|
||||
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
@@ -12,34 +12,20 @@ let csrfToken;
|
||||
// Dynamische API-Base-URL-Erkennung
|
||||
function detectApiBaseUrl() {
|
||||
const currentHost = window.location.hostname;
|
||||
const currentPort = window.location.port;
|
||||
const currentProtocol = window.location.protocol;
|
||||
const currentPort = window.location.port;
|
||||
|
||||
console.log('🔍 Admin API URL-Informationen:', {
|
||||
host: currentHost,
|
||||
port: currentPort,
|
||||
protocol: currentProtocol,
|
||||
fullUrl: window.location.href
|
||||
});
|
||||
console.log('🔍 Admin API URL Detection:', { currentHost, currentProtocol, currentPort });
|
||||
|
||||
// Wenn wir bereits auf dem richtigen Port sind, verwende relative URLs
|
||||
if (currentPort === '5000' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (gleicher Port oder Standard)');
|
||||
if (currentPort === '443' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (HTTPS Port 443)');
|
||||
return '';
|
||||
}
|
||||
|
||||
// Wenn wir auf 8443 sind, versuche 5000 (häufiger Fall)
|
||||
if (currentPort === '8443') {
|
||||
const fallbackUrl = `http://${currentHost}:5000`;
|
||||
console.log('🔄 Admin Fallback von HTTPS:8443 zu HTTP:5000:', fallbackUrl);
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
||||
// Für andere Ports, verwende Standard-Backend-Port
|
||||
const defaultPort = currentProtocol === 'https:' ? '8443' : '5000';
|
||||
const fallbackUrl = `${currentProtocol}//${currentHost}:${defaultPort}`;
|
||||
console.log('🔄 Admin Standard-Fallback:', fallbackUrl);
|
||||
|
||||
// Für alle anderen Fälle, verwende HTTPS auf Port 443
|
||||
const fallbackUrl = `https://${currentHost}`;
|
||||
console.log('🔄 Admin Fallback zu HTTPS:443:', fallbackUrl);
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user