from __future__ import annotations
import argparse
import json
from pathlib import Path
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("report", type=Path)
args = parser.parse_args()
report = json.loads(args.report.read_text(encoding="utf-8"))
checks = {
"startup p95": (report["startup"]["p95_ms"], 250),
"500-component plan p95": (report["plan_500_components"]["p95_ms"], 1000),
"100-component plan p95": (report["standard_plan_100"]["p95_ms"], 500),
}
pressure = report["high_output_command"]
if pressure.get("supported"):
checks["16 MiB output peak RSS KiB"] = (pressure["process_tree_peak_rss_kib"], 131072)
cancellation = report["cancellation"]
if cancellation.get("supported"):
checks["cancellation latency"] = (cancellation["latency_ms"], 1000)
failures = []
for name, (actual, maximum) in checks.items():
print(f"{name}: {actual} <= {maximum}")
if actual > maximum:
failures.append(f"{name} exceeded budget: {actual} > {maximum}")
if failures:
raise SystemExit("\n".join(failures))
return 0
if __name__ == "__main__":
raise SystemExit(main())