07.4.3.19.4 — Journal Runtime Standardization & Export Layer
This commit is contained in:
@@ -46,13 +46,6 @@ class MarketDataRunner:
|
||||
existing.screen = screen
|
||||
existing.action = action
|
||||
existing.runtime_label = runtime_label
|
||||
|
||||
cls._log_info(
|
||||
existing,
|
||||
"market_runner_context_updated",
|
||||
"MarketDataRunner context updated.",
|
||||
{"interval_seconds": interval_seconds},
|
||||
)
|
||||
return
|
||||
|
||||
context = MarketRuntimeContext(
|
||||
@@ -69,8 +62,8 @@ class MarketDataRunner:
|
||||
|
||||
cls._log_info(
|
||||
context,
|
||||
"market_runner_started",
|
||||
"MarketDataRunner started.",
|
||||
"market_monitor_started",
|
||||
"Мониторинг рынка запущен.",
|
||||
{"interval_seconds": interval_seconds},
|
||||
)
|
||||
|
||||
@@ -93,8 +86,8 @@ class MarketDataRunner:
|
||||
|
||||
cls._log_info(
|
||||
context,
|
||||
"market_runner_stopped",
|
||||
"MarketDataRunner stopped.",
|
||||
"market_monitor_stopped",
|
||||
"Мониторинг рынка остановлен.",
|
||||
)
|
||||
|
||||
cls._runtimes.pop(runtime_key, None)
|
||||
@@ -107,11 +100,6 @@ class MarketDataRunner:
|
||||
symbol = context.symbol_provider()
|
||||
|
||||
if not symbol:
|
||||
cls._log_warning(
|
||||
context,
|
||||
"market_runner_no_symbol",
|
||||
"MarketDataRunner has no symbol.",
|
||||
)
|
||||
await asyncio.sleep(context.interval_seconds)
|
||||
continue
|
||||
|
||||
@@ -129,8 +117,8 @@ class MarketDataRunner:
|
||||
|
||||
cls._log_info(
|
||||
context,
|
||||
"market_runner_symbol_changed",
|
||||
"MarketDataRunner symbol changed.",
|
||||
"market_symbol_changed",
|
||||
f"Инструмент автоторговли изменён на {cache_symbol}.",
|
||||
{
|
||||
"symbol": symbol,
|
||||
"cache_symbol": cache_symbol,
|
||||
@@ -143,10 +131,10 @@ class MarketDataRunner:
|
||||
except asyncio.CancelledError:
|
||||
raise
|
||||
except Exception as exc:
|
||||
cls._log_error(
|
||||
cls._log_warning(
|
||||
context,
|
||||
"market_ws_error_fallback",
|
||||
"WebSocket market data failed. Falling back to REST.",
|
||||
"market_stream_disconnected",
|
||||
"Поток рыночных данных отключён. Используется резервный REST-режим.",
|
||||
{
|
||||
"symbol": symbol,
|
||||
"cache_symbol": cache_symbol,
|
||||
@@ -165,17 +153,6 @@ class MarketDataRunner:
|
||||
cache_symbol = cls._cache_symbol(symbol)
|
||||
ws_symbol = cls._ws_symbol(symbol)
|
||||
|
||||
cls._log_info(
|
||||
context,
|
||||
"market_ws_connecting",
|
||||
"Connecting market WebSocket.",
|
||||
{
|
||||
"requested_symbol": symbol,
|
||||
"cache_symbol": cache_symbol,
|
||||
"ws_symbol": ws_symbol,
|
||||
},
|
||||
)
|
||||
|
||||
payload_count = 0
|
||||
|
||||
async for payload in ExchangeWebSocketClient().stream_depth(
|
||||
@@ -185,8 +162,8 @@ class MarketDataRunner:
|
||||
if payload_count == 0:
|
||||
cls._log_info(
|
||||
context,
|
||||
"market_ws_connected",
|
||||
"Market WebSocket connected and first payload received.",
|
||||
"market_stream_connected",
|
||||
"Поток рыночных данных подключён.",
|
||||
{
|
||||
"requested_symbol": symbol,
|
||||
"cache_symbol": cache_symbol,
|
||||
@@ -200,33 +177,12 @@ class MarketDataRunner:
|
||||
|
||||
current_symbol = context.symbol_provider()
|
||||
if current_symbol and current_symbol != symbol:
|
||||
cls._log_info(
|
||||
context,
|
||||
"market_ws_symbol_switch",
|
||||
"Market WebSocket stopped because symbol changed.",
|
||||
{
|
||||
"old_symbol": symbol,
|
||||
"new_symbol": current_symbol,
|
||||
},
|
||||
)
|
||||
break
|
||||
|
||||
best_bid = cls._extract_best_price(payload, "bids")
|
||||
best_ask = cls._extract_best_price(payload, "asks")
|
||||
|
||||
if best_bid is None or best_ask is None:
|
||||
cls._log_warning(
|
||||
context,
|
||||
"market_ws_payload_unrecognized",
|
||||
"Market WebSocket payload does not contain recognizable bids/asks.",
|
||||
{
|
||||
"requested_symbol": symbol,
|
||||
"cache_symbol": cache_symbol,
|
||||
"ws_symbol": ws_symbol,
|
||||
"payload_keys": list(payload.keys()),
|
||||
"payload_preview": cls._safe_payload_preview(payload),
|
||||
},
|
||||
)
|
||||
continue
|
||||
|
||||
MarketPriceCache.set_price(
|
||||
@@ -241,30 +197,16 @@ class MarketDataRunner:
|
||||
@classmethod
|
||||
async def _rest_fallback_once(cls, context: MarketRuntimeContext, symbol: str) -> None:
|
||||
try:
|
||||
snapshot = await asyncio.to_thread(
|
||||
await asyncio.to_thread(
|
||||
ExchangeService().refresh_market_snapshot_cache,
|
||||
symbol,
|
||||
runtime_key=context.runtime_key,
|
||||
)
|
||||
|
||||
cls._log_warning(
|
||||
context,
|
||||
"market_rest_fallback_success",
|
||||
"REST fallback market snapshot loaded.",
|
||||
{
|
||||
"symbol": symbol,
|
||||
"snapshot_symbol": snapshot.get("symbol"),
|
||||
"source": snapshot.get("source"),
|
||||
"last_price": snapshot.get("last_price"),
|
||||
"bid_price": snapshot.get("bid_price"),
|
||||
"ask_price": snapshot.get("ask_price"),
|
||||
},
|
||||
)
|
||||
except Exception as exc:
|
||||
cls._log_error(
|
||||
context,
|
||||
"market_rest_fallback_error",
|
||||
"REST fallback market snapshot failed.",
|
||||
"market_stream_disconnected",
|
||||
"Поток рыночных данных отключён. Резервный REST-режим недоступен.",
|
||||
{
|
||||
"symbol": symbol,
|
||||
"error": str(exc),
|
||||
|
||||
Reference in New Issue
Block a user