Skip to content

Commit

Permalink
Merge branch 'main' into upstream-dogstatsd-refactors
Browse files Browse the repository at this point in the history
  • Loading branch information
alexgallotta committed Sep 18, 2024
2 parents d5da78b + 89f48d4 commit aa39d66
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 18 deletions.
26 changes: 15 additions & 11 deletions .github/workflows/publish-serverless-agent.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,16 @@ 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
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
Expand All @@ -26,10 +30,14 @@ 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
uses: actions/upload-artifact@v4
with:
name: datadog-serverless-agent-windows-amd64
path: target/release/datadog-serverless-trace-mini-agent.exe
Expand All @@ -41,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
Expand All @@ -51,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/*/*
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 33 additions & 2 deletions dogstatsd/src/datadog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,44 @@ pub struct DdApi {
client: reqwest::Client,
}

fn build_http_client(
http_proxy: Option<String>,
https_proxy: Option<String>,
) -> Result<reqwest::Client, reqwest::Error> {
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<String>,
https_proxy: Option<String>,
) -> 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,
}
}

Expand Down
10 changes: 8 additions & 2 deletions dogstatsd/src/flusher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Mutex<Aggregator>>, site: String) -> Self {
let dd_api = datadog::DdApi::new(api_key, site);
pub fn new(
api_key: String,
aggregator: Arc<Mutex<Aggregator>>,
site: String,
http_proxy: Option<String>,
https_proxy: Option<String>,
) -> Self {
let dd_api = datadog::DdApi::new(api_key, site, http_proxy, https_proxy);
Flusher { dd_api, aggregator }
}

Expand Down
2 changes: 2 additions & 0 deletions dogstatsd/tests/integration_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,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";
Expand Down
2 changes: 1 addition & 1 deletion serverless/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "datadog-serverless-trace-mini-agent"
version = "0.7.0"
version = "0.7.2"
edition = "2021"

[dependencies]
Expand Down
15 changes: 14 additions & 1 deletion serverless/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ pub async fn main() {
Builder::from_env(env).target(Target::Stdout).init();

let dd_api_key: Option<String> = env::var("DD_API_KEY").ok();
let dd_http_proxy: Option<String> = env::var("DD_HTTP_PROXY").ok();
let dd_https_proxy: Option<String> = env::var("DD_HTTPS_PROXY").ok();
let dd_dogstatsd_port: u16 = env::var("DD_DOGSTATSD_PORT")
.ok()
.and_then(|port| port.parse::<u16>().ok())
Expand Down Expand Up @@ -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 {
Expand All @@ -103,6 +112,8 @@ async fn start_dogstatsd(
port: u16,
dd_api_key: Option<String>,
dd_site: String,
dd_http_proxy: Option<String>,
dd_https_proxy: Option<String>,
) -> (CancellationToken, Option<Flusher>) {
let metrics_aggr = Arc::new(Mutex::new(
MetricsAggregator::new(Vec::new(), CONTEXTS).expect("Failed to create metrics aggregator"),
Expand Down Expand Up @@ -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)
}
Expand Down

0 comments on commit aa39d66

Please sign in to comment.