Fix: Worker-Pool-Metriken cachen für Anzeige nach Shutdown

Problem:
- Worker-Pools werden nach Transformation beendet (Lazy Loading)
- Metriken waren danach nicht mehr verfügbar
- Metriken-Dialog zeigte "Nicht aktiviert"

Lösung:
- Metriken werden vor Pool-Shutdown mit deepcopy() gespeichert
- MainWindow speichert last_saxon_metrics und last_fop_metrics
- WorkerPoolMetricsDialog zeigt gecachte Metriken an
- Neue Methode: _update_metrics_tab_from_metrics()

Verhalten:
- Metriken bleiben bis zur nächsten Transformation verfügbar
- Dialog zeigt "Letzte Transformation" statt "Aktiviert"
- Ohne Metriken: Hinweis "bitte erst eine Transformation durchführen"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-07 19:00:35 +01:00
parent f59e51c081
commit 1558c376d1
2 changed files with 34 additions and 16 deletions
+22 -16
View File
@@ -141,19 +141,26 @@ class WorkerPoolMetricsDialog(QDialog):
def _load_metrics(self):
"""Lädt und zeigt die Metriken an."""
import transform
# Hole MainWindow-Instanz (parent)
main_window = self.parent()
# Saxon Worker Pool
if transform._saxon_worker_pool:
self._update_metrics_tab(self.saxon_tab, transform._saxon_worker_pool, "Saxon Worker Pool")
# Saxon Worker Pool - verwende gespeicherte Metriken
if hasattr(main_window, "last_saxon_metrics") and main_window.last_saxon_metrics:
self._update_metrics_tab_from_metrics(
self.saxon_tab, main_window.last_saxon_metrics, "Saxon Worker Pool"
)
else:
self._set_tab_status(self.saxon_tab, "<i>Nicht aktiviert</i>")
self._set_tab_status(
self.saxon_tab, "<i>Keine Metriken verfügbar - bitte erst eine Transformation durchführen</i>"
)
# FOP Worker Pool
if transform._fop_worker_pool:
self._update_metrics_tab(self.fop_tab, transform._fop_worker_pool, "FOP Worker Pool")
# FOP Worker Pool - verwende gespeicherte Metriken
if hasattr(main_window, "last_fop_metrics") and main_window.last_fop_metrics:
self._update_metrics_tab_from_metrics(self.fop_tab, main_window.last_fop_metrics, "FOP Worker Pool")
else:
self._set_tab_status(self.fop_tab, "<i>Nicht aktiviert</i>")
self._set_tab_status(
self.fop_tab, "<i>Keine Metriken verfügbar - bitte erst eine Transformation durchführen</i>"
)
def _set_tab_status(self, tab: QWidget, status: str):
"""
@@ -167,19 +174,18 @@ class WorkerPoolMetricsDialog(QDialog):
if status_label:
status_label.setText(f"Status: {status}")
def _update_metrics_tab(self, tab: QWidget, pool, pool_name: str):
def _update_metrics_tab_from_metrics(self, tab: QWidget, metrics, pool_name: str):
"""
Aktualisiert die Metriken in einem Tab.
Aktualisiert die Metriken in einem Tab (direkt aus Metriken-Objekt).
Args:
tab: Das Tab-Widget
pool: Der Worker-Pool (Saxon oder FOP)
metrics: Das WorkerPoolMetrics-Objekt
pool_name: Name des Pools
"""
metrics = pool.metrics
# Status
self._set_tab_status(tab, f"<b>Aktiviert</b> ({pool.num_workers} Worker)")
# Status - berechne Worker-Anzahl aus Metriken
num_workers = len(metrics.worker_start_times) if metrics.worker_start_times else 0
self._set_tab_status(tab, f"<b>Letzte Transformation</b> ({num_workers} Worker)")
# Kompilierung
compile_time_label = tab.findChild(QLabel, "compile_time_label")