Skip to main content

sub_acc_push

Function sub_acc_push 

Source
pub async fn sub_acc_push(
    __arg0: State<RestState>,
    rec: Option<Extension<Arc<KeyRecord>>>,
    __arg2: Json<Value>,
) -> Result<Json<Value>, (StatusCode, Json<Value>)>
Expand description

v1.4.90 P1-C 修:POST /api/sub-acc-push — 订阅交易账户 push(订单 / 成交变动)

历史背景(外部 tester v1.4.69-89 报告 6 版 silent stub):

  • 老版 handler 是单 proto_request 透传 wrapper,无 input validation、 无 audit log、无 session_id token —— 用户 POST 后 daemon log 看不到任何 “本 endpoint 被调用过” 的痕迹(仅 gateway 侧 SubAccPushHandler 默默更 新 SubscriptionManager.subscribe_trd_acc(conn_id, acc_id)), “ret=0 + s2c={}” 看似成功但下游全无可观测信号。

本次 (v1.4.90 P1-C) 对齐 MCP futu_sub_acc_push

  1. Loud input validation(acc_id_list 必须非空 + 每个 id 非零;C++ IAPIServer_Trd_SubAccPush::OnClientReq_SubAccPush 等价 check)
  2. Audit log tracing::info! 留 endpoint + count + 头几个 acc_id 痕迹, 给 push_health 看不到的部分提供可观测性
  3. Backend CMD forward 经 proto_request(即 dispatch 到 gateway SubAccPushHandler 完成 SubscriptionManager 注册 + return ret=0)
  4. Response augment:在标准 proto Response (ret_type/s2c{}) 上补 subscribed_acc_ids + session_id + unsub_hint,对齐 MCP {ok, subscribed_acc_ids, session_id, unsub_hint} 输出形状。 REST stateless,session_id 用 sorted acc_ids hash 派生(确定性 token, 可拿来 POST /api/unsub-acc-push

架构说明:本 daemon 内 gateway local SubAccPushHandler 即对齐 C++ APIServer 的 Trd_SubAccPush 处理点 —— 没有“再下一层 backend“ 的 CMD 需要 forward。MCP 通过 TCP client.request(TRD_SUB_ACC_PUSH) 也是落到同一个 gateway handler。所以 “CMD forward” 的语义是 REST → proto_requestRequestRouter::dispatchSubAccPushHandler