# 审计修复报告 · 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_positions` → `attach_close_preview` → `fetch_option_book_depth` | | High | Soft 拉链 3 次重试 + 无单飞,易与 SSE tick 叠打 OKX | `options_panel.js` loadChain | | High | 中控账户接口每轮 `force=True` 绕过余额缓存 | Gate/OKX/Binance `_hub_account_bundle` | | Medium | Flask 超时错误只有 `error` 无 `msg`,前端易落默认文案 | `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,非真·实时