Skip to content

Commit 3d0df01

Browse files
authored
chore(dogstatsd): use pre built client (#1061)
## Overview Upgrades dogstatsd which allows us to use our own reqwest client instead of expecting the server to create one This gives us control over how we are building a specialized client which might need a proxy, certificates, and more. ## Testing Unit tests, integration tests, and self monitoring
1 parent 97ae153 commit 3d0df01

File tree

9 files changed

+26
-29
lines changed

9 files changed

+26
-29
lines changed

bottlecap/Cargo.lock

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bottlecap/Cargo.toml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ libdd-trace-utils = { git = "https://github.com/DataDog/libdatadog", rev = "c812
7676
libdd-trace-normalization = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" }
7777
libdd-trace-obfuscation = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" }
7878
libdd-trace-stats = { git = "https://github.com/DataDog/libdatadog", rev = "c8121f422d2c8d219f8d421ff3cdb1fcbe9e8b09" }
79-
dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "2eb009a59ed07ffcaf174db1c31af413365e9bc6", default-features = false }
80-
datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "2eb009a59ed07ffcaf174db1c31af413365e9bc6", default-features = false }
79+
dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "28f796bf767fff56caf08153ade5cd80c8e8f705", default-features = false }
80+
datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "28f796bf767fff56caf08153ade5cd80c8e8f705", default-features = false }
8181
libddwaf = { version = "1.28.1", git = "https://github.com/DataDog/libddwaf-rust", rev = "d1534a158d976bd4f747bf9fcc58e0712d2d17fc", default-features = false, features = ["serde"] }
8282

8383
[dev-dependencies]
@@ -118,11 +118,10 @@ opt-level = 3
118118
tikv-jemallocator = "0.5"
119119

120120
[features]
121-
default = ["reqwest/rustls-tls-native-roots", "dogstatsd/default", "datadog-fips/default" ]
121+
default = ["reqwest/rustls-tls-native-roots", "datadog-fips/default" ]
122122
fips = [
123123
"libdd-common/fips",
124124
"libdd-trace-utils/fips",
125-
"dogstatsd/fips",
126125
"datadog-fips/fips",
127126
"libddwaf/fips",
128127
"reqwest/rustls-tls-native-roots-no-provider",

bottlecap/src/bin/bottlecap/main.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ use bottlecap::{
8080
use datadog_fips::reqwest_adapter::create_reqwest_client_builder;
8181
use decrypt::resolve_secrets;
8282
use dogstatsd::{
83-
aggregator_service::AggregatorHandle as MetricsAggregatorHandle,
84-
aggregator_service::AggregatorService as MetricsAggregatorService,
83+
aggregator::{
84+
AggregatorHandle as MetricsAggregatorHandle, AggregatorService as MetricsAggregatorService,
85+
},
8586
api_key::ApiKeyFactory,
8687
constants::CONTEXTS,
8788
datadog::{
@@ -95,7 +96,7 @@ use dogstatsd::{
9596
use libdd_trace_obfuscation::obfuscation_config;
9697
use reqwest::Client;
9798
use std::{collections::hash_map, env, path::Path, str::FromStr, sync::Arc};
98-
use tokio::time::{Duration, Instant};
99+
use tokio::time::Instant;
99100
use tokio::{sync::Mutex as TokioMutex, sync::mpsc::Sender};
100101
use tokio_util::sync::CancellationToken;
101102
use tracing::{debug, error, warn};
@@ -1179,10 +1180,12 @@ async fn start_dogstatsd(
11791180
});
11801181

11811182
// Get flushers with aggregator handle
1183+
let metrics_client = bottlecap::http::get_client(config);
11821184
let flushers = Arc::new(start_metrics_flushers(
11831185
Arc::clone(&api_key_factory),
11841186
&aggregator_handle,
11851187
config,
1188+
&metrics_client,
11861189
));
11871190

11881191
// Create Dogstatsd server
@@ -1214,6 +1217,7 @@ fn start_metrics_flushers(
12141217
api_key_factory: Arc<ApiKeyFactory>,
12151218
metrics_aggr_handle: &MetricsAggregatorHandle,
12161219
config: &Arc<Config>,
1220+
client: &Client,
12171221
) -> Vec<MetricsFlusher> {
12181222
let mut flushers = Vec::new();
12191223

@@ -1237,9 +1241,7 @@ fn start_metrics_flushers(
12371241
api_key_factory,
12381242
aggregator_handle: metrics_aggr_handle.clone(),
12391243
metrics_intake_url_prefix: metrics_intake_url.expect("can't parse site or override"),
1240-
https_proxy: config.proxy_https.clone(),
1241-
ca_cert_path: config.tls_cert_file.clone(),
1242-
timeout: Duration::from_secs(config.flush_timeout),
1244+
client: client.clone(),
12431245
retry_strategy: DsdRetryStrategy::Immediate(3),
12441246
compression_level: config.metrics_config_compression_level,
12451247
};
@@ -1267,9 +1269,7 @@ fn start_metrics_flushers(
12671269
api_key_factory: additional_api_key_factory,
12681270
aggregator_handle: metrics_aggr_handle.clone(),
12691271
metrics_intake_url_prefix: metrics_intake_url.clone(),
1270-
https_proxy: config.proxy_https.clone(),
1271-
ca_cert_path: config.tls_cert_file.clone(),
1272-
timeout: Duration::from_secs(config.flush_timeout),
1272+
client: client.clone(),
12731273
retry_strategy: DsdRetryStrategy::Immediate(3),
12741274
compression_level: config.metrics_config_compression_level,
12751275
};

bottlecap/src/flushing/service.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ use std::sync::Arc;
55
use tracing::{debug, error};
66

77
use dogstatsd::{
8-
aggregator_service::AggregatorHandle as MetricsAggregatorHandle,
9-
flusher::Flusher as MetricsFlusher,
8+
aggregator::AggregatorHandle as MetricsAggregatorHandle, flusher::Flusher as MetricsFlusher,
109
};
1110

1211
use crate::flushing::handles::{FlushHandles, MetricsRetryBatch};

bottlecap/src/lifecycle/invocation/processor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ impl Processor {
9696
tags_provider: Arc<provider::Provider>,
9797
config: Arc<config::Config>,
9898
aws_config: Arc<AwsConfig>,
99-
metrics_aggregator: dogstatsd::aggregator_service::AggregatorHandle,
99+
metrics_aggregator: dogstatsd::aggregator::AggregatorHandle,
100100
propagator: Arc<DatadogCompositePropagator>,
101101
) -> Self {
102102
let resource = tags_provider
@@ -1346,7 +1346,7 @@ mod tests {
13461346
use crate::traces::stats_generator::StatsGenerator;
13471347
use crate::traces::trace_processor;
13481348
use base64::{Engine, engine::general_purpose::STANDARD};
1349-
use dogstatsd::aggregator_service::AggregatorService;
1349+
use dogstatsd::aggregator::AggregatorService;
13501350
use dogstatsd::metric::EMPTY_TAGS;
13511351
use serde_json::json;
13521352

bottlecap/src/lifecycle/invocation/processor_service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{collections::HashMap, sync::Arc};
22

33
use chrono::{DateTime, Utc};
4-
use dogstatsd::aggregator_service::AggregatorHandle;
4+
use dogstatsd::aggregator::AggregatorHandle;
55
use libdd_trace_protobuf::pb::Span;
66
use serde_json::Value;
77
use thiserror::Error;

bottlecap/src/metrics/enhanced/lambda.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::metrics::enhanced::usage_metrics::{EnhancedMetricsHandle, EnhancedMet
55
use crate::proc::{self, CPUData, NetworkData};
66
use dogstatsd::metric::SortedTags;
77
use dogstatsd::metric::{Metric, MetricValue};
8-
use dogstatsd::{aggregator_service::AggregatorHandle, metric};
8+
use dogstatsd::{aggregator::AggregatorHandle, metric};
99
use std::collections::HashMap;
1010
use std::env::consts::ARCH;
1111
use std::sync::Arc;
@@ -809,7 +809,7 @@ mod tests {
809809
use super::*;
810810
use crate::config;
811811
use crate::extension::telemetry::events::{OnDemandReportMetrics, ReportMetrics};
812-
use dogstatsd::aggregator_service::AggregatorService;
812+
use dogstatsd::aggregator::AggregatorService;
813813
use dogstatsd::metric::EMPTY_TAGS;
814814
const PRECISION: f64 = 0.000_000_01;
815815

bottlecap/src/proxy/interceptor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ mod tests {
436436
use std::{collections::HashMap, time::Duration};
437437
use tokio::{sync::Mutex as TokioMutex, time::Instant};
438438

439-
use dogstatsd::{aggregator_service::AggregatorService, metric::EMPTY_TAGS};
439+
use dogstatsd::{aggregator::AggregatorService, metric::EMPTY_TAGS};
440440
use http_body_util::Full;
441441
use hyper::{server::conn::http1, service::service_fn};
442442
use hyper_util::rt::TokioIo;

bottlecap/tests/metrics_integration_test.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use bottlecap::config::Config;
22
use bottlecap::metrics::enhanced::lambda::Lambda as enhanced_metrics;
3-
use dogstatsd::aggregator_service::AggregatorService;
3+
use dogstatsd::aggregator::AggregatorService;
44
use dogstatsd::api_key::ApiKeyFactory;
55
use dogstatsd::datadog::{DdDdUrl, MetricsIntakeUrlPrefix, MetricsIntakeUrlPrefixOverride};
66
use dogstatsd::flusher::Flusher as MetricsFlusher;
@@ -51,9 +51,10 @@ async fn test_enhanced_metrics() {
5151
aggregator_handle: metrics_aggr_handle.clone(),
5252
metrics_intake_url_prefix: MetricsIntakeUrlPrefix::new(None, Some(metrics_site_override))
5353
.expect("can't parse metrics intake URL from site"),
54-
https_proxy: None,
55-
ca_cert_path: None,
56-
timeout: std::time::Duration::from_secs(5),
54+
client: datadog_fips::reqwest_adapter::create_reqwest_client_builder()
55+
.expect("failed to create client builder")
56+
.build()
57+
.expect("failed to build client"),
5758
retry_strategy: dogstatsd::datadog::RetryStrategy::Immediate(1),
5859
compression_level: 6,
5960
};

0 commit comments

Comments
 (0)