@@ -138,14 +138,6 @@ impl ErrorsIntakeConfig {
138
138
#[ cfg( not( windows) ) ]
139
139
return None ;
140
140
} )
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
- } )
149
141
. or_else ( || {
150
142
#[ cfg( unix) ]
151
143
return settings
@@ -154,6 +146,14 @@ impl ErrorsIntakeConfig {
154
146
#[ cfg( not( unix) ) ]
155
147
return None ;
156
148
} )
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
+ } )
157
157
. unwrap_or_else ( || format ! ( "http://{DEFAULT_AGENT_HOST}:{DEFAULT_AGENT_PORT}" ) )
158
158
}
159
159
@@ -177,7 +177,6 @@ impl ErrorsIntakeConfig {
177
177
}
178
178
179
179
pub fn from_settings ( settings : & ErrorsIntakeSettings ) -> Self {
180
- let trace_agent_url = Self :: trace_agent_url_from_setting ( settings) ;
181
180
let api_key = Self :: api_key_from_settings ( settings) ;
182
181
183
182
let mut this = Self {
@@ -186,9 +185,24 @@ impl ErrorsIntakeConfig {
186
185
debug_enabled : settings. shared_lib_debug ,
187
186
} ;
188
187
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) {
190
204
let _res = this. set_endpoint ( Endpoint {
191
- url,
205
+ url : parsed_url ,
192
206
api_key,
193
207
..Default :: default ( )
194
208
} ) ;
@@ -377,16 +391,8 @@ pub struct ErrorsIntakeUploader {
377
391
}
378
392
379
393
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 ( ) ;
390
396
Ok ( Self { cfg } )
391
397
}
392
398
@@ -484,6 +490,7 @@ mod tests {
484
490
assert_eq ! ( payload. ddsource, "crashtracker" ) ;
485
491
assert ! ( payload. ddtags. contains( "service:foo" ) ) ;
486
492
assert ! ( payload. ddtags. contains( "uuid:" ) ) ;
493
+ assert ! ( payload. ddtags. contains( "is_crash:true" ) ) ;
487
494
assert_eq ! ( payload. error. source_type, Some ( "Crashtracking" . to_string( ) ) ) ;
488
495
assert_eq ! ( payload. error. is_crash, Some ( true ) ) ;
489
496
}
@@ -518,26 +525,59 @@ mod tests {
518
525
std:: env:: remove_var ( "_DD_DIRECT_SUBMISSION_ENABLED" ) ;
519
526
std:: env:: remove_var ( "DD_SITE" ) ;
520
527
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
524
529
std:: env:: set_var ( "DD_API_KEY" , "test-key" ) ;
525
530
std:: env:: set_var ( "_DD_DIRECT_SUBMISSION_ENABLED" , "true" ) ;
526
531
527
532
let cfg = ErrorsIntakeConfig :: from_env ( ) ;
528
533
let endpoint = cfg. endpoint ( ) . unwrap ( ) ;
529
534
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" ) ) ;
532
541
assert ! ( endpoint. api_key. is_some( ) ) ;
533
542
534
543
// With direct submission enabled and API key, should use direct path
535
544
assert_eq ! ( endpoint. url. path( ) , DIRECT_ERRORS_INTAKE_URL_PATH ) ;
536
545
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" ) ;
537
555
std:: env:: remove_var ( "DD_AGENT_HOST" ) ;
538
556
std:: env:: remove_var ( "DD_TRACE_AGENT_PORT" ) ;
539
557
std:: env:: remove_var ( "DD_API_KEY" ) ;
540
558
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" ) ;
541
581
}
542
582
543
583
#[ test]
0 commit comments