Fix control status: do not treat /health as fleet (missing positions).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-30 13:36:21 +08:00
parent b3ba0fd431
commit 3c2589f653
2 changed files with 17 additions and 10 deletions
+4 -8
View File
@@ -51,10 +51,6 @@ def _raise_node_error(code: int, data: Any) -> None:
)
def _health_looks_like_fleet(health: Any) -> bool:
return isinstance(health, dict) and "strategy" in health and "mode" in health
async def _collect_one_status(
node: dict[str, Any],
*,
@@ -63,10 +59,10 @@ async def _collect_one_status(
probe = await probe_health(node, timeout=timeout)
item: dict[str, Any] = {**_public_node(node), **probe}
if probe.get("online") and node.get("token_sealed"):
health = probe.get("health")
# probe_health 在 /health 失败时可能已用 fleet/status 回填到 health
if _health_looks_like_fleet(health):
code, data = 200, health
# /health 也有 mode+strategy,但不能当 fleet(无持仓详情)。
# 仅当 probe 已用 fleet 回退时复用,否则必须再拉 /api/fleet/status
if probe.get("from_fleet") and isinstance(probe.get("health"), dict):
code, data = 200, probe["health"]
else:
code, data = await call_node(
node, "GET", "/api/fleet/status", timeout=timeout