Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -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)")
|
||||
|
||||
Reference in New Issue
Block a user