from __future__ import annotations import importlib.util import sys import unittest from pathlib import Path SCRIPT = Path(__file__).resolve().parents[1] / "scripts" / "summarize_runtime_request_profile.py" SPEC = importlib.util.spec_from_file_location("summarize_runtime_request_profile", SCRIPT) assert SPEC and SPEC.loader MODULE = importlib.util.module_from_spec(SPEC) sys.modules[SPEC.name] = MODULE SPEC.loader.exec_module(MODULE) class RuntimeRequestProfileTest(unittest.TestCase): def test_groups_bounded_request_events_without_sensitive_sql(self) -> None: lines = [ "2026-08-12T10:00:00Z INF event=runtime_flow_stage_timing request_id=req-1 stage=app-metadata elapsed_ms=40 status=success\n", '2026-08-12T10:00:01Z INF event=repo_sql_timing request_id=req-1 operation=Find read_source=Lead fields=149 rows=1 elapsed_ms=30 status=success sql="SELECT Secret FROM Lead" params="private"\n', "2026-08-12T10:00:02Z INF event=repo_sql_timing request_id=req-1 operation=Find read_source=Account fields=3 rows=1 elapsed_ms=20 status=success\n", "2026-08-12T10:00:03Z INF event=transaction_stage_timing request_id=req-2 operation=WithRetry stage=attempt.1 elapsed_ms=200 status=error\n", "2026-08-12T10:00:03Z INF event=flow_timing request_id=req-1 elapsed_ms=200 status=finished\n", "2026-08-12T10:00:03Z INF event=flow_record_lookup_cache request_id=req-1 status=singleflight_skip\n", ( "2026-08-12T10:00:03Z DBG event=runtime_record_mutation_phase_profile request_id=req-1 " "total_elapsed_ms=410 total_sql=22 total_sql_elapsed_ms=190 " "accept_calls=1 accept_sql=4 accept_sql_elapsed_ms=30 accept_elapsed_ms=45 " "prepare_calls=1 prepare_sql=3 prepare_sql_elapsed_ms=20 prepare_elapsed_ms=35 " "business_effect_calls=1 business_effect_sql=15 business_effect_sql_elapsed_ms=140 business_effect_elapsed_ms=300\n" ), "2026-08-12T10:00:04Z INF event=repo_sql_timing request_id= operation=Find elapsed_ms=10\n", ] summary = MODULE.summarize(MODULE.events(lines)) self.assertEqual(summary["event_count"], 8) self.assertEqual(summary["correlated_event_count"], 7) self.assertEqual(summary["uncorrelated_event_count"], 1) self.assertEqual(summary["request_count"], 2) request = next(row for row in summary["requests"] if row["request_id"] == "req-1") self.assertEqual(request["observed_event_span_ms"], 3000) self.assertEqual(request["sql"]["count"], 2) self.assertEqual(request["sql"]["elapsed_sum_ms"], 50) self.assertEqual(request["sql"]["fields_max"], 149) self.assertEqual( [{ "name": "Find", "count": 2, "elapsed_sum_ms": 50.0, "elapsed_max_ms": 30.0, }], request["sql"]["top_operations_by_elapsed"], ) self.assertEqual( ["Lead", "Account"], [row["name"] for row in request["sql"]["top_sources_by_elapsed"]], ) self.assertEqual(request["failures"], []) flow_family = next( row for row in request["families"] if row["event"] == "flow_timing" ) self.assertEqual(200.0, flow_family["top_dimensions_by_elapsed"][0]["elapsed_sum_ms"]) mutation_family = next( row for row in request["families"] if row["event"] == "runtime_record_mutation_phase_profile" ) self.assertEqual(410.0, mutation_family["elapsed_sum_ms"]) self.assertEqual(410.0, request["mutation"]["total_elapsed_ms"]) self.assertEqual(22, request["mutation"]["total_sql"]) self.assertEqual( {"phase": "accept", "calls": 1, "sql": 4, "sql_elapsed_ms": 30.0, "elapsed_ms": 45.0}, request["mutation"]["phases"][0], ) failed_request = next(row for row in summary["requests"] if row["request_id"] == "req-2") self.assertEqual(failed_request["failures"][0]["count"], 1) encoded = str(summary) self.assertNotIn("Secret", encoded) self.assertNotIn("private", encoded) markdown = MODULE.markdown(summary) self.assertIn("Find (50.0ms)", markdown) def test_rejects_unbounded_or_ambiguous_request_identity(self) -> None: lines = [ "2026-08-12T10:00:00Z INF event=repo_sql_timing request_id=bad/id elapsed_ms=1\n", f"2026-08-12T10:00:01Z INF event=repo_sql_timing request_id={'a' * 129} elapsed_ms=1\n", ] summary = MODULE.summarize(MODULE.events(lines)) self.assertEqual(summary["request_count"], 0) self.assertEqual(summary["uncorrelated_event_count"], 2) if __name__ == "__main__": unittest.main()