diff --git a/backend/__pycache__/app.cpython-313.pyc b/backend/__pycache__/app.cpython-313.pyc index 37b91884..99402d19 100644 Binary files a/backend/__pycache__/app.cpython-313.pyc and b/backend/__pycache__/app.cpython-313.pyc differ diff --git a/backend/database/myp.db b/backend/database/myp.db index 42910b9e..c5a88e42 100644 Binary files a/backend/database/myp.db and b/backend/database/myp.db differ diff --git a/backend/database/myp.db-wal b/backend/database/myp.db-wal index fa05589e..5f557426 100644 Binary files a/backend/database/myp.db-wal and b/backend/database/myp.db-wal differ diff --git a/backend/scripts/run_screenshot_tool.ps1 b/backend/scripts/run_screenshot_tool.ps1 index ea9af571..36cf07a1 100644 --- a/backend/scripts/run_screenshot_tool.ps1 +++ b/backend/scripts/run_screenshot_tool.ps1 @@ -1,4 +1,4 @@ -# PowerShell-Skript für automatische Screenshots +# PowerShell-Skript fuer automatische Screenshots # ============================================= param( @@ -10,72 +10,72 @@ param( ) Write-Host "===============================================" -ForegroundColor Cyan -Write-Host "🎯 AUTOMATISCHES SCREENSHOT-TOOL FÜR SCHULUNGEN" -ForegroundColor Yellow +Write-Host "AUTOMATISCHES SCREENSHOT-TOOL FUER SCHULUNGEN" -ForegroundColor Yellow Write-Host "===============================================" -ForegroundColor Cyan Write-Host "" -# Arbeitsverzeichnis zum Skript-Ordner ändern +# Arbeitsverzeichnis zum Skript-Ordner aendern $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path Set-Location $ScriptDir -# Prüfe ob Python verfügbar ist +# Pruefe ob Python verfuegbar ist try { $pythonVersion = python --version 2>&1 - Write-Host "✅ Python gefunden: $pythonVersion" -ForegroundColor Green + Write-Host "Python gefunden: $pythonVersion" -ForegroundColor Green } catch { - Write-Host "❌ Python nicht gefunden!" -ForegroundColor Red - Write-Host "💡 Installieren Sie Python von https://python.org" -ForegroundColor Yellow + Write-Host "Python nicht gefunden!" -ForegroundColor Red + Write-Host "Installieren Sie Python von https://python.org" -ForegroundColor Yellow exit 1 } -# Prüfe ob Selenium installiert ist -$seleniumCheck = python -c "import selenium; print('✅ Selenium verfügbar')" 2>&1 +# Pruefe ob Selenium installiert ist +$seleniumCheck = python -c "import selenium; print('Selenium verfuegbar')" 2>&1 if ($LASTEXITCODE -ne 0) { - Write-Host "⚠️ Selenium nicht installiert. Installiere jetzt..." -ForegroundColor Yellow + Write-Host "Selenium nicht installiert. Installiere jetzt..." -ForegroundColor Yellow pip install selenium webdriver-manager if ($LASTEXITCODE -ne 0) { - Write-Host "❌ Selenium-Installation fehlgeschlagen!" -ForegroundColor Red + Write-Host "Selenium-Installation fehlgeschlagen!" -ForegroundColor Red exit 1 } - Write-Host "✅ Selenium erfolgreich installiert" -ForegroundColor Green + Write-Host "Selenium erfolgreich installiert" -ForegroundColor Green } else { Write-Host $seleniumCheck -ForegroundColor Green } -# Prüfe ChromeDriver -$chromeCheck = python -c "from selenium import webdriver; from selenium.webdriver.chrome.service import Service; print('✅ Chrome WebDriver verfügbar')" 2>&1 +# Pruefe ChromeDriver +$chromeCheck = python -c "exec('from selenium import webdriver'); exec('from selenium.webdriver.chrome.service import Service'); print('Chrome WebDriver verfuegbar')" 2>&1 if ($LASTEXITCODE -ne 0) { - Write-Host "⚠️ ChromeDriver nicht gefunden. Installiere webdriver-manager..." -ForegroundColor Yellow + Write-Host "ChromeDriver nicht gefunden. Installiere webdriver-manager..." -ForegroundColor Yellow pip install webdriver-manager if ($LASTEXITCODE -ne 0) { - Write-Host "❌ WebDriver-Manager-Installation fehlgeschlagen!" -ForegroundColor Red - Write-Host "💡 Manuell ChromeDriver von https://chromedriver.chromium.org/ herunterladen" -ForegroundColor Yellow + Write-Host "WebDriver-Manager-Installation fehlgeschlagen!" -ForegroundColor Red + Write-Host "Manuell ChromeDriver von https://chromedriver.chromium.org/ herunterladen" -ForegroundColor Yellow } else { - Write-Host "✅ WebDriver-Manager installiert" -ForegroundColor Green + Write-Host "WebDriver-Manager installiert" -ForegroundColor Green } } -# Flask-App verfügbarkeit prüfen +# Flask-App verfuegbarkeit pruefen Write-Host "" -Write-Host "Prüfe Flask-App..." -ForegroundColor Blue -$flaskCheck = python -c "import sys; sys.path.append('..'); exec('from app import app'); print('Flask-App verfügbar')" 2>&1 +Write-Host "Pruefe Flask-App..." -ForegroundColor Blue +$flaskCheck = python -c "import sys; sys.path.append('..'); exec('from app import app'); print('Flask-App verfuegbar')" 2>&1 if ($LASTEXITCODE -ne 0) { - Write-Host "Flask-App nicht direkt verfügbar" -ForegroundColor Yellow + Write-Host "Flask-App nicht direkt verfuegbar" -ForegroundColor Yellow Write-Host "Das Tool wird mit Standard-Routen arbeiten" -ForegroundColor Blue } else { Write-Host $flaskCheck -ForegroundColor Green } Write-Host "" -Write-Host "🚀 STARTE SCREENSHOT-TOOL" -ForegroundColor Green -Write-Host "=" * 30 -ForegroundColor Green +Write-Host "STARTE SCREENSHOT-TOOL" -ForegroundColor Green +Write-Host "==============================" -ForegroundColor Green -# Parameter für das Python-Skript vorbereiten +# Parameter fuer das Python-Skript vorbereiten $pythonArgs = @("screenshot_tool.py") if ($QuickRun) { - Write-Host "⚡ Quick-Run-Modus aktiviert" -ForegroundColor Yellow - # Setze Umgebungsvariablen für automatische Konfiguration + Write-Host "Quick-Run-Modus aktiviert" -ForegroundColor Yellow + # Setze Umgebungsvariablen fuer automatische Konfiguration $env:SCREENSHOT_AUTO_MODE = "true" $env:SCREENSHOT_HEADLESS = "true" @@ -88,13 +88,13 @@ if ($QuickRun) { } } -# Tool ausführen +# Tool ausfuehren try { if ($Interactive) { - Write-Host "🎛️ Interaktiver Modus - Folgen Sie den Anweisungen" -ForegroundColor Blue + Write-Host "Interaktiver Modus - Folgen Sie den Anweisungen" -ForegroundColor Blue python @pythonArgs } else { - Write-Host "🤖 Automatischer Modus" -ForegroundColor Blue + Write-Host "Automatischer Modus" -ForegroundColor Blue python @pythonArgs } @@ -102,17 +102,17 @@ try { if ($exitCode -eq 0) { Write-Host "" - Write-Host "🎉 SCREENSHOT-ERSTELLUNG ERFOLGREICH ABGESCHLOSSEN!" -ForegroundColor Green + Write-Host "SCREENSHOT-ERSTELLUNG ERFOLGREICH ABGESCHLOSSEN!" -ForegroundColor Green Write-Host "" # Zeige Ausgabe-Ordner an $outputPath = "docs\schulung\screenshots" if (Test-Path $outputPath) { - Write-Host "📁 Screenshots verfügbar in:" -ForegroundColor Blue + Write-Host "Screenshots verfuegbar in:" -ForegroundColor Blue Write-Host " $(Resolve-Path $outputPath)" -ForegroundColor White - # Frage ob Ordner geöffnet werden soll - $openFolder = Read-Host "📂 Möchten Sie den Screenshot-Ordner öffnen? (j/n)" + # Frage ob Ordner geoeffnet werden soll + $openFolder = Read-Host "Moechten Sie den Screenshot-Ordner oeffnen? (j/n)" if ($openFolder -eq "j" -or $openFolder -eq "ja" -or $openFolder -eq "y" -or $openFolder -eq "yes") { Start-Process "explorer.exe" -ArgumentList (Resolve-Path $outputPath) } @@ -122,10 +122,10 @@ try { $reportPath = "$outputPath\screenshot_bericht.md" if (Test-Path $reportPath) { Write-Host "" - Write-Host "📊 Detaillierter Bericht verfügbar:" -ForegroundColor Blue + Write-Host "Detaillierter Bericht verfuegbar:" -ForegroundColor Blue Write-Host " $(Resolve-Path $reportPath)" -ForegroundColor White - $openReport = Read-Host "📖 Möchten Sie den Bericht öffnen? (j/n)" + $openReport = Read-Host "Moechten Sie den Bericht oeffnen? (j/n)" if ($openReport -eq "j" -or $openReport -eq "ja" -or $openReport -eq "y" -or $openReport -eq "yes") { Start-Process "notepad.exe" -ArgumentList (Resolve-Path $reportPath) } @@ -133,37 +133,37 @@ try { } else { Write-Host "" - Write-Host "❌ FEHLER BEI DER SCREENSHOT-ERSTELLUNG" -ForegroundColor Red - Write-Host "📋 Überprüfen Sie die Logs für Details" -ForegroundColor Yellow + Write-Host "FEHLER BEI DER SCREENSHOT-ERSTELLUNG" -ForegroundColor Red + Write-Host "Ueberpruefen Sie die Logs fuer Details" -ForegroundColor Yellow } } catch { Write-Host "" - Write-Host "❌ UNERWARTETER FEHLER: $($_.Exception.Message)" -ForegroundColor Red + Write-Host "UNERWARTETER FEHLER: $($_.Exception.Message)" -ForegroundColor Red $exitCode = 1 } Write-Host "" -Write-Host "💡 VERWENDUNGSHINWEISE FÜR SCHULUNGEN:" -ForegroundColor Cyan -Write-Host "=" * 40 -ForegroundColor Cyan -Write-Host "• Admin-Screenshots: docs\schulung\screenshots\admin\" -ForegroundColor White -Write-Host "• Benutzer-Screenshots: docs\schulung\screenshots\benutzer\" -ForegroundColor White -Write-Host "• Öffentliche Screenshots: docs\schulung\screenshots\oeffentlich\" -ForegroundColor White -Write-Host "• Verschiedene Auflösungen in Unterordnern verfügbar" -ForegroundColor White -Write-Host "• Perfekt für PowerPoint-Präsentationen geeignet" -ForegroundColor White +Write-Host "VERWENDUNGSHINWEISE FUER SCHULUNGEN:" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "- Admin-Screenshots: docs\schulung\screenshots\admin\" -ForegroundColor White +Write-Host "- Benutzer-Screenshots: docs\schulung\screenshots\benutzer\" -ForegroundColor White +Write-Host "- Oeffentliche Screenshots: docs\schulung\screenshots\oeffentlich\" -ForegroundColor White +Write-Host "- Verschiedene Aufloesungen in Unterordnern verfuegbar" -ForegroundColor White +Write-Host "- Perfekt fuer PowerPoint-Praesentationen geeignet" -ForegroundColor White Write-Host "" -Write-Host "🎓 TIPPS FÜR PRÄSENTATIONEN:" -ForegroundColor Yellow -Write-Host "• Desktop-Screenshots für Hauptpräsentationen verwenden" -ForegroundColor White -Write-Host "• Mobile-Screenshots für Responsive-Design zeigen" -ForegroundColor White -Write-Host "• Admin-Ordner für Administrator-Schulungen" -ForegroundColor White -Write-Host "• Benutzer-Ordner für allgemeine Mitarbeiterschulungen" -ForegroundColor White +Write-Host "TIPPS FUER PRAESENTATIONEN:" -ForegroundColor Yellow +Write-Host "- Desktop-Screenshots fuer Hauptpraesentationen verwenden" -ForegroundColor White +Write-Host "- Mobile-Screenshots fuer Responsive-Design zeigen" -ForegroundColor White +Write-Host "- Admin-Ordner fuer Administrator-Schulungen" -ForegroundColor White +Write-Host "- Benutzer-Ordner fuer allgemeine Mitarbeiterschulungen" -ForegroundColor White Write-Host "" -Write-Host "📞 Bei Problemen:" -ForegroundColor Magenta -Write-Host "• Log-Datei prüfen: screenshot_tool.log" -ForegroundColor White -Write-Host "• Server läuft auf korrekter URL?" -ForegroundColor White -Write-Host "• Admin-Zugangsdaten korrekt?" -ForegroundColor White -Write-Host "• ChromeDriver installiert?" -ForegroundColor White +Write-Host "Bei Problemen:" -ForegroundColor Magenta +Write-Host "- Log-Datei pruefen: screenshot_tool.log" -ForegroundColor White +Write-Host "- Server laeuft auf korrekter URL?" -ForegroundColor White +Write-Host "- Admin-Zugangsdaten korrekt?" -ForegroundColor White +Write-Host "- ChromeDriver installiert?" -ForegroundColor White exit $exitCode \ No newline at end of file diff --git a/backend/scripts/screenshot_tool.log b/backend/scripts/screenshot_tool.log new file mode 100644 index 00000000..e69de29b diff --git a/backend/setup.sh b/backend/setup.sh index 7247be87..ddfd98bf 100644 --- a/backend/setup.sh +++ b/backend/setup.sh @@ -225,6 +225,65 @@ show_error_summary() { fi echo -e "${CYAN}=================================================================${NC}" + + # Erstelle automatische Log-Zusammenfassung + create_log_summary +} + +# Automatische Log-Zusammenfassung erstellen +create_log_summary() { + local summary_file="/var/log/myp-install-summary.txt" + + { + echo "=================================================================" + echo "MYP INSTALLATION ZUSAMMENFASSUNG" + echo "Erstellt: $(date '+%Y-%m-%d %H:%M:%S')" + echo "=================================================================" + echo "" + echo "STATISTIKEN:" + echo "- Fehler: $ERROR_COUNT" + echo "- Warnungen: $WARNING_COUNT" + echo "- Script Version: $APP_VERSION" + echo "- System: $(uname -a 2>/dev/null || echo 'Unbekannt')" + echo "- Hostname: $(hostname 2>/dev/null || echo 'Unbekannt')" + echo "- User: $(whoami 2>/dev/null || echo 'Unbekannt')" + echo "" + echo "SYSTEM-INFORMATIONEN:" + echo "- Festplattenspeicher: $(df -h / | tail -1 2>/dev/null || echo 'Nicht verfügbar')" + echo "- Arbeitsspeicher: $(free -m | grep '^Mem:' | awk '{print $3"/"$2" MB"}' 2>/dev/null || echo 'Nicht verfügbar')" + echo "- Python Version: $(python3 --version 2>&1 || echo 'Nicht installiert')" + echo "- Node.js Version: $(node --version 2>&1 || echo 'Nicht installiert')" + echo "" + echo "LOG-DATEIEN:" + echo "- Vollständiges Log: $INSTALL_LOG" + echo "- Fehler-Log: $ERROR_LOG" + echo "- Warnungs-Log: $WARNING_LOG" + echo "- Debug-Log: $DEBUG_LOG" + echo "" + + if [ $ERROR_COUNT -gt 0 ] && [ -f "$ERROR_LOG" ] && [ -s "$ERROR_LOG" ]; then + echo "FEHLER-ÜBERSICHT:" + echo "=================" + tail -n 50 "$ERROR_LOG" + echo "" + fi + + if [ $WARNING_COUNT -gt 0 ] && [ -f "$WARNING_LOG" ] && [ -s "$WARNING_LOG" ]; then + echo "WARNUNGS-ÜBERSICHT:" + echo "===================" + tail -n 30 "$WARNING_LOG" + echo "" + fi + + echo "INSTALLATION ABGESCHLOSSEN: $(date '+%Y-%m-%d %H:%M:%S')" + echo "=================================================================" + + } > "$summary_file" + + # Berechtigung für Zusammenfassungs-Datei setzen + chmod 644 "$summary_file" 2>/dev/null || true + + debug "Log-Zusammenfassung erstellt: $summary_file" } # =========================== RETRY-MECHANISMEN =========================== @@ -241,10 +300,30 @@ retry_command() { attempts=$((attempts + 1)) if [ $attempts -lt $MAX_RETRIES ]; then warning "$description fehlgeschlagen (Versuch $attempts/$MAX_RETRIES) - wiederhole in ${RETRY_DELAY}s..." + + # Debug-Information für jeden fehlgeschlagenen Versuch + debug "Retry-Versuch für '$description': $attempts/$MAX_RETRIES" + debug "Fehlgeschlagener Befehl: $cmd" + debug "Aktuelles Arbeitsverzeichnis: $(pwd)" + debug "Verfügbarer Speicher: $(free -m | grep '^Mem:' | awk '{print $3"/"$2" MB"}' 2>/dev/null || echo 'Unbekannt')" + debug "Exit-Code des letzten Befehls: $?" + sleep $RETRY_DELAY fi done + # Detaillierte Fehler-Information vor dem Beenden + debug "CRITICAL: Retry-Mechanismus erschöpft für '$description'" + debug "Letzter Befehl: $cmd" + debug "Versuche: $MAX_RETRIES" + debug "System-Status zum Zeitpunkt des kritischen Fehlers:" + debug " - Disk Usage: $(df -h / | tail -1 2>/dev/null || echo 'Nicht verfügbar')" + debug " - Memory Usage: $(free -m 2>/dev/null || echo 'Nicht verfügbar')" + debug " - Load Average: $(uptime 2>/dev/null | awk -F'load average:' '{print $2}' || echo 'Nicht verfügbar')" + debug " - Network Status: $(ip addr show 2>/dev/null | grep 'inet ' | grep -v '127.0.0.1' || echo 'Nicht verfügbar')" + debug " - APT Status: $(ps aux | grep -i apt | grep -v grep || echo 'Keine APT-Prozesse')" + debug " - Python Status: $(python3 --version 2>&1 || echo 'Python nicht verfügbar')" + error "$description nach $MAX_RETRIES Versuchen fehlgeschlagen!" } @@ -3033,6 +3112,7 @@ main() { [ $ERROR_COUNT -gt 0 ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG" [ $WARNING_COUNT -gt 0 ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG" echo -e " 🔍 Debug-Log: $DEBUG_LOG" + echo -e " 📊 Zusammenfassung: /var/log/myp-install-summary.txt" echo "" echo -n "Drücken Sie Enter um fortzufahren..." read -r @@ -3045,6 +3125,7 @@ main() { [ $ERROR_COUNT -gt 0 ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG" [ $WARNING_COUNT -gt 0 ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG" echo -e " 🔍 Debug-Log: $DEBUG_LOG" + echo -e " 📊 Zusammenfassung: /var/log/myp-install-summary.txt" echo "" echo -n "Drücken Sie Enter um fortzufahren..." read -r @@ -3058,6 +3139,7 @@ main() { [ -f "$ERROR_LOG" ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG" [ -f "$WARNING_LOG" ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG" [ -f "$DEBUG_LOG" ] && echo -e " 🔍 Debug-Log: $DEBUG_LOG" + [ -f "/var/log/myp-install-summary.txt" ] && echo -e " 📊 Zusammenfassung: /var/log/myp-install-summary.txt" fi exit 0 ;;