From 910f604e9be945857bc0215ce61759de26a6ba7b Mon Sep 17 00:00:00 2001 From: AJ Stuyvenberg Date: Mon, 16 Sep 2024 13:40:37 -0400 Subject: [PATCH 1/5] feat: Support DD_HTTP_PROXY and DD_HTTPS_PROXY (#631) * feat: Support DD_HTTP_PROXY and DD_HTTPS_PROXY * fix: fmt * feat: honor dd_proxy --- dogstatsd/src/datadog.rs | 35 +++++++++++++++++++++++++++-- dogstatsd/src/flusher.rs | 10 +++++++-- dogstatsd/tests/integration_test.rs | 2 ++ serverless/src/main.rs | 15 ++++++++++++- 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/dogstatsd/src/datadog.rs b/dogstatsd/src/datadog.rs index 3a97c0ff7..f7cec11ea 100644 --- a/dogstatsd/src/datadog.rs +++ b/dogstatsd/src/datadog.rs @@ -34,13 +34,44 @@ pub enum ShipError { Json(#[from] serde_json::Error), } +fn build_http_client( + http_proxy: Option, + https_proxy: Option, +) -> Result { + let client = reqwest::Client::builder(); + if let Some(proxy_uri) = http_proxy { + let proxy = reqwest::Proxy::http(proxy_uri)?; + client.proxy(proxy).build() + } else if let Some(proxy_uri) = https_proxy { + let proxy = reqwest::Proxy::https(proxy_uri)?; + client.proxy(proxy).build() + } else { + client.build() + } +} + impl DdApi { #[must_use] - pub fn new(api_key: String, site: String) -> Self { + pub fn new( + api_key: String, + site: String, + http_proxy: Option, + https_proxy: Option, + ) -> Self { + let client = match build_http_client(http_proxy, https_proxy) { + Ok(client) => client, + Err(e) => { + error!( + "Unable to parse proxy configuration: {}, no proxy will be used", + e + ); + reqwest::Client::new() + } + }; DdApi { api_key, fqdn_site: site, - client: reqwest::Client::new(), + client, } } diff --git a/dogstatsd/src/flusher.rs b/dogstatsd/src/flusher.rs index 7969c7f86..21dbacf23 100644 --- a/dogstatsd/src/flusher.rs +++ b/dogstatsd/src/flusher.rs @@ -18,8 +18,14 @@ pub fn build_fqdn_metrics(site: String) -> String { #[allow(clippy::await_holding_lock)] impl Flusher { - pub fn new(api_key: String, aggregator: Arc>, site: String) -> Self { - let dd_api = datadog::DdApi::new(api_key, site); + pub fn new( + api_key: String, + aggregator: Arc>, + site: String, + http_proxy: Option, + https_proxy: Option, + ) -> Self { + let dd_api = datadog::DdApi::new(api_key, site, http_proxy, https_proxy); Flusher { dd_api, aggregator } } diff --git a/dogstatsd/tests/integration_test.rs b/dogstatsd/tests/integration_test.rs index 689887ca2..e36eb3bfe 100644 --- a/dogstatsd/tests/integration_test.rs +++ b/dogstatsd/tests/integration_test.rs @@ -39,6 +39,8 @@ async fn dogstatsd_server_ships_series() { "mock-api-key".to_string(), Arc::clone(&metrics_aggr), mock_server.url(), + None, + None, ); let server_address = "127.0.0.1:18125"; diff --git a/serverless/src/main.rs b/serverless/src/main.rs index 1c1a96e09..7bc5c390a 100644 --- a/serverless/src/main.rs +++ b/serverless/src/main.rs @@ -30,6 +30,8 @@ pub async fn main() { Builder::from_env(env).target(Target::Stdout).init(); let dd_api_key: Option = env::var("DD_API_KEY").ok(); + let dd_http_proxy: Option = env::var("DD_HTTP_PROXY").ok(); + let dd_https_proxy: Option = env::var("DD_HTTPS_PROXY").ok(); let dd_dogstatsd_port: u16 = env::var("DD_DOGSTATSD_PORT") .ok() .and_then(|port| port.parse::().ok()) @@ -78,7 +80,14 @@ pub async fn main() { let mut metrics_flusher = if dd_use_dogstatsd { debug!("Starting dogstatsd"); - let (_, metrics_flusher) = start_dogstatsd(dd_dogstatsd_port, dd_api_key, dd_site).await; + let (_, metrics_flusher) = start_dogstatsd( + dd_dogstatsd_port, + dd_api_key, + dd_site, + dd_http_proxy, + dd_https_proxy, + ) + .await; info!("dogstatsd-udp: starting to listen on port {dd_dogstatsd_port}"); metrics_flusher } else { @@ -103,6 +112,8 @@ async fn start_dogstatsd( port: u16, dd_api_key: Option, dd_site: String, + dd_http_proxy: Option, + dd_https_proxy: Option, ) -> (CancellationToken, Option) { let metrics_aggr = Arc::new(Mutex::new( MetricsAggregator::new(Vec::new(), CONTEXTS).expect("Failed to create metrics aggregator"), @@ -130,6 +141,8 @@ async fn start_dogstatsd( dd_api_key, Arc::clone(&metrics_aggr), build_fqdn_metrics(dd_site), + dd_http_proxy, + dd_https_proxy, ); Some(metrics_flusher) } From a5d9cf083062210bab9d30fbe2cf7f4e71fdf7ea Mon Sep 17 00:00:00 2001 From: Duncan Harvey <35278470+duncanpharvey@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:05:18 -0400 Subject: [PATCH 2/5] [Serverless Mini Agent] Install Protoc for Serverless Release (#630) * install protoc for serverless release * rerun github actions --- .github/workflows/publish-serverless-agent.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/publish-serverless-agent.yml b/.github/workflows/publish-serverless-agent.yml index e0fab67bf..69a37e8ea 100644 --- a/.github/workflows/publish-serverless-agent.yml +++ b/.github/workflows/publish-serverless-agent.yml @@ -11,9 +11,13 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + - name: Install Protoc Binary + shell: bash + run: chmod +x ./scripts/install-protoc.sh && ./scripts/install-protoc.sh $HOME - name: Install musl dependencies run: rustup target add x86_64-unknown-linux-musl && sudo apt-get install musl-tools - name: Build project + shell: bash run: cargo build --release -p datadog-serverless-trace-mini-agent --target x86_64-unknown-linux-musl - name: Upload artifacts for release step uses: actions/upload-artifact@v3 @@ -26,7 +30,11 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + - name: Install Protoc Binary + shell: bash + run: chmod +x ./scripts/install-protoc.sh && ./scripts/install-protoc.sh $HOME - name: Build project + shell: bash run: cargo build --release -p datadog-serverless-trace-mini-agent - name: Upload artifacts for release step uses: actions/upload-artifact@v3 From 0df879e234f9fab20238bde0b155b467278c73da Mon Sep 17 00:00:00 2001 From: Duncan Harvey <35278470+duncanpharvey@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:31:03 -0400 Subject: [PATCH 3/5] bump datadog-serverless-trace-mini-agent version to 0.7.1 (#633) --- Cargo.lock | 2 +- serverless/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 43a18caba..0d5eb67b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1580,7 +1580,7 @@ dependencies = [ [[package]] name = "datadog-serverless-trace-mini-agent" -version = "0.7.0" +version = "0.7.1" dependencies = [ "datadog-trace-mini-agent", "datadog-trace-protobuf", diff --git a/serverless/Cargo.toml b/serverless/Cargo.toml index 9b98698d5..da814c976 100644 --- a/serverless/Cargo.toml +++ b/serverless/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "datadog-serverless-trace-mini-agent" -version = "0.7.0" +version = "0.7.1" edition = "2021" [dependencies] From 19cc332986c840fe6ba61ed236822adcc42a9872 Mon Sep 17 00:00:00 2001 From: Duncan Harvey <35278470+duncanpharvey@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:10:42 -0400 Subject: [PATCH 4/5] [Serverless Mini Agent] Upload Serverless Binaries Instead of Generating Release (#634) * upload serverless binaries instead of generating release * prevent double zipping of release binaries --- .github/workflows/publish-serverless-agent.yml | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/.github/workflows/publish-serverless-agent.yml b/.github/workflows/publish-serverless-agent.yml index 69a37e8ea..0eec213b5 100644 --- a/.github/workflows/publish-serverless-agent.yml +++ b/.github/workflows/publish-serverless-agent.yml @@ -20,7 +20,7 @@ jobs: shell: bash run: cargo build --release -p datadog-serverless-trace-mini-agent --target x86_64-unknown-linux-musl - name: Upload artifacts for release step - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: datadog-serverless-agent-linux-amd64 path: target/x86_64-unknown-linux-musl/release/datadog-serverless-trace-mini-agent @@ -37,7 +37,7 @@ jobs: shell: bash run: cargo build --release -p datadog-serverless-trace-mini-agent - name: Upload artifacts for release step - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: datadog-serverless-agent-windows-amd64 path: target/release/datadog-serverless-trace-mini-agent.exe @@ -49,7 +49,7 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Download artifacts from build step - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: path: target/release/binaries - name: UPX compress binaries @@ -59,12 +59,8 @@ jobs: chmod +x "$file" upx "$file" --lzma done - - name: Zip binaries - run: zip -r datadog-serverless-agent.zip ./* - working-directory: target/release/binaries - - name: Release - uses: softprops/action-gh-release@v1 + - name: Upload binaries + uses: actions/upload-artifact@v4 with: - draft: true - generate_release_notes: true - files: target/release/binaries/datadog-serverless-agent.zip + name: datadog-serverless-agent + path: target/release/binaries/*/* From 89f48d47d8743b39c0516c8cfe3d1e7eaedceac5 Mon Sep 17 00:00:00 2001 From: Duncan Harvey <35278470+duncanpharvey@users.noreply.github.com> Date: Tue, 17 Sep 2024 11:14:00 -0400 Subject: [PATCH 5/5] bump datadog-serverless-trace-mini-agent version to 0.7.2 (#635) --- Cargo.lock | 2 +- serverless/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0d5eb67b4..2052ed83d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1580,7 +1580,7 @@ dependencies = [ [[package]] name = "datadog-serverless-trace-mini-agent" -version = "0.7.1" +version = "0.7.2" dependencies = [ "datadog-trace-mini-agent", "datadog-trace-protobuf", diff --git a/serverless/Cargo.toml b/serverless/Cargo.toml index da814c976..558e4be33 100644 --- a/serverless/Cargo.toml +++ b/serverless/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "datadog-serverless-trace-mini-agent" -version = "0.7.1" +version = "0.7.2" edition = "2021" [dependencies]