한투 호가 = 2번째 앱키 전용 키 없거나 start 실패 시 메인에 H0STASP0 안 붙임. 운영설정 WS_ORDERBOOK_SAVE_KIS 빨간 danger. LS RAM 합집합 후보∪보유∪영구∪grace. sync_targets와 split reconcile 둘 다. 틱 DB 영구 게이트는 그대로. 분봉 쓰레기 → 다음 소스 봉 통째 그 분 틱 0건이거나 전부 봉끝 대비 LIVE_FEED_FALLBACK_MAX_AGE_SEC 초과면 구멍. 메인 WS → 2차 → LS → REST → rollup. CANDLE_GARBAGE_FALLBACK 기본 true. 파일: feed_fallback.py(신규), ws_manager.py, kis_ws.py, candle_series.py, bt_candle_source.py, live_config_schema.py, database.py, 스모크, MD 2개. 같은 ws_manager/database/kis_ws/live_config에는 직전 커밋 이후 쌓여 있던 시세 폴백·ENV 키 정리도 같이 들어갔습니다. 파일 단위로 나눌 수 없어서입니다.
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""WS_PRICE_MAX_AGE_SEC 를 0(마지막 RAM)으로 맞춤. 스키마 확인 후 1회만."""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
|
|
from database import TradeDB
|
|
from kis_trader.utils.env import get_env_from_db, invalidate_merged_env_cache
|
|
|
|
|
|
def main() -> None:
|
|
db = TradeDB()
|
|
try:
|
|
cols = [
|
|
dict(r)["Field"]
|
|
for r in db.conn.execute("SHOW COLUMNS FROM env_config").fetchall()
|
|
]
|
|
print("env_config has WS_PRICE_MAX_AGE_SEC:", "WS_PRICE_MAX_AGE_SEC" in cols)
|
|
ext_cols = [
|
|
dict(r)["Field"]
|
|
for r in db.conn.execute("SHOW COLUMNS FROM env_config_ext").fetchall()
|
|
]
|
|
print("env_config_ext cols:", ext_cols)
|
|
before = get_env_from_db("WS_PRICE_MAX_AGE_SEC", "")
|
|
print("before get_env_from_db:", repr(before))
|
|
|
|
if "WS_PRICE_MAX_AGE_SEC" in cols:
|
|
db.conn.execute(
|
|
"UPDATE env_config SET WS_PRICE_MAX_AGE_SEC=%s",
|
|
("0",),
|
|
)
|
|
print("updated env_config.WS_PRICE_MAX_AGE_SEC=0")
|
|
db.conn.execute(
|
|
"INSERT INTO env_config_ext (env_key, env_value, updated_at) "
|
|
"VALUES (%s, %s, NOW()) "
|
|
"ON DUPLICATE KEY UPDATE env_value=VALUES(env_value), "
|
|
"updated_at=VALUES(updated_at)",
|
|
("WS_PRICE_MAX_AGE_SEC", "0"),
|
|
)
|
|
print("upsert env_config_ext WS_PRICE_MAX_AGE_SEC=0")
|
|
invalidate_merged_env_cache()
|
|
after = get_env_from_db("WS_PRICE_MAX_AGE_SEC", "")
|
|
print("after get_env_from_db:", repr(after))
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|