import sys
import json
from datetime import datetime, timezone
def generate_summary(input_json, output_file):
with open(input_json) as f:
data = json.load(f)
lines = []
lines.append("=" * 70)
lines.append(" OpenViking Source Build & Performance Benchmark Report")
lines.append("=" * 70)
lines.append(f" Generated: {datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S UTC')}")
lines.append(f" Test Time: {data.get('test_time', data.get('timestamp', 'N/A'))}")
lines.append("")
env = data.get("environment", {})
if env:
lines.append(" --- Environment ---")
lines.append(f" Architecture: {env.get('architecture', 'N/A')}")
lines.append(f" Model: {env.get('Model', 'N/A')}")
lines.append(f" CPU Model: {env.get('cpu_model', 'N/A')}")
lines.append(f" CPU Cores: {env.get('cpu_cores', 'N/A')}")
lines.append(f" OpenViking Version: {env.get('software_version', 'N/A')}")
lines.append(f" Python Version: {env.get('python_version', 'N/A')}")
lines.append(f" GCC Version: {env.get('gcc_version', 'N/A')}")
lines.append(f" OS: {env.get('os', 'N/A')}")
lines.append(f" Kernel: {env.get('kernel', 'N/A')}")
lines.append("")
context = data.get("primary_benchmark", {})
if context:
lines.append(" --- Context Filesystem Benchmark (Primary) ---")
lines.append(f" Description: {context.get('description', 'N/A')}")
lines.append(f" Reference: {context.get('reference', 'N/A')}")
params = context.get("parameters", {})
lines.append(f" Iterations: {params.get('iterations', 'N/A')}")
lines.append(f" Data sizes: {params.get('data_sizes_bytes', 'N/A')}")
lines.append(f" Operations: {params.get('operations', 'N/A')}")
lines.append("")
rs = context.get("results_summary", {})
for key in ["small_1kb", "medium_64kb", "large_1mb"]:
if key in rs and isinstance(rs[key], dict):
lines.append(f" {key}:")
r = rs[key]
for k, v in r.items():
lines.append(f" {k}: {v}")
lines.append("")
if "write_ops_per_sec" in rs:
lines.append(f" Overall write ops/sec: {rs.get('write_ops_per_sec', 'N/A')}")
lines.append(f" Overall write latency: {rs.get('write_avg_latency_ms', 'N/A')} ms")
if "read_ops_per_sec" in rs:
lines.append(f" Overall read ops/sec: {rs.get('read_ops_per_sec', 'N/A')}")
lines.append(f" Overall read latency: {rs.get('read_avg_latency_ms', 'N/A')} ms")
micro = data.get("micro_benchmark", {})
if micro:
lines.append("")
lines.append(" --- Micro Benchmarks ---")
lines.append(f" Description: {micro.get('description', 'N/A')}")
mparams = micro.get("parameters", {})
lines.append(f" Iterations: {mparams.get('iterations', 'N/A')}")
lines.append(f" Data sizes: {mparams.get('data_sizes', 'N/A')}")
lines.append(f" Thread counts: {mparams.get('thread_counts', 'N/A')}")
lines.append("")
mresults = micro.get("results", {})
if isinstance(mresults, dict):
for test_name, res in mresults.items():
if isinstance(res, dict):
lines.append(f" {test_name}:")
for k, v in res.items():
if isinstance(v, dict):
lines.append(f" {k}:")
for kk, vv in v.items():
lines.append(f" {kk}: {vv}")
else:
lines.append(f" {k}: {v}")
lines.append("")
lines.append("=" * 70)
lines.append(" Report generated by OpenViking Source Build & Performance Benchmark Workflow")
lines.append("=" * 70)
summary = "\n".join(lines)
with open(output_file, "w") as f:
f.write(summary)
print(summary)
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: generate_summary.py <input_json> <output_file>")
sys.exit(1)
input_json = sys.argv[1]
output_file = sys.argv[2]
generate_summary(input_json, output_file)