feat(us-024): enhanced availability map with per-node health details
Coverage endpoint now skips node purge so dead nodes remain visible. Each band in /v1/coverage/<model> includes a `nodes` array with per-node health: alive status, last_seen_seconds_ago, heartbeat_success_rate, inference_success_rate, queue_depth, uptime_seconds, and endpoint. Updated tests to assert new band structure. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -243,10 +243,24 @@ def test_tracker_coverage_endpoint_reports_uncovered_ranges():
|
||||
)
|
||||
|
||||
coverage_resp = _get_json(f"http://127.0.0.1:{tracker_port}/v1/coverage/tiny-model")
|
||||
assert coverage_resp["coverage"] == [
|
||||
{"start_layer": 0, "end_layer": 2, "node_count": 1},
|
||||
{"start_layer": 3, "end_layer": 5, "node_count": 0},
|
||||
]
|
||||
bands = coverage_resp["coverage"]
|
||||
assert len(bands) == 2
|
||||
# Covered band: layers 0-2, one node
|
||||
assert bands[0]["start_layer"] == 0
|
||||
assert bands[0]["end_layer"] == 2
|
||||
assert bands[0]["node_count"] == 1
|
||||
assert len(bands[0]["nodes"]) == 1
|
||||
node_info = bands[0]["nodes"][0]
|
||||
assert node_info["endpoint"] == "http://127.0.0.1:9001"
|
||||
assert node_info["alive"] is True
|
||||
assert "last_seen_seconds_ago" in node_info
|
||||
assert "heartbeat_success_rate" in node_info
|
||||
assert "inference_success_rate" in node_info
|
||||
# Gap band: layers 3-5, no nodes
|
||||
assert bands[1]["start_layer"] == 3
|
||||
assert bands[1]["end_layer"] == 5
|
||||
assert bands[1]["node_count"] == 0
|
||||
assert bands[1]["nodes"] == []
|
||||
|
||||
try:
|
||||
_get_json(f"http://127.0.0.1:{tracker_port}/v1/route?model=tiny-model")
|
||||
@@ -283,11 +297,12 @@ def test_tracker_coverage_endpoint_accepts_registered_hf_repo_or_short_name():
|
||||
)
|
||||
|
||||
assert by_repo["model"] == "Qwen/Qwen2.5-0.5B-Instruct"
|
||||
assert by_repo["coverage"] == [
|
||||
{"start_layer": 0, "end_layer": 19, "node_count": 1},
|
||||
{"start_layer": 20, "end_layer": 21, "node_count": 2},
|
||||
{"start_layer": 22, "end_layer": 23, "node_count": 1},
|
||||
]
|
||||
bands = by_repo["coverage"]
|
||||
assert len(bands) == 3
|
||||
assert bands[0]["start_layer"] == 0 and bands[0]["end_layer"] == 19 and bands[0]["node_count"] == 1
|
||||
assert bands[1]["start_layer"] == 20 and bands[1]["end_layer"] == 21 and bands[1]["node_count"] == 2
|
||||
assert bands[2]["start_layer"] == 22 and bands[2]["end_layer"] == 23 and bands[2]["node_count"] == 1
|
||||
assert all("nodes" in b for b in bands)
|
||||
assert by_short_name["coverage"] == by_repo["coverage"]
|
||||
finally:
|
||||
tracker.stop()
|
||||
|
||||
Reference in New Issue
Block a user