Feature: Detaillierte Worker-Pool Performance-Metriken mit psutil
Neue Metrik-Erfassung für Saxon- und FOP-Worker-Pools: - Kompilierungszeit der Java-Worker-Klassen - Worker-Startzeiten (Summe + Durchschnitt pro Worker) - RAM-Verbrauch vor/nach Transformation (Summe + Durchschnitt) - Automatische Berechnung der RAM-Zunahme in MB und Prozent Technische Details: - Neue WorkerPoolMetrics-Datenklasse in worker_metrics.py - RAM-Messung via psutil (v7.2.1, neu hinzugefügt) - Metriken für beide Saxon-Varianten (JAXP + s9api) - WorkerPoolMetricsDialog mit Tab-basierter UI - Menüeintrag "Projekt → Worker-Pool-Metriken" Metriken werden automatisch erfasst: - Bei Worker-Pool-Initialisierung (Kompilierung + Start) - Vor erster Transformation (RAM-Baseline) - Nach allen Transformationen (RAM-Endwert) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1078,6 +1078,25 @@ class MainWindow(QMainWindow):
|
||||
self.ui.actionNeu.triggered.connect(self.open_new_project_dialog)
|
||||
self.ui.actionEinstellungen.triggered.connect(self.open_settings_dialog)
|
||||
|
||||
# Worker-Pool-Metriken Menüeintrag (programmatisch hinzufügen)
|
||||
from PySide6.QtGui import QAction
|
||||
|
||||
self.action_worker_metrics = QAction("Worker-Pool-Metriken", self)
|
||||
self.action_worker_metrics.triggered.connect(self._show_worker_pool_metrics)
|
||||
# Füge die Aktion zum Projekt-Menü hinzu (nach Einstellungen, vor Beenden)
|
||||
actions = self.ui.menuProjekt.actions()
|
||||
# Finde die Position nach actionEinstellungen
|
||||
insert_index = len(actions) # Fallback: Am Ende
|
||||
for i, action in enumerate(actions):
|
||||
if action == self.ui.actionEinstellungen:
|
||||
insert_index = i + 1
|
||||
break
|
||||
before_action = actions[insert_index] if insert_index < len(actions) else None
|
||||
if before_action:
|
||||
self.ui.menuProjekt.insertAction(before_action, self.action_worker_metrics)
|
||||
else:
|
||||
self.ui.menuProjekt.addAction(self.action_worker_metrics)
|
||||
|
||||
# Button "lade aus FN2" verbinden
|
||||
self.ui.pB_lade_aus_fn2.clicked.connect(self.on_load_from_fn2_clicked)
|
||||
|
||||
@@ -1525,6 +1544,17 @@ class MainWindow(QMainWindow):
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Öffnen des Einstellungen-Dialogs: {e}")
|
||||
|
||||
def _show_worker_pool_metrics(self):
|
||||
"""Zeigt den Worker-Pool-Metriken-Dialog an."""
|
||||
try:
|
||||
from ui.WorkerPoolMetricsDialog import WorkerPoolMetricsDialog
|
||||
|
||||
dialog = WorkerPoolMetricsDialog(self)
|
||||
dialog.exec()
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Öffnen des Metriken-Dialogs: {e}")
|
||||
QMessageBox.critical(self, "Fehler", f"Fehler beim Öffnen des Metriken-Dialogs:\n{str(e)}")
|
||||
|
||||
def open_new_project_dialog(self):
|
||||
"""Öffnet Pdf-Projekt-Dialog."""
|
||||
try:
|
||||
@@ -4177,6 +4207,14 @@ class MainWindow(QMainWindow):
|
||||
# Zeige Progressbar
|
||||
self._show_transformation_progress_bar(len(jobs))
|
||||
|
||||
# Erfasse RAM-Verbrauch vor Transformation
|
||||
import transform
|
||||
|
||||
if transform._saxon_worker_pool:
|
||||
transform._saxon_worker_pool.capture_ram_before_transform()
|
||||
if transform._fop_worker_pool:
|
||||
transform._fop_worker_pool.capture_ram_before_transform()
|
||||
|
||||
# Starte Thread
|
||||
self.transformation_thread.start()
|
||||
|
||||
@@ -4331,6 +4369,14 @@ class MainWindow(QMainWindow):
|
||||
f"Alle Transformationen abgeschlossen: {successful_count}/{total_count} erfolgreich ({total_duration:.2f}s)"
|
||||
)
|
||||
|
||||
# Erfasse RAM-Verbrauch nach Transformation
|
||||
import transform
|
||||
|
||||
if transform._saxon_worker_pool:
|
||||
transform._saxon_worker_pool.capture_ram_after_transform()
|
||||
if transform._fop_worker_pool:
|
||||
transform._fop_worker_pool.capture_ram_after_transform()
|
||||
|
||||
# Verstecke Transformation-Progressbar
|
||||
self._hide_transformation_progress_bar()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user