feat(metrics): distinguish received and acknowledged CDRs
This commit is contained in:
@@ -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')}")
|
||||
|
||||
Reference in New Issue
Block a user