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:
@@ -546,6 +546,10 @@ class MainWindow(QMainWindow):
|
||||
# Progressbar für Transformationen in Statusbar
|
||||
self.transformation_progress_bar = None
|
||||
|
||||
# Gespeicherte Worker-Pool-Metriken (werden vor Shutdown gecacht)
|
||||
self.last_saxon_metrics = None
|
||||
self.last_fop_metrics = None
|
||||
|
||||
# Mapping: xml_file_path_str → QTreeWidgetItem (für Progress Bar und Icon Updates)
|
||||
self.xml_item_map = {}
|
||||
|
||||
@@ -4371,11 +4375,19 @@ class MainWindow(QMainWindow):
|
||||
|
||||
# Erfasse RAM-Verbrauch nach Transformation
|
||||
import transform
|
||||
from copy import deepcopy
|
||||
|
||||
if transform._saxon_worker_pool:
|
||||
transform._saxon_worker_pool.capture_ram_after_transform()
|
||||
# Speichere Metriken vor Shutdown (für späteren Zugriff im Dialog)
|
||||
self.last_saxon_metrics = deepcopy(transform._saxon_worker_pool.metrics)
|
||||
logger.debug("Saxon Worker-Pool Metriken gespeichert")
|
||||
|
||||
if transform._fop_worker_pool:
|
||||
transform._fop_worker_pool.capture_ram_after_transform()
|
||||
# Speichere Metriken vor Shutdown (für späteren Zugriff im Dialog)
|
||||
self.last_fop_metrics = deepcopy(transform._fop_worker_pool.metrics)
|
||||
logger.debug("FOP Worker-Pool Metriken gespeichert")
|
||||
|
||||
# Beende Worker-Pools (RAM-Optimierung - Pools werden bei nächster Transformation neu gestartet)
|
||||
self._shutdown_saxon_worker_pool()
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user