fix(ws): KIS/키움 WS·조건검색 안정화 및 매도시세 폴백
WS 매니저 spill·조건검색 CNSR 회복·kiwoom_ws_diag 진단 경로를 보강한다. live_sell_price stale RAM/REST 폴백 정합을 유지한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -49,6 +49,7 @@ from typing import Any, Dict, List, Optional, Set
|
||||
from .condition_manager import ConditionSearchManager
|
||||
from ..utils.env import get_env_bool, get_env_float, get_env_from_db, get_env_int
|
||||
from ..utils.logger import get_logger
|
||||
from ..ws.kiwoom_ws_diag import log_kiwoom_api_msg, log_kiwoom_ws
|
||||
from ..ws.kis_ws import _get_kiwoom_token_cached
|
||||
|
||||
logger = get_logger("kis_trader.kwcond")
|
||||
@@ -350,19 +351,26 @@ class KiwoomConditionSearchManager(ConditionSearchManager):
|
||||
ev.set()
|
||||
|
||||
def _on_shared_trnm(self, ws, msg: dict) -> None:
|
||||
trnm = msg.get("trnm")
|
||||
trnm = str(msg.get("trnm") or "")
|
||||
log_kiwoom_api_msg(logger, trnm or "?", msg, prefix="조건검색")
|
||||
if trnm == "CNSRLST":
|
||||
self._handle_condition_list(ws, msg.get("data") or [])
|
||||
elif trnm == "CNSRREQ":
|
||||
self._handle_cnsrreq(msg)
|
||||
elif trnm == "CNSRCLR":
|
||||
seq_val = _extract_cnsr_seq(msg)
|
||||
logger.debug(
|
||||
"키움 조건검색 CNSRCLR 응답: seq=%s rc=%s msg=%s",
|
||||
seq_val,
|
||||
msg.get("return_code"),
|
||||
msg.get("return_msg"),
|
||||
)
|
||||
rc = msg.get("return_code")
|
||||
rm = msg.get("return_msg")
|
||||
if str(rc or "").strip() not in ("0", "0.0", ""):
|
||||
logger.warning(
|
||||
"키움 CNSRCLR 실패 seq=%s rc=%s msg=%s",
|
||||
seq_val, rc, rm,
|
||||
)
|
||||
else:
|
||||
logger.info(
|
||||
"키움 CNSRCLR OK seq=%s rc=%s msg=%s",
|
||||
seq_val, rc, rm,
|
||||
)
|
||||
self._trigger_cnsrclr_ack(seq_val)
|
||||
|
||||
def _on_shared_real(self, ws, msg: dict) -> None:
|
||||
@@ -592,6 +600,13 @@ class KiwoomConditionSearchManager(ConditionSearchManager):
|
||||
ws.send(json.dumps(payload))
|
||||
return True
|
||||
except Exception as e:
|
||||
log_kiwoom_ws(
|
||||
logger, "cnsrreq_send_fail",
|
||||
level="warning",
|
||||
trnm="CNSRREQ",
|
||||
extra=f"seq={seq} err={e}",
|
||||
force=True,
|
||||
)
|
||||
logger.warning("키움 CNSRREQ 발송 실패 (seq=%s): %s", seq, e)
|
||||
return False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user