From dcfbba1a4fbe889a95788e42b68a43f5bb462534 Mon Sep 17 00:00:00 2001 From: Adrien Cacciaguerra Date: Fri, 24 Nov 2023 16:28:42 +0100 Subject: [PATCH] feat: share REQUEST_CLIENT across crate --- src/main.rs | 1 + src/request_client.rs | 19 +++++++++++++++++++ src/runner/helpers/download_file.rs | 6 ++++-- src/uploader/upload.rs | 28 ++++------------------------ 4 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 src/request_client.rs diff --git a/src/main.rs b/src/main.rs index 8ed101b..db70c2a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use log::LevelFilter; mod app; mod config; mod prelude; +mod request_client; mod runner; mod uploader; diff --git a/src/request_client.rs b/src/request_client.rs new file mode 100644 index 0000000..07a2b6d --- /dev/null +++ b/src/request_client.rs @@ -0,0 +1,19 @@ +use lazy_static::lazy_static; +use reqwest::ClientBuilder; +use reqwest_middleware::{ClientBuilder as ClientWithMiddlewareBuilder, ClientWithMiddleware}; +use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware}; + +const UPLOAD_RETRY_COUNT: u32 = 3; + +lazy_static! { + pub static ref REQUEST_CLIENT: ClientWithMiddleware = ClientWithMiddlewareBuilder::new( + ClientBuilder::new() + .user_agent("codspeed-runner") + .build() + .unwrap() + ) + .with(RetryTransientMiddleware::new_with_policy( + ExponentialBackoff::builder().build_with_max_retries(UPLOAD_RETRY_COUNT) + )) + .build(); +} diff --git a/src/runner/helpers/download_file.rs b/src/runner/helpers/download_file.rs index c01cd33..0b9017a 100644 --- a/src/runner/helpers/download_file.rs +++ b/src/runner/helpers/download_file.rs @@ -1,10 +1,12 @@ -use crate::prelude::*; +use crate::{prelude::*, request_client::REQUEST_CLIENT}; use std::path::Path; use url::Url; pub async fn download_file(url: &Url, path: &Path) -> Result<()> { - let response = reqwest::get(url.clone()) + let response = REQUEST_CLIENT + .get(url.clone()) + .send() .await .map_err(|e| anyhow!("Failed to download file: {}", e))?; if !response.status().is_success() { diff --git a/src/uploader/upload.rs b/src/uploader/upload.rs index 4da6b70..536af4b 100644 --- a/src/uploader/upload.rs +++ b/src/uploader/upload.rs @@ -1,15 +1,10 @@ +use crate::{config::Config, prelude::*, request_client::REQUEST_CLIENT, runner::RunData}; use async_compression::tokio::write::GzipEncoder; use base64::{engine::general_purpose, Engine as _}; -use lazy_static::lazy_static; +use serde_json::json; use tokio::io::AsyncWriteExt; use tokio_tar::Builder; -use crate::{config::Config, prelude::*, runner::RunData}; -use reqwest::ClientBuilder; -use reqwest_middleware::{ClientBuilder as ClientWithMiddlewareBuilder, ClientWithMiddleware}; -use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware}; -use serde_json::json; - use super::{ ci_provider::CIProvider, github_actions_provider::GitHubActionsProvider, @@ -41,26 +36,11 @@ async fn get_profile_archive_buffer(run_data: &RunData) -> Result<(Vec, Stri Ok((archive_buffer, archive_hash)) } -const UPLOAD_RETRY_COUNT: u32 = 3; - -lazy_static! { - static ref UPLOAD_REQUEST_CLIENT: ClientWithMiddleware = ClientWithMiddlewareBuilder::new( - ClientBuilder::new() - .user_agent("codspeed-runner") - .build() - .unwrap() - ) - .with(RetryTransientMiddleware::new_with_policy( - ExponentialBackoff::builder().build_with_max_retries(UPLOAD_RETRY_COUNT) - )) - .build(); -} - async fn retrieve_upload_data( config: &Config, upload_metadata: &UploadMetadata, ) -> Result { - let mut upload_request = UPLOAD_REQUEST_CLIENT + let mut upload_request = REQUEST_CLIENT .post(config.upload_url.clone()) .json(&upload_metadata); if !upload_metadata.tokenless { @@ -77,7 +57,7 @@ async fn upload_archive_buffer( archive_buffer: Vec, archive_hash: &String, ) -> Result<()> { - UPLOAD_REQUEST_CLIENT + REQUEST_CLIENT .put(upload_data.upload_url.clone()) .header("Content-Type", "application/gzip") .header("Content-Length", archive_buffer.len())