Files
xsl-validator/src/worker_metrics.py
T

63 lines
2.4 KiB
Python
Raw Normal View History

"""
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
)