07.4.3.19.4 — Journal Runtime Standardization & Export Layer

This commit is contained in:
2026-05-10 15:26:49 +03:00
parent 1692cb4d81
commit 8024cd9d9a
13 changed files with 343 additions and 325 deletions

View File

@@ -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),