99from scan_explorer_service .views .view_utils import ApiErrors
1010from scan_explorer_service .views .manifest import _cache_delete
1111from scan_explorer_service .open_search import EsFields , page_os_search , aggregate_search , page_ocr_os_search
12+ import opensearchpy
1213import requests
1314
1415bp_metadata = Blueprint ('metadata' , __name__ , url_prefix = '/metadata' )
@@ -183,6 +184,9 @@ def article_search():
183184 page_count = page_os_search (qs , page , limit , sort )['hits' ]['total' ]['value' ]
184185 agg_limit = current_app .config .get ("OPEN_SEARCH_AGG_BUCKET_LIMIT" , 10000 )
185186 return jsonify (serialize_os_article_result (result , page , limit , text_query , collection_count , page_count , agg_limit ))
187+ except (opensearchpy .exceptions .ConnectionError , opensearchpy .exceptions .ConnectionTimeout , opensearchpy .exceptions .TransportError ) as e :
188+ current_app .logger .exception (f"OpenSearch error: { e } " )
189+ return jsonify (message = 'Search service temporarily unavailable' , type = ApiErrors .SearchError .value ), 503
186190 except Exception as e :
187191 current_app .logger .exception (f"An exception has occurred: { e } " )
188192 return jsonify (message = str (e ), type = ApiErrors .SearchError .value ), 400
@@ -200,6 +204,9 @@ def collection_search():
200204 text_query = qs_dict [SearchOptions .FullText .value ]
201205 agg_limit = current_app .config .get ("OPEN_SEARCH_AGG_BUCKET_LIMIT" , 10000 )
202206 return jsonify (serialize_os_collection_result (result , page , limit , text_query , agg_limit ))
207+ except (opensearchpy .exceptions .ConnectionError , opensearchpy .exceptions .ConnectionTimeout , opensearchpy .exceptions .TransportError ) as e :
208+ current_app .logger .exception (f"OpenSearch error: { e } " )
209+ return jsonify (message = 'Search service temporarily unavailable' , type = ApiErrors .SearchError .value ), 503
203210 except Exception as e :
204211 return jsonify (message = str (e ), type = ApiErrors .SearchError .value ), 400
205212
@@ -214,6 +221,9 @@ def page_search():
214221 if SearchOptions .FullText .value in qs_dict .keys ():
215222 text_query = qs_dict [SearchOptions .FullText .value ]
216223 return jsonify (serialize_os_page_result (result , page , limit , text_query ))
224+ except (opensearchpy .exceptions .ConnectionError , opensearchpy .exceptions .ConnectionTimeout , opensearchpy .exceptions .TransportError ) as e :
225+ current_app .logger .exception (f"OpenSearch error: { e } " )
226+ return jsonify (message = 'Search service temporarily unavailable' , type = ApiErrors .SearchError .value ), 503
217227 except Exception as e :
218228 return jsonify (message = str (e ), type = ApiErrors .SearchError .value ), 400
219229
@@ -244,5 +254,8 @@ def get_page_ocr():
244254 result = page_ocr_os_search (collection_id , page_number )
245255 return serialize_os_page_ocr_result (result )
246256
257+ except (opensearchpy .exceptions .ConnectionError , opensearchpy .exceptions .ConnectionTimeout , opensearchpy .exceptions .TransportError ) as e :
258+ current_app .logger .exception (f"OpenSearch error: { e } " )
259+ return jsonify (message = 'Search service temporarily unavailable' , type = ApiErrors .SearchError .value ), 503
247260 except Exception as e :
248261 return jsonify (message = str (e ), type = ApiErrors .SearchError .value ), 400
0 commit comments