Files
crypto_monitor/docs/审计修复报告-WS回滚与中控可用-2026-08-11-R1.md
T
dekun bab42b1b53 fix(hub): restore pre-WS quote path and relieve Gate/account contention
Two audit rounds after WS rollback: lighten hub options snapshot, cache hub balances without extra fetch_balance, soft-poll single-flight, and document fixes in R1/R2 reports.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 12:30:27 +08:00

2.7 KiB

审计修复报告 · WS 回滚与中控可用性(2026-08-11 · 第 1 轮)

背景

期权链接入 OKX WS 推送后,生产中控出现「期权数据不可用 / 子代理不可用」。按要求先回滚 WS 链路,再全量审计并修复。

回滚

提交 说明
a488e2f Revert fast-path(依赖 WS 热缓存)
d592632 Revert OKX WS + SSE 推送整栈

恢复为 REST 拉链 + 前端约 15s soft-poll(commit 24bb853 行为),删除:

  • lib/exchange/okx_public_ws_lib.py
  • lib/options/options_quote_live_lib.py
  • tests/test_options_quote_live_lib.py

根因结论(非仅 WS)

级别 问题 证据
Critical Gate 关键位 RS 监控在后台线程高频 fetch_ohlcv,与 /api/hub/account 争用同一 ccxt 客户端,账户/子代理超时 日志 [key_rs_level_alert] BTC/USDT id=13;本机 5000/api/hub/account 25s 超时
Critical 中控期权快照对每仓拉 books 深度,易超 HUB_FLASK_TIMEOUT=10 build_display_option_positionsattach_close_previewfetch_option_book_depth
High Soft 拉链 3 次重试 + 无单飞,易与 SSE tick 叠打 OKX options_panel.js loadChain
High 中控账户接口每轮 force=True 绕过余额缓存 Gate/OKX/Binance _hub_account_bundle
Medium Flask 超时错误只有 errormsg,前端易落默认文案 hub.py _fetch_flask_json
Medium options 为 null 时前端当成「0 仓」而非不可用 app.js renderOptionsSectionBody

WS 部署触发的全进程重启放大了 Gate 争用与快照超时,表现为「全不可用」;OKX 快照在轻负载下仍可 ok:true

本轮修复

  1. Hub 期权快照关闭逐仓 close_preview/books(with_close_preview=False)
  2. Hub 账户三所改为 get_exchange_capitals(force=False)
  3. Gate ccxt 增加 timeout=8000ms;RS K 线 45s 缓存
  4. 期权 tickers 恢复 10s 短缓存(无 WS)
  5. 前端 soft 拉链:单飞 + soft 仅 1 次尝试;已有链不先清空表格
  6. Hub:超时补 msg;期权快照与 account/monitor 并行 gather
  7. 中控 UI:capabilities 含 options 且 snapshot 缺失时显式「期权数据不可用」

测试建议

  • 强刷中控监控区:OKX 期权资金/持仓应恢复;Gate 子代理 status 应在数秒内恢复
  • 期权页「刷新链」不应长时间白屏;指数行显示约 15s 静默刷新
  • Gate 关键位监控日志不应再每秒刷屏 fetch_ohlcv 失败

残留风险(交第 2 轮)

  • Gate 仍与监控共用单一 ccxt 客户端(未加全局锁)
  • 中控 board 仍可能被最慢交易所拉长整轮等待
  • Soft-poll 仍是 REST,非真·实时