🎉 Feat/DB: Enhanced database logging & WAL management for improved stability and performance in backend/database/myp.db-wal

This commit is contained in:
Till Tomczak 2025-06-03 13:23:58 +02:00
parent b29219ce4c
commit 45547a8da6
6 changed files with 138 additions and 56 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
# PowerShell-Skript für automatische Screenshots # PowerShell-Skript fuer automatische Screenshots
# ============================================= # =============================================
param( param(
@ -10,72 +10,72 @@ param(
) )
Write-Host "===============================================" -ForegroundColor Cyan 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 "===============================================" -ForegroundColor Cyan
Write-Host "" Write-Host ""
# Arbeitsverzeichnis zum Skript-Ordner ändern # Arbeitsverzeichnis zum Skript-Ordner aendern
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $ScriptDir Set-Location $ScriptDir
# Prüfe ob Python verfügbar ist # Pruefe ob Python verfuegbar ist
try { try {
$pythonVersion = python --version 2>&1 $pythonVersion = python --version 2>&1
Write-Host "Python gefunden: $pythonVersion" -ForegroundColor Green Write-Host "Python gefunden: $pythonVersion" -ForegroundColor Green
} catch { } catch {
Write-Host "Python nicht gefunden!" -ForegroundColor Red Write-Host "Python nicht gefunden!" -ForegroundColor Red
Write-Host "💡 Installieren Sie Python von https://python.org" -ForegroundColor Yellow Write-Host "Installieren Sie Python von https://python.org" -ForegroundColor Yellow
exit 1 exit 1
} }
# Prüfe ob Selenium installiert ist # Pruefe ob Selenium installiert ist
$seleniumCheck = python -c "import selenium; print('✅ Selenium verfügbar')" 2>&1 $seleniumCheck = python -c "import selenium; print('Selenium verfuegbar')" 2>&1
if ($LASTEXITCODE -ne 0) { 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 pip install selenium webdriver-manager
if ($LASTEXITCODE -ne 0) { if ($LASTEXITCODE -ne 0) {
Write-Host "Selenium-Installation fehlgeschlagen!" -ForegroundColor Red Write-Host "Selenium-Installation fehlgeschlagen!" -ForegroundColor Red
exit 1 exit 1
} }
Write-Host "Selenium erfolgreich installiert" -ForegroundColor Green Write-Host "Selenium erfolgreich installiert" -ForegroundColor Green
} else { } else {
Write-Host $seleniumCheck -ForegroundColor Green Write-Host $seleniumCheck -ForegroundColor Green
} }
# Prüfe ChromeDriver # Pruefe ChromeDriver
$chromeCheck = python -c "from selenium import webdriver; from selenium.webdriver.chrome.service import Service; print('✅ Chrome WebDriver verfügbar')" 2>&1 $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) { 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 pip install webdriver-manager
if ($LASTEXITCODE -ne 0) { if ($LASTEXITCODE -ne 0) {
Write-Host "WebDriver-Manager-Installation fehlgeschlagen!" -ForegroundColor Red Write-Host "WebDriver-Manager-Installation fehlgeschlagen!" -ForegroundColor Red
Write-Host "💡 Manuell ChromeDriver von https://chromedriver.chromium.org/ herunterladen" -ForegroundColor Yellow Write-Host "Manuell ChromeDriver von https://chromedriver.chromium.org/ herunterladen" -ForegroundColor Yellow
} else { } 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 ""
Write-Host "Prüfe Flask-App..." -ForegroundColor Blue Write-Host "Pruefe Flask-App..." -ForegroundColor Blue
$flaskCheck = python -c "import sys; sys.path.append('..'); exec('from app import app'); print('Flask-App verfügbar')" 2>&1 $flaskCheck = python -c "import sys; sys.path.append('..'); exec('from app import app'); print('Flask-App verfuegbar')" 2>&1
if ($LASTEXITCODE -ne 0) { 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 Write-Host "Das Tool wird mit Standard-Routen arbeiten" -ForegroundColor Blue
} else { } else {
Write-Host $flaskCheck -ForegroundColor Green Write-Host $flaskCheck -ForegroundColor Green
} }
Write-Host "" Write-Host ""
Write-Host "🚀 STARTE SCREENSHOT-TOOL" -ForegroundColor Green Write-Host "STARTE SCREENSHOT-TOOL" -ForegroundColor Green
Write-Host "=" * 30 -ForegroundColor Green Write-Host "==============================" -ForegroundColor Green
# Parameter für das Python-Skript vorbereiten # Parameter fuer das Python-Skript vorbereiten
$pythonArgs = @("screenshot_tool.py") $pythonArgs = @("screenshot_tool.py")
if ($QuickRun) { if ($QuickRun) {
Write-Host "Quick-Run-Modus aktiviert" -ForegroundColor Yellow Write-Host "Quick-Run-Modus aktiviert" -ForegroundColor Yellow
# Setze Umgebungsvariablen für automatische Konfiguration # Setze Umgebungsvariablen fuer automatische Konfiguration
$env:SCREENSHOT_AUTO_MODE = "true" $env:SCREENSHOT_AUTO_MODE = "true"
$env:SCREENSHOT_HEADLESS = "true" $env:SCREENSHOT_HEADLESS = "true"
@ -88,13 +88,13 @@ if ($QuickRun) {
} }
} }
# Tool ausführen # Tool ausfuehren
try { try {
if ($Interactive) { if ($Interactive) {
Write-Host "🎛️ Interaktiver Modus - Folgen Sie den Anweisungen" -ForegroundColor Blue Write-Host "Interaktiver Modus - Folgen Sie den Anweisungen" -ForegroundColor Blue
python @pythonArgs python @pythonArgs
} else { } else {
Write-Host "🤖 Automatischer Modus" -ForegroundColor Blue Write-Host "Automatischer Modus" -ForegroundColor Blue
python @pythonArgs python @pythonArgs
} }
@ -102,17 +102,17 @@ try {
if ($exitCode -eq 0) { if ($exitCode -eq 0) {
Write-Host "" Write-Host ""
Write-Host "🎉 SCREENSHOT-ERSTELLUNG ERFOLGREICH ABGESCHLOSSEN!" -ForegroundColor Green Write-Host "SCREENSHOT-ERSTELLUNG ERFOLGREICH ABGESCHLOSSEN!" -ForegroundColor Green
Write-Host "" Write-Host ""
# Zeige Ausgabe-Ordner an # Zeige Ausgabe-Ordner an
$outputPath = "docs\schulung\screenshots" $outputPath = "docs\schulung\screenshots"
if (Test-Path $outputPath) { 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 Write-Host " $(Resolve-Path $outputPath)" -ForegroundColor White
# Frage ob Ordner geöffnet werden soll # Frage ob Ordner geoeffnet werden soll
$openFolder = Read-Host "📂 Möchten Sie den Screenshot-Ordner öffnen? (j/n)" $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") { if ($openFolder -eq "j" -or $openFolder -eq "ja" -or $openFolder -eq "y" -or $openFolder -eq "yes") {
Start-Process "explorer.exe" -ArgumentList (Resolve-Path $outputPath) Start-Process "explorer.exe" -ArgumentList (Resolve-Path $outputPath)
} }
@ -122,10 +122,10 @@ try {
$reportPath = "$outputPath\screenshot_bericht.md" $reportPath = "$outputPath\screenshot_bericht.md"
if (Test-Path $reportPath) { if (Test-Path $reportPath) {
Write-Host "" Write-Host ""
Write-Host "📊 Detaillierter Bericht verfügbar:" -ForegroundColor Blue Write-Host "Detaillierter Bericht verfuegbar:" -ForegroundColor Blue
Write-Host " $(Resolve-Path $reportPath)" -ForegroundColor White 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") { if ($openReport -eq "j" -or $openReport -eq "ja" -or $openReport -eq "y" -or $openReport -eq "yes") {
Start-Process "notepad.exe" -ArgumentList (Resolve-Path $reportPath) Start-Process "notepad.exe" -ArgumentList (Resolve-Path $reportPath)
} }
@ -133,37 +133,37 @@ try {
} else { } else {
Write-Host "" Write-Host ""
Write-Host "FEHLER BEI DER SCREENSHOT-ERSTELLUNG" -ForegroundColor Red Write-Host "FEHLER BEI DER SCREENSHOT-ERSTELLUNG" -ForegroundColor Red
Write-Host "📋 Überprüfen Sie die Logs für Details" -ForegroundColor Yellow Write-Host "Ueberpruefen Sie die Logs fuer Details" -ForegroundColor Yellow
} }
} catch { } catch {
Write-Host "" Write-Host ""
Write-Host "UNERWARTETER FEHLER: $($_.Exception.Message)" -ForegroundColor Red Write-Host "UNERWARTETER FEHLER: $($_.Exception.Message)" -ForegroundColor Red
$exitCode = 1 $exitCode = 1
} }
Write-Host "" Write-Host ""
Write-Host "💡 VERWENDUNGSHINWEISE FÜR SCHULUNGEN:" -ForegroundColor Cyan Write-Host "VERWENDUNGSHINWEISE FUER SCHULUNGEN:" -ForegroundColor Cyan
Write-Host "=" * 40 -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Admin-Screenshots: docs\schulung\screenshots\admin\" -ForegroundColor White Write-Host "- Admin-Screenshots: docs\schulung\screenshots\admin\" -ForegroundColor White
Write-Host " Benutzer-Screenshots: docs\schulung\screenshots\benutzer\" -ForegroundColor White Write-Host "- Benutzer-Screenshots: docs\schulung\screenshots\benutzer\" -ForegroundColor White
Write-Host "• Öffentliche Screenshots: docs\schulung\screenshots\oeffentlich\" -ForegroundColor White Write-Host "- Oeffentliche Screenshots: docs\schulung\screenshots\oeffentlich\" -ForegroundColor White
Write-Host "• Verschiedene Auflösungen in Unterordnern verfügbar" -ForegroundColor White Write-Host "- Verschiedene Aufloesungen in Unterordnern verfuegbar" -ForegroundColor White
Write-Host "• Perfekt für PowerPoint-Präsentationen geeignet" -ForegroundColor White Write-Host "- Perfekt fuer PowerPoint-Praesentationen geeignet" -ForegroundColor White
Write-Host "" Write-Host ""
Write-Host "🎓 TIPPS FÜR PRÄSENTATIONEN:" -ForegroundColor Yellow Write-Host "TIPPS FUER PRAESENTATIONEN:" -ForegroundColor Yellow
Write-Host "• Desktop-Screenshots für Hauptpräsentationen verwenden" -ForegroundColor White Write-Host "- Desktop-Screenshots fuer Hauptpraesentationen verwenden" -ForegroundColor White
Write-Host "• Mobile-Screenshots für Responsive-Design zeigen" -ForegroundColor White Write-Host "- Mobile-Screenshots fuer Responsive-Design zeigen" -ForegroundColor White
Write-Host "• Admin-Ordner für Administrator-Schulungen" -ForegroundColor White Write-Host "- Admin-Ordner fuer Administrator-Schulungen" -ForegroundColor White
Write-Host "• Benutzer-Ordner für allgemeine Mitarbeiterschulungen" -ForegroundColor White Write-Host "- Benutzer-Ordner fuer allgemeine Mitarbeiterschulungen" -ForegroundColor White
Write-Host "" Write-Host ""
Write-Host "📞 Bei Problemen:" -ForegroundColor Magenta Write-Host "Bei Problemen:" -ForegroundColor Magenta
Write-Host "• Log-Datei prüfen: screenshot_tool.log" -ForegroundColor White Write-Host "- Log-Datei pruefen: screenshot_tool.log" -ForegroundColor White
Write-Host "• Server läuft auf korrekter URL?" -ForegroundColor White Write-Host "- Server laeuft auf korrekter URL?" -ForegroundColor White
Write-Host " Admin-Zugangsdaten korrekt?" -ForegroundColor White Write-Host "- Admin-Zugangsdaten korrekt?" -ForegroundColor White
Write-Host " ChromeDriver installiert?" -ForegroundColor White Write-Host "- ChromeDriver installiert?" -ForegroundColor White
exit $exitCode exit $exitCode

View File

View File

@ -225,6 +225,65 @@ show_error_summary() {
fi fi
echo -e "${CYAN}=================================================================${NC}" 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 =========================== # =========================== RETRY-MECHANISMEN ===========================
@ -241,10 +300,30 @@ retry_command() {
attempts=$((attempts + 1)) attempts=$((attempts + 1))
if [ $attempts -lt $MAX_RETRIES ]; then if [ $attempts -lt $MAX_RETRIES ]; then
warning "$description fehlgeschlagen (Versuch $attempts/$MAX_RETRIES) - wiederhole in ${RETRY_DELAY}s..." 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 sleep $RETRY_DELAY
fi fi
done 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!" error "$description nach $MAX_RETRIES Versuchen fehlgeschlagen!"
} }
@ -3033,6 +3112,7 @@ main() {
[ $ERROR_COUNT -gt 0 ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG" [ $ERROR_COUNT -gt 0 ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG"
[ $WARNING_COUNT -gt 0 ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG" [ $WARNING_COUNT -gt 0 ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG"
echo -e " 🔍 Debug-Log: $DEBUG_LOG" echo -e " 🔍 Debug-Log: $DEBUG_LOG"
echo -e " 📊 Zusammenfassung: /var/log/myp-install-summary.txt"
echo "" echo ""
echo -n "Drücken Sie Enter um fortzufahren..." echo -n "Drücken Sie Enter um fortzufahren..."
read -r read -r
@ -3045,6 +3125,7 @@ main() {
[ $ERROR_COUNT -gt 0 ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG" [ $ERROR_COUNT -gt 0 ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG"
[ $WARNING_COUNT -gt 0 ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG" [ $WARNING_COUNT -gt 0 ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG"
echo -e " 🔍 Debug-Log: $DEBUG_LOG" echo -e " 🔍 Debug-Log: $DEBUG_LOG"
echo -e " 📊 Zusammenfassung: /var/log/myp-install-summary.txt"
echo "" echo ""
echo -n "Drücken Sie Enter um fortzufahren..." echo -n "Drücken Sie Enter um fortzufahren..."
read -r read -r
@ -3058,6 +3139,7 @@ main() {
[ -f "$ERROR_LOG" ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG" [ -f "$ERROR_LOG" ] && echo -e " 🚨 Fehler-Log: $ERROR_LOG"
[ -f "$WARNING_LOG" ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG" [ -f "$WARNING_LOG" ] && echo -e " ⚠️ Warnungs-Log: $WARNING_LOG"
[ -f "$DEBUG_LOG" ] && echo -e " 🔍 Debug-Log: $DEBUG_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 fi
exit 0 exit 0
;; ;;