fix(sre): separate controlled run outcomes
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user