From 47aa08ecb68630ca3d02284e67fbaf739113d596 Mon Sep 17 00:00:00 2001 From: Jordan Gonzalez <30836115+duncanista@users.noreply.github.com> Date: Wed, 4 Mar 2026 16:29:19 -0500 Subject: [PATCH 1/3] update imports --- bottlecap/Cargo.lock | 6 ++---- bottlecap/Cargo.toml | 7 +++---- bottlecap/src/flushing/service.rs | 3 +-- bottlecap/src/lifecycle/invocation/processor.rs | 4 ++-- bottlecap/src/lifecycle/invocation/processor_service.rs | 2 +- bottlecap/src/metrics/enhanced/lambda.rs | 4 ++-- bottlecap/src/proxy/interceptor.rs | 2 +- bottlecap/tests/metrics_integration_test.rs | 8 ++++---- 8 files changed, 16 insertions(+), 20 deletions(-) diff --git a/bottlecap/Cargo.lock b/bottlecap/Cargo.lock index bb6f5d25d..0c7055898 100644 --- a/bottlecap/Cargo.lock +++ b/bottlecap/Cargo.lock @@ -729,7 +729,7 @@ dependencies = [ [[package]] name = "datadog-fips" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=2eb009a59ed07ffcaf174db1c31af413365e9bc6#2eb009a59ed07ffcaf174db1c31af413365e9bc6" +source = "git+https://github.com/DataDog/serverless-components?rev=b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d#b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d" dependencies = [ "reqwest", "rustls", @@ -838,9 +838,8 @@ dependencies = [ [[package]] name = "dogstatsd" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=2eb009a59ed07ffcaf174db1c31af413365e9bc6#2eb009a59ed07ffcaf174db1c31af413365e9bc6" +source = "git+https://github.com/DataDog/serverless-components?rev=b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d#b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d" dependencies = [ - "datadog-fips", "datadog-protos", "ddsketch-agent", "derive_more", @@ -849,7 +848,6 @@ dependencies = [ "protobuf", "regex", "reqwest", - "rustls-pemfile", "serde", "serde_json", "socket2 0.6.2", diff --git a/bottlecap/Cargo.toml b/bottlecap/Cargo.toml index 7aa9bc1b1..0d5ffc7e3 100644 --- a/bottlecap/Cargo.toml +++ b/bottlecap/Cargo.toml @@ -76,8 +76,8 @@ libdd-trace-utils = { git = "https://github.com/DataDog/libdatadog", rev = "c812 libdd-trace-normalization = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" } libdd-trace-obfuscation = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" } libdd-trace-stats = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" } -dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "2eb009a59ed07ffcaf174db1c31af413365e9bc6", default-features = false } -datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "2eb009a59ed07ffcaf174db1c31af413365e9bc6", default-features = false } +dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d", default-features = false } +datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d", default-features = false } libddwaf = { version = "1.28.1", git = "https://github.com/DataDog/libddwaf-rust", rev = "d1534a158d976bd4f747bf9fcc58e0712d2d17fc", default-features = false, features = ["serde"] } [dev-dependencies] @@ -118,11 +118,10 @@ opt-level = 3 tikv-jemallocator = "0.5" [features] -default = ["reqwest/rustls-tls-native-roots", "dogstatsd/default", "datadog-fips/default" ] +default = ["reqwest/rustls-tls-native-roots", "datadog-fips/default" ] fips = [ "libdd-common/fips", "libdd-trace-utils/fips", - "dogstatsd/fips", "datadog-fips/fips", "libddwaf/fips", "reqwest/rustls-tls-native-roots-no-provider", diff --git a/bottlecap/src/flushing/service.rs b/bottlecap/src/flushing/service.rs index 973a72cfc..bd9c66882 100644 --- a/bottlecap/src/flushing/service.rs +++ b/bottlecap/src/flushing/service.rs @@ -5,8 +5,7 @@ use std::sync::Arc; use tracing::{debug, error}; use dogstatsd::{ - aggregator_service::AggregatorHandle as MetricsAggregatorHandle, - flusher::Flusher as MetricsFlusher, + aggregator::AggregatorHandle as MetricsAggregatorHandle, flusher::Flusher as MetricsFlusher, }; use crate::flushing::handles::{FlushHandles, MetricsRetryBatch}; diff --git a/bottlecap/src/lifecycle/invocation/processor.rs b/bottlecap/src/lifecycle/invocation/processor.rs index e369e5238..0bde046f6 100644 --- a/bottlecap/src/lifecycle/invocation/processor.rs +++ b/bottlecap/src/lifecycle/invocation/processor.rs @@ -96,7 +96,7 @@ impl Processor { tags_provider: Arc, config: Arc, aws_config: Arc, - metrics_aggregator: dogstatsd::aggregator_service::AggregatorHandle, + metrics_aggregator: dogstatsd::aggregator::AggregatorHandle, propagator: Arc, ) -> Self { let resource = tags_provider @@ -1346,7 +1346,7 @@ mod tests { use crate::traces::stats_generator::StatsGenerator; use crate::traces::trace_processor; use base64::{Engine, engine::general_purpose::STANDARD}; - use dogstatsd::aggregator_service::AggregatorService; + use dogstatsd::aggregator::AggregatorService; use dogstatsd::metric::EMPTY_TAGS; use serde_json::json; diff --git a/bottlecap/src/lifecycle/invocation/processor_service.rs b/bottlecap/src/lifecycle/invocation/processor_service.rs index 82457ec21..13f41cf01 100644 --- a/bottlecap/src/lifecycle/invocation/processor_service.rs +++ b/bottlecap/src/lifecycle/invocation/processor_service.rs @@ -1,7 +1,7 @@ use std::{collections::HashMap, sync::Arc}; use chrono::{DateTime, Utc}; -use dogstatsd::aggregator_service::AggregatorHandle; +use dogstatsd::aggregator::AggregatorHandle; use libdd_trace_protobuf::pb::Span; use serde_json::Value; use thiserror::Error; diff --git a/bottlecap/src/metrics/enhanced/lambda.rs b/bottlecap/src/metrics/enhanced/lambda.rs index 2a1829b6c..abed7d5b9 100644 --- a/bottlecap/src/metrics/enhanced/lambda.rs +++ b/bottlecap/src/metrics/enhanced/lambda.rs @@ -5,7 +5,7 @@ use crate::metrics::enhanced::usage_metrics::{EnhancedMetricsHandle, EnhancedMet use crate::proc::{self, CPUData, NetworkData}; use dogstatsd::metric::SortedTags; use dogstatsd::metric::{Metric, MetricValue}; -use dogstatsd::{aggregator_service::AggregatorHandle, metric}; +use dogstatsd::{aggregator::AggregatorHandle, metric}; use std::collections::HashMap; use std::env::consts::ARCH; use std::sync::Arc; @@ -809,7 +809,7 @@ mod tests { use super::*; use crate::config; use crate::extension::telemetry::events::{OnDemandReportMetrics, ReportMetrics}; - use dogstatsd::aggregator_service::AggregatorService; + use dogstatsd::aggregator::AggregatorService; use dogstatsd::metric::EMPTY_TAGS; const PRECISION: f64 = 0.000_000_01; diff --git a/bottlecap/src/proxy/interceptor.rs b/bottlecap/src/proxy/interceptor.rs index 4ed0fc951..ce3517c1b 100644 --- a/bottlecap/src/proxy/interceptor.rs +++ b/bottlecap/src/proxy/interceptor.rs @@ -436,7 +436,7 @@ mod tests { use std::{collections::HashMap, time::Duration}; use tokio::{sync::Mutex as TokioMutex, time::Instant}; - use dogstatsd::{aggregator_service::AggregatorService, metric::EMPTY_TAGS}; + use dogstatsd::{aggregator::AggregatorService, metric::EMPTY_TAGS}; use http_body_util::Full; use hyper::{server::conn::http1, service::service_fn}; use hyper_util::rt::TokioIo; diff --git a/bottlecap/tests/metrics_integration_test.rs b/bottlecap/tests/metrics_integration_test.rs index 2a6c4ae58..6febecd6e 100644 --- a/bottlecap/tests/metrics_integration_test.rs +++ b/bottlecap/tests/metrics_integration_test.rs @@ -1,6 +1,6 @@ use bottlecap::config::Config; use bottlecap::metrics::enhanced::lambda::Lambda as enhanced_metrics; -use dogstatsd::aggregator_service::AggregatorService; +use dogstatsd::aggregator::AggregatorService; use dogstatsd::api_key::ApiKeyFactory; use dogstatsd::datadog::{DdDdUrl, MetricsIntakeUrlPrefix, MetricsIntakeUrlPrefixOverride}; use dogstatsd::flusher::Flusher as MetricsFlusher; @@ -51,9 +51,9 @@ async fn test_enhanced_metrics() { aggregator_handle: metrics_aggr_handle.clone(), metrics_intake_url_prefix: MetricsIntakeUrlPrefix::new(None, Some(metrics_site_override)) .expect("can't parse metrics intake URL from site"), - https_proxy: None, - ca_cert_path: None, - timeout: std::time::Duration::from_secs(5), + client: reqwest::Client::builder() + .build() + .expect("failed to build client"), retry_strategy: dogstatsd::datadog::RetryStrategy::Immediate(1), compression_level: 6, }; From 2ad504d1067104cfa900a282d848543183b0ea4a Mon Sep 17 00:00:00 2001 From: Jordan Gonzalez <30836115+duncanista@users.noreply.github.com> Date: Wed, 4 Mar 2026 16:29:42 -0500 Subject: [PATCH 2/3] update client usage for metrics flusher --- bottlecap/src/bin/bottlecap/main.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/bottlecap/src/bin/bottlecap/main.rs b/bottlecap/src/bin/bottlecap/main.rs index 2e5c23ae4..d02178c54 100644 --- a/bottlecap/src/bin/bottlecap/main.rs +++ b/bottlecap/src/bin/bottlecap/main.rs @@ -80,8 +80,9 @@ use bottlecap::{ use datadog_fips::reqwest_adapter::create_reqwest_client_builder; use decrypt::resolve_secrets; use dogstatsd::{ - aggregator_service::AggregatorHandle as MetricsAggregatorHandle, - aggregator_service::AggregatorService as MetricsAggregatorService, + aggregator::{ + AggregatorHandle as MetricsAggregatorHandle, AggregatorService as MetricsAggregatorService, + }, api_key::ApiKeyFactory, constants::CONTEXTS, datadog::{ @@ -95,7 +96,7 @@ use dogstatsd::{ use libdd_trace_obfuscation::obfuscation_config; use reqwest::Client; use std::{collections::hash_map, env, path::Path, str::FromStr, sync::Arc}; -use tokio::time::{Duration, Instant}; +use tokio::time::Instant; use tokio::{sync::Mutex as TokioMutex, sync::mpsc::Sender}; use tokio_util::sync::CancellationToken; use tracing::{debug, error, warn}; @@ -1179,10 +1180,12 @@ async fn start_dogstatsd( }); // Get flushers with aggregator handle + let metrics_client = bottlecap::http::get_client(config); let flushers = Arc::new(start_metrics_flushers( Arc::clone(&api_key_factory), &aggregator_handle, config, + &metrics_client, )); // Create Dogstatsd server @@ -1214,6 +1217,7 @@ fn start_metrics_flushers( api_key_factory: Arc, metrics_aggr_handle: &MetricsAggregatorHandle, config: &Arc, + client: &Client, ) -> Vec { let mut flushers = Vec::new(); @@ -1237,9 +1241,7 @@ fn start_metrics_flushers( api_key_factory, aggregator_handle: metrics_aggr_handle.clone(), metrics_intake_url_prefix: metrics_intake_url.expect("can't parse site or override"), - https_proxy: config.proxy_https.clone(), - ca_cert_path: config.tls_cert_file.clone(), - timeout: Duration::from_secs(config.flush_timeout), + client: client.clone(), retry_strategy: DsdRetryStrategy::Immediate(3), compression_level: config.metrics_config_compression_level, }; @@ -1267,9 +1269,7 @@ fn start_metrics_flushers( api_key_factory: additional_api_key_factory, aggregator_handle: metrics_aggr_handle.clone(), metrics_intake_url_prefix: metrics_intake_url.clone(), - https_proxy: config.proxy_https.clone(), - ca_cert_path: config.tls_cert_file.clone(), - timeout: Duration::from_secs(config.flush_timeout), + client: client.clone(), retry_strategy: DsdRetryStrategy::Immediate(3), compression_level: config.metrics_config_compression_level, }; From 23cfa5a3bcc7dc8a9568477d2f55c01ba5e70363 Mon Sep 17 00:00:00 2001 From: Jordan Gonzalez <30836115+duncanista@users.noreply.github.com> Date: Wed, 4 Mar 2026 16:39:10 -0500 Subject: [PATCH 3/3] update hash --- bottlecap/Cargo.lock | 4 ++-- bottlecap/Cargo.toml | 4 ++-- bottlecap/tests/metrics_integration_test.rs | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/bottlecap/Cargo.lock b/bottlecap/Cargo.lock index 0c7055898..37517a6ae 100644 --- a/bottlecap/Cargo.lock +++ b/bottlecap/Cargo.lock @@ -729,7 +729,7 @@ dependencies = [ [[package]] name = "datadog-fips" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d#b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d" +source = "git+https://github.com/DataDog/serverless-components?rev=28f796bf767fff56caf08153ade5cd80c8e8f705#28f796bf767fff56caf08153ade5cd80c8e8f705" dependencies = [ "reqwest", "rustls", @@ -838,7 +838,7 @@ dependencies = [ [[package]] name = "dogstatsd" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d#b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d" +source = "git+https://github.com/DataDog/serverless-components?rev=28f796bf767fff56caf08153ade5cd80c8e8f705#28f796bf767fff56caf08153ade5cd80c8e8f705" dependencies = [ "datadog-protos", "ddsketch-agent", diff --git a/bottlecap/Cargo.toml b/bottlecap/Cargo.toml index 0d5ffc7e3..8b3f0f94a 100644 --- a/bottlecap/Cargo.toml +++ b/bottlecap/Cargo.toml @@ -76,8 +76,8 @@ libdd-trace-utils = { git = "https://github.com/DataDog/libdatadog", rev = "c812 libdd-trace-normalization = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" } libdd-trace-obfuscation = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" } libdd-trace-stats = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" } -dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d", default-features = false } -datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "b36aeb4631c6b9cd7f7ff4ec73f9dc48e60bd56d", default-features = false } +dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "28f796bf767fff56caf08153ade5cd80c8e8f705", default-features = false } +datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "28f796bf767fff56caf08153ade5cd80c8e8f705", default-features = false } libddwaf = { version = "1.28.1", git = "https://github.com/DataDog/libddwaf-rust", rev = "d1534a158d976bd4f747bf9fcc58e0712d2d17fc", default-features = false, features = ["serde"] } [dev-dependencies] diff --git a/bottlecap/tests/metrics_integration_test.rs b/bottlecap/tests/metrics_integration_test.rs index 6febecd6e..a57fd3fb3 100644 --- a/bottlecap/tests/metrics_integration_test.rs +++ b/bottlecap/tests/metrics_integration_test.rs @@ -51,7 +51,8 @@ async fn test_enhanced_metrics() { aggregator_handle: metrics_aggr_handle.clone(), metrics_intake_url_prefix: MetricsIntakeUrlPrefix::new(None, Some(metrics_site_override)) .expect("can't parse metrics intake URL from site"), - client: reqwest::Client::builder() + client: datadog_fips::reqwest_adapter::create_reqwest_client_builder() + .expect("failed to create client builder") .build() .expect("failed to build client"), retry_strategy: dogstatsd::datadog::RetryStrategy::Immediate(1),