Files
2026-02-12 14:18:53 +03:00

50 lines
1.7 KiB
Python

__all__ = ["ReleaseGenerator"]
import json
import shutil
from pathlib import Path
from ..benchmarks.core.models import BenchmarkGroupResult
from .diagram_generator import DiagramGenerator
class ReleaseGenerator:
def __init__(self, lib_version: str) -> None:
self.lib_version = lib_version
self.output_dir = Path("metrics/reports/releases") / lib_version
def generate_release(self, benchmark_groups: list[BenchmarkGroupResult]) -> Path:
if self.output_dir.exists():
shutil.rmtree(self.output_dir)
self.output_dir.mkdir(parents=True, exist_ok=True)
for benchmark_group in benchmark_groups:
type_dir = self.output_dir / benchmark_group.type_
type_dir.mkdir(exist_ok=True)
diagram_generator = DiagramGenerator(type_dir)
diagram_generator.generate_comparison_diagram(benchmark_group)
json_data = {
"type": benchmark_group.type_,
"iterations": benchmark_group.iterations,
"gc_disabled": benchmark_group.is_gc_disabled,
"benchmarks": [
{
"name": br.name,
"description": br.description,
"avg_time": br.avg_time,
"median_time": br.median_time,
"std_dev": br.std_dev,
}
for br in benchmark_group.benchmark_results
],
}
json_path = type_dir / f"{benchmark_group.type_}.json"
with open(json_path, "w", encoding="utf-8") as f:
json.dump(json_data, f, indent=2, ensure_ascii=False)
return self.output_dir