diff --git a/apps/fhir/server/authentication.py b/apps/fhir/server/authentication.py index 97981af2e..b58220534 100644 --- a/apps/fhir/server/authentication.py +++ b/apps/fhir/server/authentication.py @@ -79,23 +79,31 @@ def search_fhir_id_by_identifier(search_identifier, request=None): # Build URL with patient ID search by identifier. ver = "v{}".format(request.session.get('version', 1)) url = f"{get_resourcerouter().fhir_url}/{ver}/fhir/Patient/_search" - s = requests.Session() - - payload = {"identifier": search_identifier} - req = requests.Request('POST', url, headers=headers, data=payload) - prepped = req.prepare() - pre_fetch.send_robust(FhirServerAuth, request=req, auth_request=request, api_ver=ver) - response = s.send(prepped, cert=certs, verify=False) - post_fetch.send_robust(FhirServerAuth, request=req, auth_request=request, response=response, api_ver=ver) - response.raise_for_status() - backend_data = response.json() - - # Parse and validate backend_data (bundle of patients) response. - fhir_id, err_detail = _validate_patient_search_result(backend_data) - - if err_detail: - raise UpstreamServerException(err_detail) - return fhir_id + + max_retries = 3 + retries = 0 + while retries <= max_retries: + try: + s = requests.Session() + payload = {"identifier": search_identifier} + req = requests.Request('POST', url, headers=headers, data=payload) + prepped = req.prepare() + pre_fetch.send_robust(FhirServerAuth, request=req, auth_request=request, api_ver=ver) + response = s.send(prepped, cert=certs, verify=False) + post_fetch.send_robust(FhirServerAuth, request=req, auth_request=request, response=response, api_ver=ver) + response.raise_for_status() + backend_data = response.json() + # Parse and validate backend_data (bundle of patients) response. + fhir_id, err_detail = _validate_patient_search_result(backend_data) + if err_detail is not None: + raise UpstreamServerException(err_detail) + return fhir_id + except requests.exceptions.RequestException as e: + if retries < max_retries: + print(f"FHIR ID search request failed. Retrying... ({retries+1}/{max_retries})") + retries += 1 + else: + raise e def match_fhir_id(mbi, mbi_hash, hicn_hash, request=None): diff --git a/apps/mymedicare_cb/authorization.py b/apps/mymedicare_cb/authorization.py index 328c4d790..b41359b83 100644 --- a/apps/mymedicare_cb/authorization.py +++ b/apps/mymedicare_cb/authorization.py @@ -280,16 +280,25 @@ def service_health_check(self, request): the BB2 /health/external check. """ headers = self.slsx_common_headers(request) - - response = requests.get( - self.healthcheck_endpoint, - headers=headers, - allow_redirects=False, - verify=self.verify_ssl_internal, - timeout=5, - ) - response.raise_for_status() - return True + max_retries = 3 + retries = 0 + while retries < max_retries: + try: + response = requests.get( + self.healthcheck_endpoint, + headers=headers, + allow_redirects=False, + verify=self.verify_ssl_internal, + timeout=10, + ) + response.raise_for_status() + return True + except requests.exceptions.RequestException as e: + if retries < max_retries: + print(f"SLSx service health check request failed. Retrying... ({retries+1}/{max_retries})") + retries += 1 + else: + raise e def user_signout(self, request): """