From 15ea18e0aef073737fd1435a14ca950a321b9710 Mon Sep 17 00:00:00 2001 From: Jorge Leitao Date: Sat, 25 Nov 2023 04:36:10 +0100 Subject: [PATCH] Added retry policy --- Cargo.toml | 2 ++ src/icao_to_trace.rs | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6a1003a..fda8cd0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,8 @@ serde_json = { version = "1.0", default_features = false } # perform requests to the internet reqwest = {version="*", features = ["gzip"]} +reqwest-retry = "*" +reqwest-middleware = "*" # create random string for cookies rand = {version="*", default_features = false, features = ["std", "std_rng", "getrandom"]} diff --git a/src/icao_to_trace.rs b/src/icao_to_trace.rs index 109347c..248c682 100644 --- a/src/icao_to_trace.rs +++ b/src/icao_to_trace.rs @@ -4,6 +4,8 @@ use std::sync::Arc; use rand::Rng; use reqwest::header; use reqwest::{self, StatusCode}; +use reqwest_middleware::ClientBuilder; +use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware}; use time::PrimitiveDateTime; use crate::fs_azure; @@ -80,17 +82,18 @@ async fn globe_history(icao: &str, date: &time::Date) -> Result, std::io headers.insert("Sec-Fetch-Site", "same-origin".parse().unwrap()); headers.insert("TE", "trailers".parse().unwrap()); - let client = reqwest::Client::builder() - .redirect(reqwest::redirect::Policy::none()) - .build() - .unwrap(); + // Retry up to 3 times with increasing intervals between attempts. + let retry_policy = ExponentialBackoff::builder().build_with_max_retries(3); + let client = ClientBuilder::new(reqwest::Client::new()) + .with(RetryTransientMiddleware::new_with_policy(retry_policy)) + .build(); let response = client .get(url) .headers(headers) .send() .await - .map_err(to_io_err)?; + .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; if response.status() == StatusCode::OK { Ok(response.bytes().await.map_err(to_io_err)?.to_vec()) } else if response.status() == StatusCode::NOT_FOUND {