diff --git a/manual_trading_hub/hub.py b/manual_trading_hub/hub.py index 165f855..772fbb4 100644 --- a/manual_trading_hub/hub.py +++ b/manual_trading_hub/hub.py @@ -206,11 +206,21 @@ async def api_monitor_board(): snap = await _fetch_flask_json(client, ex, "/api/price_snapshot") if isinstance(snap, dict): key_prices = snap.get("key_prices") + flask_ok = isinstance(hub_mon, dict) and hub_mon.get("ok") is not False + flask_err = None + if isinstance(hub_mon, dict) and hub_mon.get("ok") is False: + flask_err = ( + hub_mon.get("msg") + or hub_mon.get("error") + or (str(hub_mon.get("text") or "")[:200] or None) + ) out.append( { **agent_row, "review_url": ex.get("review_url") or "", "hub_monitor": hub_mon, + "flask_ok": flask_ok, + "flask_error": flask_err, "meta": (meta or {}).get("meta") if isinstance(meta, dict) else meta, "key_prices": key_prices, } diff --git a/manual_trading_hub/static/app.js b/manual_trading_hub/static/app.js index 96902c3..75097f0 100644 --- a/manual_trading_hub/static/app.js +++ b/manual_trading_hub/static/app.js @@ -97,9 +97,10 @@ const ag = row.agent || {}; const pos = Array.isArray(ag.positions) ? ag.positions : []; const hm = row.hub_monitor || {}; - const keys = hm.keys || []; - const orders = hm.orders || []; - const trends = hm.trends || []; + const flaskOk = row.flask_ok !== false && hm.ok !== false; + const keys = flaskOk ? hm.keys || [] : []; + const orders = flaskOk ? hm.orders || [] : []; + const trends = flaskOk ? hm.trends || [] : []; const kmap = {}; (row.key_prices || []).forEach((k) => { kmap[k.id] = k; @@ -129,12 +130,26 @@ inner += `
+ 持仓/余额来自子代理;关键位、机器人单来自各实例 Flask(须 PM2 跑着 crypto_*)。 + 卡片右上角「交易复盘」= 打开该所交易记录页,不在中控里做复盘。 +