From 77651d64c137759ab67466be96a8c7611efc2b5b Mon Sep 17 00:00:00 2001 From: Melchior Reimers Date: Tue, 27 Jan 2026 14:20:27 +0100 Subject: [PATCH] Fix: Analytics Worker berechnet jetzt alle Tabellen pro Tag --- .../__pycache__/worker.cpython-313.pyc | Bin 47287 -> 48209 bytes src/analytics/worker.py | 31 +++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/analytics/__pycache__/worker.cpython-313.pyc b/src/analytics/__pycache__/worker.cpython-313.pyc index d2384294939bb992721e2a8b57ac365efd881f8a..9ada7b6d094ac8803efd5ed4f93c43708ac0f436 100644 GIT binary patch delta 2235 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 lO&rdBf+V@#VUuCQV;WJ+xwC6>>s^Ze List[datetime.date]: - """Ermittelt fehlende Tage, die noch berechnet werden müssen""" + """Ermittelt fehlende Tage, die noch berechnet werden müssen. + Prüft alle drei Analytics-Tabellen: analytics_custom, analytics_exchange_daily, analytics_daily_summary""" logger.info("=== get_missing_dates() called ===") # Hole das Datum des ersten Trades query = "select min(date_trunc('day', timestamp)) as first_date from trades" @@ -803,8 +804,13 @@ class AnalyticsWorker: else: first_date = datetime.datetime.fromtimestamp(first_date_value / 1000000, tz=datetime.timezone.utc).date() - # Hole bereits berechnete Daten - existing_dates = self.get_existing_dates('analytics_custom') + # Hole bereits berechnete Daten aus allen drei Tabellen + existing_custom = self.get_existing_dates('analytics_custom') + existing_exchange = self.get_existing_dates('analytics_exchange_daily') + existing_summary = self.get_existing_dates('analytics_daily_summary') + + # Kombiniere alle vorhandenen Daten (Union) + existing_dates = existing_custom | existing_exchange | existing_summary # Generiere alle Tage vom ersten Trade bis heute today = datetime.date.today() @@ -825,13 +831,14 @@ class AnalyticsWorker: else: last_trade_date = datetime.datetime.fromtimestamp(last_date_value / 1000000, tz=datetime.timezone.utc).date() - # Finde fehlende Tage + # Finde fehlende Tage (Tage, die in mindestens einer Tabelle fehlen) missing_dates = [d for d in all_dates if d not in existing_dates] # Debug-Logs (immer ausgeben) last_trade_str = str(last_trade_date) if last_trade_date else "None" logger.info(f"Date range: first trade={first_date}, last trade={last_trade_str}, today={today}") - logger.info(f"Existing dates in analytics_custom: {len(existing_dates)} dates") + logger.info(f"Existing dates - analytics_custom: {len(existing_custom)}, analytics_exchange_daily: {len(existing_exchange)}, analytics_daily_summary: {len(existing_summary)}") + logger.info(f"Total unique existing dates across all tables: {len(existing_dates)}") if existing_dates: existing_sorted = sorted(existing_dates) logger.info(f" First existing: {existing_sorted[0]}, Last existing: {existing_sorted[-1]}") @@ -839,7 +846,7 @@ class AnalyticsWorker: if missing_dates: logger.info(f" First missing: {missing_dates[0]}, Last missing: {missing_dates[-1]}") else: - logger.info(" No missing dates - all dates are already calculated") + logger.info(" No missing dates - all dates are already calculated in all tables") return sorted(missing_dates) @@ -876,7 +883,11 @@ class AnalyticsWorker: yesterday = today - datetime.timedelta(days=1) logger.info(f"Ensuring yesterday ({yesterday}) and today ({today}) are processed...") - existing_dates = self.get_existing_dates('analytics_custom') + # Prüfe alle drei Tabellen + existing_custom = self.get_existing_dates('analytics_custom') + existing_exchange = self.get_existing_dates('analytics_exchange_daily') + existing_summary = self.get_existing_dates('analytics_daily_summary') + existing_dates = existing_custom | existing_exchange | existing_summary if yesterday not in existing_dates: logger.info(f"Processing yesterday's data: {yesterday}") @@ -909,7 +920,11 @@ class AnalyticsWorker: # Stelle sicher, dass gestern und heute verarbeitet wurden today = now.date() yesterday = today - datetime.timedelta(days=1) - existing_dates = self.get_existing_dates('analytics_custom') + # Prüfe alle drei Tabellen + existing_custom = self.get_existing_dates('analytics_custom') + existing_exchange = self.get_existing_dates('analytics_exchange_daily') + existing_summary = self.get_existing_dates('analytics_daily_summary') + existing_dates = existing_custom | existing_exchange | existing_summary if yesterday not in existing_dates: logger.info(f"Processing yesterday's data: {yesterday}")