Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-03-09 23:07:05 +01:00
parent 3361cffb14
commit 2e9db78c6e
18 changed files with 2855 additions and 69 deletions

View File

@@ -739,6 +739,81 @@ class EntityValidator:
print_success(f"Alle {len(php_files)} PHP-Dateien sind syntaktisch korrekt")
return True
def show_error_logs(self):
"""Zeige die letzten Fehlerlog-Einträge aus data/logs/."""
from datetime import datetime
print_header("FEHLERLOG ANALYSE")
logs_path = self.base_path / "data" / "logs"
if not logs_path.exists():
print_warning("Logs-Verzeichnis nicht gefunden")
return
# Finde das neueste Log-File
today = datetime.now().strftime("%Y-%m-%d")
log_file = logs_path / f"espo-{today}.log"
if not log_file.exists():
# Fallback: Finde das neueste Log-File
log_files = sorted(logs_path.glob("espo-*.log"), key=lambda f: f.stat().st_mtime, reverse=True)
if log_files:
log_file = log_files[0]
print_info(f"Kein Log für heute gefunden, verwende: {log_file.name}")
else:
print_warning("Keine Log-Dateien gefunden")
return
print_info(f"Analysiere: {log_file.name}")
try:
with open(log_file, 'r', encoding='utf-8') as f:
lines = f.readlines()
if not lines:
print_info("Log-Datei ist leer")
return
# Zeige die letzten 50 Zeilen
last_lines = lines[-50:]
# Filter für Fehler und Warnungen
errors = []
warnings = []
for line in last_lines:
line_upper = line.upper()
if 'ERROR' in line_upper or 'FATAL' in line_upper or 'EXCEPTION' in line_upper:
errors.append(line.strip())
elif 'WARNING' in line_upper or 'WARN' in line_upper:
warnings.append(line.strip())
if errors:
print_error(f"\n{len(errors)} Fehler in den letzten 50 Log-Zeilen gefunden:\n")
for i, error in enumerate(errors[-10:], 1): # Zeige max. 10 Fehler
print(f"{Colors.RED}{i}.{Colors.END} {error}")
if len(errors) > 10:
print(f"\n{Colors.YELLOW}... und {len(errors) - 10} weitere Fehler{Colors.END}")
if warnings:
print_warning(f"\n{len(warnings)} Warnungen in den letzten 50 Log-Zeilen gefunden:\n")
for i, warning in enumerate(warnings[-5:], 1): # Zeige max. 5 Warnungen
print(f"{Colors.YELLOW}{i}.{Colors.END} {warning}")
if len(warnings) > 5:
print(f"\n{Colors.YELLOW}... und {len(warnings) - 5} weitere Warnungen{Colors.END}")
if not errors and not warnings:
print_info("Keine Fehler oder Warnungen in den letzten 50 Log-Zeilen gefunden")
print_info("\nLetzte 10 Log-Zeilen:")
for line in last_lines[-10:]:
print(f" {line.strip()}")
print(f"\n{Colors.BLUE}{Colors.END} Vollständige Log-Datei: {log_file}")
print(f"{Colors.BLUE}{Colors.END} Zum Anzeigen: tail -50 {log_file}")
except Exception as e:
print_error(f"Fehler beim Lesen der Log-Datei: {e}")
def run_rebuild(self) -> bool:
"""Führe den EspoCRM Rebuild aus."""
print_header("10. ESPOCRM REBUILD")
@@ -811,6 +886,9 @@ class EntityValidator:
print_error("Rebuild fehlgeschlagen:")
if result.stderr:
print(f"\n{result.stderr}")
# Zeige automatisch die letzten Fehlerlog-Einträge an
self.show_error_logs()
return False
else:
print_warning("Kein EspoCRM Docker-Container gefunden")
@@ -862,6 +940,9 @@ class EntityValidator:
print_error("Rebuild fehlgeschlagen:")
if result.stderr:
print(f"\n{result.stderr}")
# Zeige automatisch die letzten Fehlerlog-Einträge an
self.show_error_logs()
return False
except subprocess.TimeoutExpired:
print_error("Rebuild-Timeout (>60 Sekunden)")