fix: isolate auxiliary price source failures

This commit is contained in:
Hermes Agent
2026-07-26 23:29:54 +00:00
parent 1e50760f27
commit a2b9b431c7
2 changed files with 12 additions and 4 deletions
+8
View File
@@ -206,7 +206,11 @@ def run_scrape(force_full=False):
price_current = metrics["price"] price_current = metrics["price"]
log.info("Fetching BTC ATH...") log.info("Fetching BTC ATH...")
try:
ath_data = price.fetch_ath() ath_data = price.fetch_ath()
except Exception as e:
cycle_errors.append(f"ATH: {e}")
ath_data = {}
ath_val = ath_data.get("ath") or existing_cache.get("drawdown", {}).get("ath") ath_val = ath_data.get("ath") or existing_cache.get("drawdown", {}).get("ath")
if price_current.get("price") and ath_val: if price_current.get("price") and ath_val:
drawdown = price.calculate_drawdown(price_current["price"], ath_val) drawdown = price.calculate_drawdown(price_current["price"], ath_val)
@@ -218,7 +222,11 @@ def run_scrape(force_full=False):
metrics["drawdown"] = {"value": None} metrics["drawdown"] = {"value": None}
log.info("Fetching historical prices for 200D SMA / Mayer...") log.info("Fetching historical prices for 200D SMA / Mayer...")
try:
hist = price.fetch_historical() hist = price.fetch_historical()
except Exception as e:
cycle_errors.append(f"Historical price: {e}")
hist = []
if hist: if hist:
sma_200d = price.calculate_200d_sma(hist) sma_200d = price.calculate_200d_sma(hist)
mayer = price.calculate_mayer_multiple(price_current.get("price"), sma_200d) mayer = price.calculate_mayer_multiple(price_current.get("price"), sma_200d)
+2 -2
View File
@@ -89,8 +89,8 @@ def test_partial_fast_scrape_preserves_last_known_good_metric(server, monkeypatc
monkeypatch.setattr(server, "HISTORY_PATH", str(history_path)) monkeypatch.setattr(server, "HISTORY_PATH", str(history_path))
monkeypatch.setattr(server.fear_greed, "fetch", lambda: {"value": 25}) monkeypatch.setattr(server.fear_greed, "fetch", lambda: {"value": 25})
monkeypatch.setattr(server.price, "fetch_current", lambda: (_ for _ in ()).throw(RuntimeError("price timeout"))) monkeypatch.setattr(server.price, "fetch_current", lambda: (_ for _ in ()).throw(RuntimeError("price timeout")))
monkeypatch.setattr(server.price, "fetch_ath", lambda: {"ath": 70000}) monkeypatch.setattr(server.price, "fetch_ath", lambda: (_ for _ in ()).throw(RuntimeError("ATH timeout")))
monkeypatch.setattr(server.price, "fetch_historical", lambda: []) monkeypatch.setattr(server.price, "fetch_historical", lambda: (_ for _ in ()).throw(RuntimeError("history timeout")))
monkeypatch.setattr(server.engine, "score_all", lambda metrics: {"composite_score": 50, "scored_count": 1, "metrics": []}) monkeypatch.setattr(server.engine, "score_all", lambda metrics: {"composite_score": 50, "scored_count": 1, "metrics": []})
monkeypatch.setattr(server.engine, "score_all_ml", lambda metrics: {"composite_score": 50, "scored_count": 1, "metrics": []}) monkeypatch.setattr(server.engine, "score_all_ml", lambda metrics: {"composite_score": 50, "scored_count": 1, "metrics": []})
fake_updater = types.ModuleType("scrapers.history_updater") fake_updater = types.ModuleType("scrapers.history_updater")