From a3682d772e51760231a97a2a14a177e20659eef4 Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Thu, 13 Nov 2025 14:48:14 -0500 Subject: [PATCH 1/2] feat: Support sending trace stats via http proxy --- bottlecap/src/traces/stats_flusher.rs | 10 ++++++++-- bottlecap/src/traces/trace_flusher.rs | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/bottlecap/src/traces/stats_flusher.rs b/bottlecap/src/traces/stats_flusher.rs index 6635f9ec4..0994aa005 100644 --- a/bottlecap/src/traces/stats_flusher.rs +++ b/bottlecap/src/traces/stats_flusher.rs @@ -10,12 +10,14 @@ use tokio::sync::OnceCell; use crate::config; use crate::lifecycle::invocation::processor::S_TO_MS; use crate::traces::stats_aggregator::StatsAggregator; +use crate::traces::trace_flusher::ServerlessTraceFlusher; use dogstatsd::api_key::ApiKeyFactory; use libdd_common::Endpoint; use libdd_trace_protobuf::pb; use libdd_trace_utils::{config_utils::trace_stats_url, stats_utils}; use tracing::{debug, error}; + #[async_trait] pub trait StatsFlusher { fn new( @@ -101,9 +103,13 @@ impl StatsFlusher for ServerlessStatsFlusher { let start = std::time::Instant::now(); + let Ok(http_client) = ServerlessTraceFlusher::get_http_client(self.config.proxy_https.as_ref()) else { + error!("STATS_FLUSHER | Failed to create HTTP client"); + return; + }; + let resp = - stats_utils::send_stats_payload(serialized_stats_payload, endpoint, api_key.as_str()) - .await; + stats_utils::send_stats_payload_with_client(serialized_stats_payload, endpoint, api_key.as_str(), Some(&http_client)).await; let elapsed = start.elapsed(); debug!( "Stats request to {} took {} ms", diff --git a/bottlecap/src/traces/trace_flusher.rs b/bottlecap/src/traces/trace_flusher.rs index 6e54f0de9..81cfa10de 100644 --- a/bottlecap/src/traces/trace_flusher.rs +++ b/bottlecap/src/traces/trace_flusher.rs @@ -193,7 +193,7 @@ impl TraceFlusher for ServerlessTraceFlusher { } impl ServerlessTraceFlusher { - fn get_http_client( + pub fn get_http_client( proxy_https: Option<&String>, ) -> Result< GenericHttpClient>, From 51d8fc22db11fae94f2486e913cd4a34c9ee0e90 Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Thu, 13 Nov 2025 14:50:21 -0500 Subject: [PATCH 2/2] fmt --- bottlecap/src/traces/stats_flusher.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bottlecap/src/traces/stats_flusher.rs b/bottlecap/src/traces/stats_flusher.rs index 0994aa005..404f57b6b 100644 --- a/bottlecap/src/traces/stats_flusher.rs +++ b/bottlecap/src/traces/stats_flusher.rs @@ -17,7 +17,6 @@ use libdd_trace_protobuf::pb; use libdd_trace_utils::{config_utils::trace_stats_url, stats_utils}; use tracing::{debug, error}; - #[async_trait] pub trait StatsFlusher { fn new( @@ -103,13 +102,20 @@ impl StatsFlusher for ServerlessStatsFlusher { let start = std::time::Instant::now(); - let Ok(http_client) = ServerlessTraceFlusher::get_http_client(self.config.proxy_https.as_ref()) else { + let Ok(http_client) = + ServerlessTraceFlusher::get_http_client(self.config.proxy_https.as_ref()) + else { error!("STATS_FLUSHER | Failed to create HTTP client"); return; }; - let resp = - stats_utils::send_stats_payload_with_client(serialized_stats_payload, endpoint, api_key.as_str(), Some(&http_client)).await; + let resp = stats_utils::send_stats_payload_with_client( + serialized_stats_payload, + endpoint, + api_key.as_str(), + Some(&http_client), + ) + .await; let elapsed = start.elapsed(); debug!( "Stats request to {} took {} ms",