10
10
//! [jaeger deployment guide]: https://www.jaegertracing.io/docs/1.31/deployment
11
11
12
12
use crate :: Process ;
13
- use opentelemetry:: sdk:: trace:: Config ;
14
- use opentelemetry:: sdk:: Resource ;
15
13
use opentelemetry:: trace:: { TraceError , TracerProvider } ;
16
14
use opentelemetry:: { global, sdk, KeyValue } ;
17
15
use opentelemetry_semantic_conventions as semcov;
18
- use std:: sync:: Arc ;
19
16
20
17
/// Config a exporter that sends the spans to a [jaeger agent](https://www.jaegertracing.io/docs/1.31/deployment/#agent).
21
18
pub mod agent;
@@ -54,35 +51,25 @@ trait HasRequiredConfig {
54
51
// There are multiple ways to set the service name. A `service.name` tag will be always added
55
52
// to the process tags.
56
53
fn build_config_and_process (
57
- sdk_resource : sdk:: Resource ,
58
- mut config : Option < sdk:: trace:: Config > ,
54
+ config : Option < sdk:: trace:: Config > ,
59
55
service_name_opt : Option < String > ,
60
56
) -> ( sdk:: trace:: Config , Process ) {
61
- let ( config, resource) = if let Some ( mut config) = config. take ( ) {
62
- let resource = if let Some ( resource) = config. resource . replace ( Arc :: new ( Resource :: empty ( ) ) )
63
- {
64
- sdk_resource. merge ( resource)
65
- } else {
66
- sdk_resource
67
- } ;
68
-
69
- ( config, resource)
70
- } else {
71
- ( Config :: default ( ) , sdk_resource)
72
- } ;
57
+ let config = config. unwrap_or_default ( ) ;
73
58
74
59
let service_name = service_name_opt. unwrap_or_else ( || {
75
- resource
60
+ config
61
+ . resource
76
62
. get ( semcov:: resource:: SERVICE_NAME )
77
63
. map ( |v| v. to_string ( ) )
78
64
. unwrap_or_else ( || "unknown_service" . to_string ( ) )
79
65
} ) ;
80
66
81
67
// merge the tags and resource. Resources take priority.
82
- let mut tags = resource
83
- . into_iter ( )
84
- . filter ( |( key, _) | * key != semcov:: resource:: SERVICE_NAME )
85
- . map ( |( key, value) | KeyValue :: new ( key, value) )
68
+ let mut tags = config
69
+ . resource
70
+ . iter ( )
71
+ . filter ( |( key, _) | * * key != semcov:: resource:: SERVICE_NAME )
72
+ . map ( |( key, value) | KeyValue :: new ( key. clone ( ) , value. clone ( ) ) )
86
73
. collect :: < Vec < KeyValue > > ( ) ;
87
74
88
75
tags. push ( KeyValue :: new (
@@ -101,51 +88,20 @@ mod tests {
101
88
use opentelemetry:: sdk:: Resource ;
102
89
use opentelemetry:: KeyValue ;
103
90
use std:: env;
104
- use std:: sync:: Arc ;
105
91
106
92
#[ test]
107
93
fn test_set_service_name ( ) {
108
94
let service_name = "halloween_service" . to_string ( ) ;
109
95
110
96
// set via builder's service name, it has highest priority
111
- let ( _, process) =
112
- build_config_and_process ( Resource :: empty ( ) , None , Some ( service_name. clone ( ) ) ) ;
97
+ let ( _, process) = build_config_and_process ( None , Some ( service_name. clone ( ) ) ) ;
113
98
assert_eq ! ( process. service_name, service_name) ;
114
99
115
100
// make sure the tags in resource are moved to process
116
101
let trace_config = Config :: default ( )
117
102
. with_resource ( Resource :: new ( vec ! [ KeyValue :: new( "test-key" , "test-value" ) ] ) ) ;
118
- let ( config, process) =
119
- build_config_and_process ( Resource :: empty ( ) , Some ( trace_config) , Some ( service_name) ) ;
120
- assert_eq ! ( config. resource, Some ( Arc :: new( Resource :: empty( ) ) ) ) ;
103
+ let ( _, process) = build_config_and_process ( Some ( trace_config) , Some ( service_name) ) ;
121
104
assert_eq ! ( process. tags. len( ) , 2 ) ;
122
-
123
- // sdk provided resource can override service name if users didn't provided service name to builder
124
- let ( _, process) = build_config_and_process (
125
- Resource :: new ( vec ! [ KeyValue :: new( "service.name" , "halloween_service" ) ] ) ,
126
- None ,
127
- None ,
128
- ) ;
129
- assert_eq ! ( process. service_name, "halloween_service" ) ;
130
-
131
- // users can also provided service.name from config's resource, in this case, it will override the
132
- // sdk provided service name
133
- let trace_config = Config :: default ( ) . with_resource ( Resource :: new ( vec ! [ KeyValue :: new(
134
- "service.name" ,
135
- "override_service" ,
136
- ) ] ) ) ;
137
- let ( _, process) = build_config_and_process (
138
- Resource :: new ( vec ! [ KeyValue :: new( "service.name" , "halloween_service" ) ] ) ,
139
- Some ( trace_config) ,
140
- None ,
141
- ) ;
142
-
143
- assert_eq ! ( process. service_name, "override_service" ) ;
144
- assert_eq ! ( process. tags. len( ) , 1 ) ;
145
- assert_eq ! (
146
- process. tags[ 0 ] ,
147
- KeyValue :: new( "service.name" , "override_service" )
148
- ) ;
149
105
}
150
106
151
107
#[ test]
0 commit comments