Skip to content

Commit f875822

Browse files
feat(datadog-opentelemetry): adds a method to do non global init (#70)
# Motivation The code in dd-source observability splits the tracer init in two phases, creation and then global setup. This has advantages in some codebases, although we don't want it to be the default. # Additional Notes Anything else we should know when reviewing?
1 parent 1102d3f commit f875822

File tree

1 file changed

+37
-5
lines changed
  • datadog-opentelemetry/src

1 file changed

+37
-5
lines changed

datadog-opentelemetry/src/lib.rs

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,32 +91,58 @@ pub struct DatadogTracingBuilder {
9191
}
9292

9393
impl DatadogTracingBuilder {
94+
/// Sets the datadog specific configuration
95+
///
96+
/// Default: dd_trace::Config::builder().build()
9497
pub fn with_config(mut self, config: dd_trace::Config) -> Self {
9598
self.config = Some(config);
9699
self
97100
}
98101

102+
/// Sets the resource passed to the SDK. See [opentelemetry_sdk::Resource]
103+
///
104+
/// Default: Config::builder().build()
99105
pub fn with_resource(mut self, resource: opentelemetry_sdk::Resource) -> Self {
100106
self.resource = Some(resource);
101107
self
102108
}
103109

110+
/// Initializes the Tracer Provider, and the Text Map Propagator and install
111+
/// them globally
104112
pub fn init(self) -> SdkTracerProvider {
105-
let config = self
106-
.config
107-
.unwrap_or_else(|| dd_trace::Config::builder().build());
108-
let (tracer_provider, propagator) =
109-
make_tracer(Arc::new(config), self.tracer_provider, self.resource);
113+
let (tracer_provider, propagator) = self.init_local();
110114

111115
opentelemetry::global::set_text_map_propagator(propagator);
112116
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
113117
tracer_provider
114118
}
119+
120+
/// Initialize the Tracer Provider, and the Text Map Propagator without doing a global
121+
/// installation
122+
///
123+
/// You will need to set them up yourself, at a latter point if you want to use global tracing
124+
/// methods and library integrations
125+
///
126+
/// # Example
127+
///
128+
/// ```rust
129+
/// let (tracer_provider, propagator) = datadog_opentelemetry::tracing().init_local();
130+
///
131+
/// opentelemetry::global::set_text_map_propagator(propagator);
132+
/// opentelemetry::global::set_tracer_provider(tracer_provider.clone());
133+
/// ```
134+
pub fn init_local(self) -> (SdkTracerProvider, DatadogPropagator) {
135+
let config = self
136+
.config
137+
.unwrap_or_else(|| dd_trace::Config::builder().build());
138+
make_tracer(Arc::new(config), self.tracer_provider, self.resource)
139+
}
115140
}
116141

117142
impl DatadogTracingBuilder {
118143
// Methods forwarded to the otel tracer provider builder
119144

145+
/// See [opentelemetry_sdk::trace::TracerProviderBuilder::with_span_processor]
120146
pub fn with_span_processor<T: opentelemetry_sdk::trace::SpanProcessor + 'static>(
121147
mut self,
122148
processor: T,
@@ -126,12 +152,14 @@ impl DatadogTracingBuilder {
126152
}
127153

128154
/// Specify the number of events to be recorded per span.
155+
/// See [opentelemetry_sdk::trace::TracerProviderBuilder::with_max_events_per_span]
129156
pub fn with_max_events_per_span(mut self, max_events: u32) -> Self {
130157
self.tracer_provider = self.tracer_provider.with_max_events_per_span(max_events);
131158
self
132159
}
133160

134161
/// Specify the number of attributes to be recorded per span.
162+
/// See [opentelemetry_sdk::trace::TracerProviderBuilder::with_max_attributes_per_span]
135163
pub fn with_max_attributes_per_span(mut self, max_attributes: u32) -> Self {
136164
self.tracer_provider = self
137165
.tracer_provider
@@ -140,12 +168,14 @@ impl DatadogTracingBuilder {
140168
}
141169

142170
/// Specify the number of events to be recorded per span.
171+
/// See [opentelemetry_sdk::trace::TracerProviderBuilder::with_max_links_per_span]
143172
pub fn with_max_links_per_span(mut self, max_links: u32) -> Self {
144173
self.tracer_provider = self.tracer_provider.with_max_links_per_span(max_links);
145174
self
146175
}
147176

148177
/// Specify the number of attributes one event can have.
178+
/// See [opentelemetry_sdk::trace::TracerProviderBuilder::with_max_attributes_per_event]
149179
pub fn with_max_attributes_per_event(mut self, max_attributes: u32) -> Self {
150180
self.tracer_provider = self
151181
.tracer_provider
@@ -154,6 +184,7 @@ impl DatadogTracingBuilder {
154184
}
155185

156186
/// Specify the number of attributes one link can have.
187+
/// See [opentelemetry_sdk::trace::TracerProviderBuilder::with_max_attributes_per_link]
157188
pub fn with_max_attributes_per_link(mut self, max_attributes: u32) -> Self {
158189
self.tracer_provider = self
159190
.tracer_provider
@@ -162,6 +193,7 @@ impl DatadogTracingBuilder {
162193
}
163194

164195
/// Specify all limit via the span_limits
196+
/// See [opentelemetry_sdk::trace::TracerProviderBuilder::with_span_limits]
165197
pub fn with_span_limits(mut self, span_limits: opentelemetry_sdk::trace::SpanLimits) -> Self {
166198
self.tracer_provider = self.tracer_provider.with_span_limits(span_limits);
167199
self

0 commit comments

Comments
 (0)