@@ -75,6 +75,23 @@ def list_queries(self) -> List[str]:
7575 """List all available query names"""
7676 return list (self ._queries .keys ())
7777
78+ import time
79+
80+ def wait_for_db_ready (retries = 10 , delay = 3 , logger = None ):
81+ for attempt in range (retries ):
82+ try :
83+ with get_session () as session :
84+ session .execute (text ("SELECT 1" ))
85+ if logger :
86+ logger .info ("Database is ready." )
87+ return True
88+ except Exception as e :
89+ if logger :
90+ logger .warning (f"Database not ready (attempt { attempt + 1 } /{ retries } ): { e } " )
91+ time .sleep (delay )
92+ if logger :
93+ logger .error ("Database not ready after retries." )
94+ return False
7895
7996# Initialize global query loader
8097import pathlib
@@ -97,6 +114,11 @@ def get_d0_engagement_data(repo_id: int, logger: logging.Logger, full_collection
97114
98115 logger .info (f"Executing D0 engagement query for repo_id: { repo_id } (full_collection: { full_collection } )" )
99116
117+ # Wait for DB to be ready before running the query
118+ if not wait_for_db_ready (logger = logger ):
119+ logger .error ("Database not ready, aborting D0 engagement query." )
120+ return []
121+
100122 # Get the base query
101123 base_query = query_loader .get_query ('d0_engagement_query' )
102124
@@ -134,6 +156,11 @@ def get_d1_engagement_data(repo_id: int, logger: logging.Logger, full_collection
134156
135157 logger .info (f"Executing D1 engagement query for repo_id: { repo_id } (full_collection: { full_collection } )" )
136158
159+ # Wait for DB to be ready before running the query
160+ if not wait_for_db_ready (logger = logger ):
161+ logger .error ("Database not ready, aborting D0 engagement query." )
162+ return []
163+
137164 # Get the base query
138165 base_query = query_loader .get_query ('d1_engagement_query' )
139166
@@ -171,6 +198,11 @@ def get_d2_engagement_data(repo_id: int, logger: logging.Logger, full_collection
171198
172199 logger .info (f"Executing D2 engagement query for repo_id: { repo_id } (full_collection: { full_collection } )" )
173200
201+ # Wait for DB to be ready before running the query
202+ if not wait_for_db_ready (logger = logger ):
203+ logger .error ("Database not ready, aborting D0 engagement query." )
204+ return []
205+
174206 # Get the base query
175207 base_query = query_loader .get_query ('d2_engagement_query' )
176208
0 commit comments