feat(metrics): distinguish received and acknowledged CDRs

This commit is contained in:
2026-09-20 10:40:24 +03:30
parent 6ce567646b
commit f45c457dc8
5 changed files with 63 additions and 8 deletions

View File

@@ -153,6 +153,7 @@ def stats_snapshot(stats_url: str) -> Optional[Dict[str, Any]]:
dlq = breakdown.get("dlq_by_reason", {}) if isinstance(breakdown.get("dlq_by_reason"), dict) else {}
return {
"total_received": int(pipeline.get("total_received", 0) or 0),
"total_acknowledged": int(pipeline.get("total_acknowledged", 0) or 0),
"total_processed": int(pipeline.get("total_processed", 0) or 0),
"total_dlq": int(pipeline.get("total_dlq", 0) or 0),
"in_flight_buffer": int(pipeline.get("in_flight_buffer", 0) or 0),
@@ -164,6 +165,19 @@ def delta(after: int, before: int) -> int:
return after - before
def assessment_metrics_match(before: Dict[str, Any], after: Dict[str, Any]) -> bool:
expected_deltas = {
"total_received": 1570,
"total_acknowledged": 1540,
"total_processed": 1520,
"total_dlq": 50,
}
return all(
delta(int(after.get(name, 0)), int(before.get(name, 0))) == expected
for name, expected in expected_deltas.items()
)
def dlq_reason_delta(
before: Optional[Dict[str, Any]], after: Optional[Dict[str, Any]], reason: str
) -> Optional[int]:
@@ -522,11 +536,12 @@ def run_verification(
f"verified={dlq_verified}; records={len(dlq_records)}/50; reasons={dict(reasons)}"))
metrics_ok = False
if baseline_stats is not None and final_stats is not None:
expected_dlq_metric = 50
metrics_ok = (delta(final_stats["total_received"], baseline_stats["total_received"]) == 1540
and delta(final_stats["total_processed"], baseline_stats["total_processed"]) == 1520
and delta(final_stats["total_dlq"], baseline_stats["total_dlq"]) == expected_dlq_metric)
results.append(ScenarioResult("Acknowledged metrics", metrics_ok, f"received=1540; processed=1520; DLQ=50 expected"))
metrics_ok = assessment_metrics_match(baseline_stats, final_stats)
results.append(ScenarioResult(
"Pipeline metrics",
metrics_ok,
"received=1570; acknowledged=1540; processed=1520; DLQ=50 expected",
))
storage_ok, storage_detail = verify_normalized_rows(clickhouse_url, run_prefix, valid_payloads + burst_payloads)
results.append(ScenarioResult("Normalized storage", storage_ok, storage_detail))
print("=== Assessment Verification Summary ===")
@@ -537,6 +552,7 @@ def run_verification(
if baseline_stats is not None and final_stats is not None:
print(f"/stats received delta: {delta(final_stats['total_received'], baseline_stats['total_received'])}")
print(f"/stats acknowledged delta: {delta(final_stats['total_acknowledged'], baseline_stats['total_acknowledged'])}")
print(f"/stats processed delta: {delta(final_stats['total_processed'], baseline_stats['total_processed'])}")
print(f"/stats DLQ delta: {delta(final_stats['total_dlq'], baseline_stats['total_dlq'])} (expected 50)")
print(f"/stats in-flight buffer: {final_stats.get('in_flight_buffer', 'n/a')}")