From 0c9dbf43ac8e40d99231073fdcdfc64110ce5d5c Mon Sep 17 00:00:00 2001 From: DiTus Date: Wed, 5 Aug 2026 12:09:50 +0200 Subject: [PATCH 1/2] Add 5-minute health status log to LiveCandleFetcher with last candle info --- live_candle_fetcher.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/live_candle_fetcher.py b/live_candle_fetcher.py index 4a8d267..a7a0cee 100644 --- a/live_candle_fetcher.py +++ b/live_candle_fetcher.py @@ -30,6 +30,8 @@ class LiveCandleFetcher: self.info = Info(constants.MAINNET_API_URL, skip_ws=False) self.candle_queue = Queue() # Thread-safe queue for candles + self._last_candle_info = None + self._last_status_log = time.time() self._ensure_tables_exist() def _ensure_tables_exist(self): @@ -83,6 +85,7 @@ class LiveCandleFetcher: db.upsert_candles(conn, table_name, [record]) logging.debug(f"Upserted candle for {coin} at {record[0]}") + self._last_candle_info = (coin, record[0]) except Exception as e: logging.error(f"Error in database writer thread: {e}") @@ -161,6 +164,12 @@ class LiveCandleFetcher: while True: try: time.sleep(1) + if time.time() - self._last_status_log >= 300: + if self._last_candle_info: + logging.info(f"LiveCandleFetcher running correctly. Last 1m candle collected: {self._last_candle_info[0]} at {self._last_candle_info[1]}") + else: + logging.info("LiveCandleFetcher running correctly. No candles collected yet.") + self._last_status_log = time.time() except Exception as e: logging.error(f"WebSocket connection lost: {e}") self.info.ws_manager.stop() From 716b54fc6732a9c58f8a836945d2ed59443468e5 Mon Sep 17 00:00:00 2001 From: DiTus Date: Wed, 5 Aug 2026 20:26:43 +0200 Subject: [PATCH 2/2] Fix: detect dead WebSocket connection and trigger reconnection --- live_candle_fetcher.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/live_candle_fetcher.py b/live_candle_fetcher.py index a7a0cee..b87cc71 100644 --- a/live_candle_fetcher.py +++ b/live_candle_fetcher.py @@ -164,6 +164,8 @@ class LiveCandleFetcher: while True: try: time.sleep(1) + if not self.info.ws_manager.is_alive(): + raise ConnectionError("WebSocket connection is not alive") if time.time() - self._last_status_log >= 300: if self._last_candle_info: logging.info(f"LiveCandleFetcher running correctly. Last 1m candle collected: {self._last_candle_info[0]} at {self._last_candle_info[1]}")