66import asyncio
77from datetime import datetime
88import pytz
9+ from app .utils .credential_masking import mask_exception_message
910
1011from app .utils .config import (
1112 AVAILABLE_MODELS ,
@@ -36,7 +37,8 @@ def get_unified_qa():
3637 try :
3738 _unified_qa = UnifiedQA (use_gemini = True , gemini_api_key = GEMINI_API_KEY )
3839 except Exception as e :
39- logger .warning (f"Failed to initialize UnifiedQA: { e } " )
40+ safe_error = mask_exception_message (e )
41+ logger .warning (f"Failed to initialize UnifiedQA: { safe_error } " )
4042 _unified_qa = None
4143 return _unified_qa
4244
@@ -47,7 +49,8 @@ def get_pubmed_retriever():
4749 try :
4850 _pubmed_retriever = PubMedRetriever (api_key = NCBI_API_KEY )
4951 except Exception as e :
50- logger .warning (f"Failed to initialize PubMedRetriever: { e } " )
52+ safe_error = mask_exception_message (e )
53+ logger .warning (f"Failed to initialize PubMedRetriever: { safe_error } " )
5154 _pubmed_retriever = None
5255 return _pubmed_retriever
5356
@@ -71,7 +74,8 @@ async def health_check():
7174 )
7275
7376 except Exception as e :
74- logger .error (f"Error in health check: { e } " )
77+ safe_error = mask_exception_message (e )
78+ logger .error (f"Error in health check: { safe_error } " )
7579 return HealthResponse (
7680 status = "unhealthy" ,
7781 timestamp = get_current_timestamp (),
@@ -102,7 +106,8 @@ async def get_config():
102106 )
103107
104108 except Exception as e :
105- logger .error (f"Error getting config: { e } " )
109+ safe_error = mask_exception_message (e )
110+ logger .error (f"Error getting config: { safe_error } " )
106111 raise HTTPException (status_code = 500 , detail = f"Error getting configuration: { str (e )} " )
107112
108113
@@ -152,7 +157,8 @@ async def gemini_health_check():
152157 }
153158
154159 except Exception as e :
155- logger .error (f"Error in Gemini health check: { e } " )
160+ safe_error = mask_exception_message (e )
161+ logger .error (f"Error in Gemini health check: { safe_error } " )
156162 return {
157163 "status" : "unhealthy" ,
158164 "api_key_configured" : bool (GEMINI_API_KEY ),
@@ -183,7 +189,8 @@ async def ncbi_health_check(pmid: str = "31452104"):
183189 "pmid" : pmid
184190 }
185191 except Exception as e :
186- logger .error (f"NCBI health check error: { e } " , exc_info = True )
192+ safe_error = mask_exception_message (e )
193+ logger .error (f"NCBI health check error: { safe_error } " , exc_info = False ) # Don't log full traceback to avoid credential exposure
187194 return {
188195 "status" : "unhealthy" ,
189196 "error" : "An internal error occurred. Please try again later." ,
@@ -234,7 +241,8 @@ async def get_metrics():
234241 )
235242
236243 except Exception as e :
237- logger .error (f"Error getting metrics: { e } " )
244+ safe_error = mask_exception_message (e )
245+ logger .error (f"Error getting metrics: { safe_error } " )
238246 raise HTTPException (status_code = 500 , detail = f"Error getting metrics: { str (e )} " )
239247
240248
@@ -274,7 +282,8 @@ async def get_system_status():
274282 }
275283
276284 except Exception as e :
277- logger .error (f"Error getting system status: { e } " )
285+ safe_error = mask_exception_message (e )
286+ logger .error (f"Error getting system status: { safe_error } " )
278287 raise HTTPException (status_code = 500 , detail = f"Error getting system status: { str (e )} " )
279288
280289
@@ -303,7 +312,8 @@ async def get_version():
303312 }
304313
305314 except Exception as e :
306- logger .error (f"Error getting version: { e } " )
315+ safe_error = mask_exception_message (e )
316+ logger .error (f"Error getting version: { safe_error } " )
307317 raise HTTPException (status_code = 500 , detail = f"Error getting version: { str (e )} " )
308318
309319
@@ -380,5 +390,6 @@ async def ask_question(request: Dict[str, Any]):
380390 except HTTPException :
381391 raise
382392 except Exception as e :
383- logger .error (f"Error in Q&A endpoint: { e } " )
393+ safe_error = mask_exception_message (e )
394+ logger .error (f"Error in Q&A endpoint: { safe_error } " )
384395 raise HTTPException (status_code = 500 , detail = f"Error processing question: { str (e )} " )
0 commit comments