Skip to content

Commit 076c313

Browse files
committed
Independent from telemetry
1 parent 309daec commit 076c313

File tree

2 files changed

+73
-34
lines changed

2 files changed

+73
-34
lines changed

datadog-crashtracker/src/crash_info/errors_intake.rs

Lines changed: 66 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,6 @@ impl ErrorsIntakeConfig {
138138
#[cfg(not(windows))]
139139
return None;
140140
})
141-
.or_else(|| match (&settings.agent_host, settings.trace_agent_port) {
142-
(None, None) => None,
143-
_ => Some(format!(
144-
"http://{}:{}",
145-
settings.agent_host.as_deref().unwrap_or(DEFAULT_AGENT_HOST),
146-
settings.trace_agent_port.unwrap_or(DEFAULT_AGENT_PORT),
147-
)),
148-
})
149141
.or_else(|| {
150142
#[cfg(unix)]
151143
return settings
@@ -154,6 +146,14 @@ impl ErrorsIntakeConfig {
154146
#[cfg(not(unix))]
155147
return None;
156148
})
149+
.or_else(|| match (&settings.agent_host, settings.trace_agent_port) {
150+
(None, None) => None,
151+
_ => Some(format!(
152+
"http://{}:{}",
153+
settings.agent_host.as_deref().unwrap_or(DEFAULT_AGENT_HOST),
154+
settings.trace_agent_port.unwrap_or(DEFAULT_AGENT_PORT),
155+
)),
156+
})
157157
.unwrap_or_else(|| format!("http://{DEFAULT_AGENT_HOST}:{DEFAULT_AGENT_PORT}"))
158158
}
159159

@@ -177,7 +177,6 @@ impl ErrorsIntakeConfig {
177177
}
178178

179179
pub fn from_settings(settings: &ErrorsIntakeSettings) -> Self {
180-
let trace_agent_url = Self::trace_agent_url_from_setting(settings);
181180
let api_key = Self::api_key_from_settings(settings);
182181

183182
let mut this = Self {
@@ -186,9 +185,24 @@ impl ErrorsIntakeConfig {
186185
debug_enabled: settings.shared_lib_debug,
187186
};
188187

189-
if let Ok(url) = parse_uri(&trace_agent_url) {
188+
// For direct submission, construct the proper intake URL
189+
let url = if settings.direct_submission_enabled && api_key.is_some() {
190+
// Check for explicit errors intake URL first
191+
if let Some(ref errors_intake_url) = settings.errors_intake_dd_url {
192+
errors_intake_url.clone()
193+
} else {
194+
// Build direct submission URL using site configuration
195+
let site = settings.site.as_deref().unwrap_or(DEFAULT_DD_SITE);
196+
format!("https://{}.{}", PROD_ERRORS_INTAKE_SUBDOMAIN, site)
197+
}
198+
} else {
199+
// For agent proxy, use existing logic
200+
Self::trace_agent_url_from_setting(settings)
201+
};
202+
203+
if let Ok(parsed_url) = parse_uri(&url) {
190204
let _res = this.set_endpoint(Endpoint {
191-
url,
205+
url: parsed_url,
192206
api_key,
193207
..Default::default()
194208
});
@@ -377,16 +391,8 @@ pub struct ErrorsIntakeUploader {
377391
}
378392

379393
impl ErrorsIntakeUploader {
380-
pub fn new(
381-
_crashtracker_metadata: &Metadata,
382-
endpoint: &Option<Endpoint>,
383-
) -> anyhow::Result<Self> {
384-
let mut cfg = ErrorsIntakeConfig::from_env();
385-
386-
if let Some(endpoint) = endpoint {
387-
cfg.set_endpoint(endpoint.clone())?;
388-
}
389-
394+
pub fn new(_crashtracker_metadata: &Metadata) -> anyhow::Result<Self> {
395+
let cfg = ErrorsIntakeConfig::from_env();
390396
Ok(Self { cfg })
391397
}
392398

@@ -484,6 +490,7 @@ mod tests {
484490
assert_eq!(payload.ddsource, "crashtracker");
485491
assert!(payload.ddtags.contains("service:foo"));
486492
assert!(payload.ddtags.contains("uuid:"));
493+
assert!(payload.ddtags.contains("is_crash:true"));
487494
assert_eq!(payload.error.source_type, Some("Crashtracking".to_string()));
488495
assert_eq!(payload.error.is_crash, Some(true));
489496
}
@@ -518,26 +525,59 @@ mod tests {
518525
std::env::remove_var("_DD_DIRECT_SUBMISSION_ENABLED");
519526
std::env::remove_var("DD_SITE");
520527

521-
// Test configuration building from environment
522-
std::env::set_var("DD_AGENT_HOST", "test-host");
523-
std::env::set_var("DD_TRACE_AGENT_PORT", "1234");
528+
// Test direct submission configuration
524529
std::env::set_var("DD_API_KEY", "test-key");
525530
std::env::set_var("_DD_DIRECT_SUBMISSION_ENABLED", "true");
526531

527532
let cfg = ErrorsIntakeConfig::from_env();
528533
let endpoint = cfg.endpoint().unwrap();
529534

530-
assert_eq!(endpoint.url.host(), Some("test-host"));
531-
assert_eq!(endpoint.url.port_u16(), Some(1234));
535+
// Should use event-platform-intake.datad0g.com for direct submission
536+
assert_eq!(
537+
endpoint.url.host(),
538+
Some("event-platform-intake.datad0g.com")
539+
);
540+
assert_eq!(endpoint.url.scheme_str(), Some("https"));
532541
assert!(endpoint.api_key.is_some());
533542

534543
// With direct submission enabled and API key, should use direct path
535544
assert_eq!(endpoint.url.path(), DIRECT_ERRORS_INTAKE_URL_PATH);
536545

546+
std::env::remove_var("DD_API_KEY");
547+
std::env::remove_var("_DD_DIRECT_SUBMISSION_ENABLED");
548+
}
549+
550+
#[test]
551+
fn test_errors_intake_config_custom_site() {
552+
let _lock = ENV_TEST_LOCK.lock().unwrap();
553+
554+
std::env::remove_var("DD_TRACE_AGENT_URL");
537555
std::env::remove_var("DD_AGENT_HOST");
538556
std::env::remove_var("DD_TRACE_AGENT_PORT");
539557
std::env::remove_var("DD_API_KEY");
540558
std::env::remove_var("_DD_DIRECT_SUBMISSION_ENABLED");
559+
std::env::remove_var("DD_SITE");
560+
561+
// Test direct submission with custom site
562+
std::env::set_var("DD_API_KEY", "test-key");
563+
std::env::set_var("_DD_DIRECT_SUBMISSION_ENABLED", "true");
564+
std::env::set_var("DD_SITE", "us3.datadoghq.com");
565+
566+
let cfg = ErrorsIntakeConfig::from_env();
567+
let endpoint = cfg.endpoint().unwrap();
568+
569+
// Should use event-platform-intake with custom site
570+
assert_eq!(
571+
endpoint.url.host(),
572+
Some("event-platform-intake.us3.datadoghq.com")
573+
);
574+
assert_eq!(endpoint.url.scheme_str(), Some("https"));
575+
assert!(endpoint.api_key.is_some());
576+
assert_eq!(endpoint.url.path(), DIRECT_ERRORS_INTAKE_URL_PATH);
577+
578+
std::env::remove_var("DD_API_KEY");
579+
std::env::remove_var("_DD_DIRECT_SUBMISSION_ENABLED");
580+
std::env::remove_var("DD_SITE");
541581
}
542582

543583
#[test]

datadog-crashtracker/src/crash_info/telemetry.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,13 @@ impl TelemetryCrashUploader {
148148

149149
let host = build_host();
150150

151-
let errors_intake_uploader =
152-
match ErrorsIntakeUploader::new(crashtracker_metadata, endpoint) {
153-
Ok(uploader) => Some(uploader),
154-
Err(e) => {
155-
eprintln!("Failed to create errors intake uploader: {e}");
156-
None
157-
}
158-
};
151+
let errors_intake_uploader = match ErrorsIntakeUploader::new(crashtracker_metadata) {
152+
Ok(uploader) => Some(uploader),
153+
Err(e) => {
154+
eprintln!("Failed to create errors intake uploader: {e}");
155+
None
156+
}
157+
};
159158

160159
let s = Self {
161160
metadata: TelemetryMetadata {

0 commit comments

Comments
 (0)