fix(sre): separate controlled run outcomes

This commit is contained in:
Your Name
2026-07-19 03:34:10 +08:00
parent cf2049c974
commit 3b1a429419
3 changed files with 36 additions and 2 deletions

View File

@@ -130,7 +130,17 @@ _RUN_SUMMARY_SQL = text(
count(*) FILTER (WHERE state = 'completed')::int AS completed_runs,
count(*) FILTER (
WHERE state IN ('failed', 'cancelled', 'timeout')
)::int AS failed_runs
)::int AS failed_runs,
count(*) FILTER (
WHERE is_shadow IS FALSE
AND step_count > 0
AND state = 'completed'
)::int AS controlled_completed_runs,
count(*) FILTER (
WHERE is_shadow IS FALSE
AND step_count > 0
AND state IN ('failed', 'cancelled', 'timeout')
)::int AS controlled_failed_runs
FROM awooop_run_state
WHERE project_id = :project_id
AND created_at >= :window_start
@@ -335,6 +345,8 @@ def build_automation_slo_scorecard(
"controlled_runs_with_steps",
"completed_runs",
"failed_runs",
"controlled_completed_runs",
"controlled_failed_runs",
)
}
return {

View File

@@ -68,6 +68,8 @@ def test_scorecard_computes_all_required_metrics_and_provider_cost() -> None:
"controlled_runs_with_steps": 2,
"completed_runs": 4,
"failed_runs": 1,
"controlled_completed_runs": 1,
"controlled_failed_runs": 1,
},
provider_cost_rows=[
{
@@ -110,6 +112,9 @@ def test_scorecard_computes_all_required_metrics_and_provider_cost() -> None:
assert scorecard["coverage_blockers"] == []
assert len(scorecard["lane_scorecards"]) == 2
assert scorecard["runs"]["controlled_runs_with_steps"] == 2
assert scorecard["runs"]["completed_runs"] == 4
assert scorecard["runs"]["controlled_completed_runs"] == 1
assert scorecard["runs"]["controlled_failed_runs"] == 1
assert scorecard["provider_usage"] == {
"rows": [
{
@@ -168,6 +173,20 @@ def test_scorecard_does_not_false_green_missing_runtime_samples() -> None:
assert scorecard["provider_usage"]["cost_usd"] == "0.0000"
def test_run_query_excludes_shadow_and_no_step_runs_from_controlled_outcomes() -> None:
statement = " ".join(str(scorecard_module._RUN_SUMMARY_SQL).split())
assert (
"WHERE is_shadow IS FALSE AND step_count > 0 AND state = 'completed'"
in statement
)
assert (
"WHERE is_shadow IS FALSE AND step_count > 0 "
"AND state IN ('failed', 'cancelled', 'timeout')"
in statement
)
def test_scorecard_endpoint_is_project_scoped_and_read_only(monkeypatch) -> None:
readback = AsyncMock(
return_value={
@@ -230,6 +249,8 @@ async def test_runtime_reader_executes_only_three_bounded_read_queries(
"controlled_runs_with_steps": 1,
"completed_runs": 1,
"failed_runs": 0,
"controlled_completed_runs": 1,
"controlled_failed_runs": 0,
}
]
),
@@ -272,4 +293,5 @@ async def test_runtime_reader_executes_only_three_bounded_read_queries(
for keyword in (" INSERT ", " UPDATE ", " DELETE ", " ALTER ", " DROP ")
)
assert scorecard["metrics"]["mtta_seconds"] == 10.0
assert scorecard["runs"]["controlled_completed_runs"] == 1
assert scorecard["runtime_closed"] is False