Prewarm terminal scan payload
This commit is contained in:
@@ -2298,6 +2298,32 @@ def test_scan_terminal_timeout_does_not_replace_better_cached_snapshot(monkeypat
|
|||||||
assert [row["id"] for row in cached["rows"]] == ["old-1", "old-2"]
|
assert [row["id"] for row in cached["rows"]] == ["old-1", "old-2"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_scan_terminal_prewarm_builds_default_terminal_payload(monkeypatch):
|
||||||
|
calls = []
|
||||||
|
|
||||||
|
def _fake_build(filters, *, force_refresh=False):
|
||||||
|
calls.append((dict(filters), force_refresh))
|
||||||
|
return {"rows": []}
|
||||||
|
|
||||||
|
monkeypatch.setattr(
|
||||||
|
scan_terminal_service,
|
||||||
|
"_build_scan_terminal_payload_uncached",
|
||||||
|
_fake_build,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert scan_terminal_service._warm_scan_terminal_payloads() == 1
|
||||||
|
filters, force_refresh = calls[0]
|
||||||
|
assert force_refresh is False
|
||||||
|
assert filters["scan_mode"] == "tradable"
|
||||||
|
assert filters["min_price"] == 0.05
|
||||||
|
assert filters["max_price"] == 0.95
|
||||||
|
assert filters["min_edge_pct"] == 2.0
|
||||||
|
assert filters["min_liquidity"] == 500.0
|
||||||
|
assert filters["market_type"] == "maxtemp"
|
||||||
|
assert filters["time_range"] == "today"
|
||||||
|
assert filters["limit"] == 180
|
||||||
|
|
||||||
|
|
||||||
def test_scan_terminal_service_returns_failed_without_success_snapshot(monkeypatch):
|
def test_scan_terminal_service_returns_failed_without_success_snapshot(monkeypatch):
|
||||||
filters = {"scan_mode": "tradable", "limit": 5}
|
filters = {"scan_mode": "tradable", "limit": 5}
|
||||||
scan_terminal_cache._SCAN_TERMINAL_CACHE.clear()
|
scan_terminal_cache._SCAN_TERMINAL_CACHE.clear()
|
||||||
|
|||||||
@@ -336,6 +336,36 @@ def build_scan_terminal_payload(
|
|||||||
|
|
||||||
_SCAN_PREWARM_STARTED = False
|
_SCAN_PREWARM_STARTED = False
|
||||||
_SCAN_PREWARM_LOCK = threading.Lock()
|
_SCAN_PREWARM_LOCK = threading.Lock()
|
||||||
|
_SCAN_TERMINAL_PREWARM_RAW_FILTERS = [
|
||||||
|
{
|
||||||
|
"scan_mode": "tradable",
|
||||||
|
"min_price": 0.05,
|
||||||
|
"max_price": 0.95,
|
||||||
|
"min_edge_pct": 2,
|
||||||
|
"min_liquidity": 500,
|
||||||
|
"market_type": "maxtemp",
|
||||||
|
"time_range": "today",
|
||||||
|
"limit": 180,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _scan_terminal_prewarm_filters() -> List[Dict[str, Any]]:
|
||||||
|
return [
|
||||||
|
_normalize_scan_terminal_filters(filters)
|
||||||
|
for filters in _SCAN_TERMINAL_PREWARM_RAW_FILTERS
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _warm_scan_terminal_payloads() -> int:
|
||||||
|
ok = 0
|
||||||
|
for filters in _scan_terminal_prewarm_filters():
|
||||||
|
try:
|
||||||
|
_build_scan_terminal_payload_uncached(filters, force_refresh=False)
|
||||||
|
ok += 1
|
||||||
|
except Exception as exc:
|
||||||
|
logger.warning("scan terminal payload pre-warm failed: {}", exc)
|
||||||
|
return ok
|
||||||
|
|
||||||
|
|
||||||
def start_scan_terminal_prewarm() -> None:
|
def start_scan_terminal_prewarm() -> None:
|
||||||
@@ -379,11 +409,13 @@ def start_scan_terminal_prewarm() -> None:
|
|||||||
ok += 1
|
ok += 1
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
payload_ok = _warm_scan_terminal_payloads()
|
||||||
elapsed = int(time.time() - started)
|
elapsed = int(time.time() - started)
|
||||||
logger.info(
|
logger.info(
|
||||||
"scan terminal pre-warm finished ok={}/{} elapsed={}s",
|
"scan terminal pre-warm finished ok={}/{} payloads={} elapsed={}s",
|
||||||
ok,
|
ok,
|
||||||
len(city_names),
|
len(city_names),
|
||||||
|
payload_ok,
|
||||||
elapsed,
|
elapsed,
|
||||||
)
|
)
|
||||||
except (ValueError, OSError, IOError):
|
except (ValueError, OSError, IOError):
|
||||||
|
|||||||
Reference in New Issue
Block a user