in cvm-attestation/src/AttestationProvider.py [0:0]
def _send_attestation_request(self, payload):
"""
Sends an attestation request to the provider with retries and exponential backoff.
"""
max_retries = 5
backoff_factor = 1
retries = 0
while retries < max_retries:
try:
self.log.info("Sending attestation request to provider...")
response = requests.post(
self.endpoint,
data=json.dumps(payload),
headers=DEFAULT_HEADERS
)
if response.status_code == 200:
self.log.info("Received token from attestation provider")
response_json = json.loads(response.text)
encoded_token = response_json['token']
return encoded_token
elif response.status_code == 400:
self.log.error(
f"Failed to verify evidence due to invalid collateral, error: {response.text}"
)
return None
elif response.status_code == 429:
self.log.warning(f"Too many requests, error: {response.text}")
retries += 1
if retries < max_retries:
retry_after = response.headers.get('Retry-After')
if retry_after:
sleep_time = int(retry_after)
self.log.info(f"Retrying in {sleep_time} seconds...")
time.sleep(sleep_time)
else:
sleep_time = backoff_factor * (2 ** (retries - 1))
self.log.info(f"Retrying in {sleep_time} seconds...")
time.sleep(sleep_time)
else:
raise AttestationProviderException(
f"Unexpected Error. Status code: {response.status_code}, error: {response.text}"
)
else:
self.log.error(
f"Failed to verify evidence, status code: {response.status_code}, error: {response.text}"
)
retries += 1
if retries < max_retries:
sleep_time = backoff_factor * (2 ** (retries - 1))
self.log.info(f"Retrying in {sleep_time} seconds...")
time.sleep(sleep_time)
else:
raise AttestationProviderException(
f"Unexpected status code: {response.status_code}, error: {response.text}"
)
except RequestException as e:
self.log.error(f"Request failed with an exception: {e}")
retries += 1
if retries < max_retries:
sleep_time = backoff_factor * (2 ** (retries - 1))
self.log.info(f"Retrying in {sleep_time} seconds...")
time.sleep(sleep_time)
else:
self.log.error(
f"Request failed after all retries have been exhausted. Error: {e}"
)
raise AttestationProviderException(
f"Request failed after all retries have been exhausted. Error: {e}"
)