diff --git a/src/aim_report.rs b/src/aim_report.rs index 096cbf8..cc31bf0 100644 --- a/src/aim_report.rs +++ b/src/aim_report.rs @@ -117,16 +117,21 @@ impl CloudflareAimResults { )? .await?; - let (status, status_text) = (response.status(), response.status().to_string()); + let status = response.status(); let body = response.into_body().collect().await?.to_bytes(); - - debug!( - "aim upload response: {status} ({status_text}); {}", - String::from_utf8_lossy(&body) - ); - - if status != 200 { - anyhow::bail!("error uploading aim results"); + let body = String::from_utf8_lossy(&body); + + debug!("aim upload response: {status}; {body}"); + + if !status.is_success() { + let excerpt: String = body + .split_whitespace() + .collect::>() + .join(" ") + .chars() + .take(200) + .collect(); + anyhow::bail!("server responded {status}: {excerpt}"); } Ok(()) diff --git a/src/nq_core/client.rs b/src/nq_core/client.rs index d9bcef2..fe68f1c 100644 --- a/src/nq_core/client.rs +++ b/src/nq_core/client.rs @@ -177,6 +177,7 @@ impl ThroughputClient { tracing::debug!("created request: {request:?}"); let failure_time = Arc::clone(&time); + let teardown = shutdown.clone(); tokio::spawn( async move { if let Err(error) = self @@ -193,7 +194,12 @@ impl ThroughputClient { ) .await { - error!("error sending ThroughputClient request: {error:#}"); + // Test teardown closes every connection while requests may still be in flight + if teardown.is_cancelled() { + debug!("ThroughputClient request cancelled by shutdown: {error:#}"); + } else { + error!("error sending ThroughputClient request: {error:#}"); + } // An upload's failure (rejected status, reset stream, dead // connection) is invisible to its request body, which just diff --git a/src/rpm.rs b/src/rpm.rs index ea95f51..e44f064 100644 --- a/src/rpm.rs +++ b/src/rpm.rs @@ -14,7 +14,7 @@ use http_body_util::BodyExt; use serde::Deserialize; use tokio::time::timeout; use tokio_util::sync::CancellationToken; -use tracing::{debug, error, info, warn}; +use tracing::{debug, info, warn}; use crate::aim_report::CloudflareAimResults; use crate::args::rpm::{RpmArgs, SMALL_UPLOAD_BYTES_PER_REQUEST}; @@ -158,7 +158,7 @@ pub async fn run(cli_config: RpmArgs) -> anyhow::Result<()> { if !cli_config.disable_aim_scores { debug!("uploading aim report"); if let Err(e) = aim_results.upload().await { - error!("error uploading aim results: {e}"); + warn!("error uploading aim results: {e}"); } } });