d3dc07cbf3
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>
63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
"""
|
|
Worker Pool Performance-Metriken.
|
|
|
|
Gemeinsame Datenstrukturen für Performance- und Ressourcenverbrauch-Metriken
|
|
der Worker-Pools (Saxon, FOP).
|
|
"""
|
|
|
|
from dataclasses import dataclass, field
|
|
|
|
|
|
@dataclass
|
|
class WorkerPoolMetrics:
|
|
"""
|
|
Metriken für Worker-Pool Performance und Ressourcenverbrauch.
|
|
"""
|
|
|
|
# Kompilierungszeit
|
|
compilation_time_seconds: float = 0.0
|
|
|
|
# Worker-Start-Zeiten
|
|
worker_start_times: list[float] = field(default_factory=list)
|
|
total_worker_start_time_seconds: float = 0.0
|
|
average_worker_start_time_seconds: float = 0.0
|
|
|
|
# RAM-Verbrauch (in MB)
|
|
ram_before_transform_mb_per_worker: list[float] = field(default_factory=list)
|
|
ram_after_transform_mb_per_worker: list[float] = field(default_factory=list)
|
|
total_ram_before_mb: float = 0.0
|
|
total_ram_after_mb: float = 0.0
|
|
average_ram_before_mb: float = 0.0
|
|
average_ram_after_mb: float = 0.0
|
|
|
|
# XSL-Kompilierungszeiten (nur für Saxon)
|
|
xsl_compilation_times: list[float] = field(default_factory=list)
|
|
total_xsl_compilation_time_seconds: float = 0.0
|
|
average_xsl_compilation_time_seconds: float = 0.0
|
|
|
|
def calculate_aggregates(self):
|
|
"""Berechnet aggregierte Werte (Summen, Durchschnitte)."""
|
|
# Worker-Start-Zeiten
|
|
if self.worker_start_times:
|
|
self.total_worker_start_time_seconds = sum(self.worker_start_times)
|
|
self.average_worker_start_time_seconds = self.total_worker_start_time_seconds / len(
|
|
self.worker_start_times
|
|
)
|
|
|
|
# RAM vor Transformation
|
|
if self.ram_before_transform_mb_per_worker:
|
|
self.total_ram_before_mb = sum(self.ram_before_transform_mb_per_worker)
|
|
self.average_ram_before_mb = self.total_ram_before_mb / len(self.ram_before_transform_mb_per_worker)
|
|
|
|
# RAM nach Transformation
|
|
if self.ram_after_transform_mb_per_worker:
|
|
self.total_ram_after_mb = sum(self.ram_after_transform_mb_per_worker)
|
|
self.average_ram_after_mb = self.total_ram_after_mb / len(self.ram_after_transform_mb_per_worker)
|
|
|
|
# XSL-Kompilierungszeiten
|
|
if self.xsl_compilation_times:
|
|
self.total_xsl_compilation_time_seconds = sum(self.xsl_compilation_times)
|
|
self.average_xsl_compilation_time_seconds = self.total_xsl_compilation_time_seconds / len(
|
|
self.xsl_compilation_times
|
|
)
|