feat(ledger): quiet idle outbox polling
This commit is contained in:
@@ -207,6 +207,66 @@ def test_spy_true_no_watchdog_update():
|
||||
assert watchdog.last_seen(sid) is None # still not updated (spy=True)
|
||||
|
||||
|
||||
def test_spy_response_exposes_ledger_outbox_metrics():
|
||||
class _MetricsReader:
|
||||
def metrics_snapshot(self):
|
||||
return {
|
||||
"available": True,
|
||||
"scope": "process_lifetime",
|
||||
"instance_key": "default",
|
||||
"claims": {
|
||||
"empty_polls_total": 7,
|
||||
"claimed_batches_total": 1,
|
||||
"unavailable_total": 0,
|
||||
"lost_total": 0,
|
||||
"foreign_instance_total": 0,
|
||||
},
|
||||
"outcomes": {
|
||||
"completed_total": 1,
|
||||
"duplicate_completed_total": 0,
|
||||
"retryable_failure_total": 0,
|
||||
"conflict_blocked_total": 0,
|
||||
"permanent_failure_total": 0,
|
||||
"dead_lettered_total": 0,
|
||||
},
|
||||
}
|
||||
|
||||
repo, *_ = _wire()
|
||||
handler = make_slots_rpc_handler(
|
||||
repo,
|
||||
ledger_outbox_metrics_reader=_MetricsReader(),
|
||||
)
|
||||
|
||||
spy_payload = handler(_req(spy=True)).payload
|
||||
strategy_payload = handler(_req(spy=False)).payload
|
||||
|
||||
assert spy_payload["ledger_outbox_metrics"]["claims"]["empty_polls_total"] == 7
|
||||
assert "ledger_outbox_metrics" not in strategy_payload
|
||||
|
||||
|
||||
def test_spy_response_reports_metrics_unavailable_without_failing_slots():
|
||||
class _FailingReader:
|
||||
def metrics_snapshot(self):
|
||||
raise RuntimeError("SECRET_METRICS_READER_FAILURE")
|
||||
|
||||
repo, *_ = _wire()
|
||||
for reader in (None, _FailingReader()):
|
||||
handler = make_slots_rpc_handler(
|
||||
repo,
|
||||
instance_key="default",
|
||||
ledger_outbox_metrics_reader=reader,
|
||||
)
|
||||
payload = handler(_req(spy=True)).payload
|
||||
|
||||
assert len(payload["slots"]) == 2
|
||||
assert payload["ledger_outbox_metrics"] == {
|
||||
"available": False,
|
||||
"scope": "process_lifetime",
|
||||
"instance_key": "default",
|
||||
"reason": "ledger_outbox_metrics_unavailable",
|
||||
}
|
||||
|
||||
|
||||
# REQ-073 AC-4: spy=False (default) → holding watchdog updated
|
||||
def test_spy_false_updates_watchdog():
|
||||
repo, svc, _, _, watchdog, handler = _wire()
|
||||
|
||||
Reference in New Issue
Block a user