Skip to content

Commit 71ec75f

Browse files
committed
chore(stackable-telemetry): Make settings available to the Tracing::init() function
1 parent 5fa11ce commit 71ec75f

File tree

1 file changed

+74
-85
lines changed
  • crates/stackable-telemetry/src/tracing

1 file changed

+74
-85
lines changed

crates/stackable-telemetry/src/tracing/mod.rs

Lines changed: 74 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ use opentelemetry_sdk::{
1616
use opentelemetry_semantic_conventions::resource;
1717
use settings::{ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings};
1818
use snafu::{ResultExt as _, Snafu};
19-
use tracing::{level_filters::LevelFilter, subscriber::SetGlobalDefaultError};
19+
use tracing::subscriber::SetGlobalDefaultError;
2020
use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry};
2121

2222
pub mod settings;
2323

2424
type Result<T, E = Error> = std::result::Result<T, E>;
2525

26+
#[allow(missing_docs)]
2627
#[derive(Debug, Snafu)]
2728
pub enum Error {
2829
#[snafu(display("unable to install opentelemetry trace exporter"))]
@@ -126,9 +127,9 @@ pub enum Error {
126127
/// [5]: https://docs.rs/opentelemetry_sdk/latest/src/opentelemetry_sdk/logs/log_processor.rs.html
127128
pub struct Tracing {
128129
service_name: &'static str,
129-
console_log_config: SubscriberConfig,
130-
otlp_log_config: SubscriberConfig,
131-
otlp_trace_config: SubscriberConfig,
130+
console_log_settings: ConsoleLogSettings,
131+
otlp_log_settings: OtlpLogSettings,
132+
otlp_trace_settings: OtlpTraceSettings,
132133
logger_provider: Option<LoggerProvider>,
133134
}
134135

@@ -145,20 +146,23 @@ impl Tracing {
145146
pub fn init(mut self) -> Result<Tracing> {
146147
let mut layers: Vec<Box<dyn Layer<Registry> + Sync + Send>> = Vec::new();
147148

148-
if self.console_log_config.enabled {
149+
if self.console_log_settings.common_settings.enabled {
149150
let env_filter_layer = env_filter_builder(
150-
self.console_log_config.env_var,
151-
self.console_log_config.default_level_filter,
151+
&self
152+
.console_log_settings
153+
.common_settings
154+
.environment_variable,
155+
self.console_log_settings.common_settings.default_level,
152156
);
153157
let console_output_layer =
154158
tracing_subscriber::fmt::layer().with_filter(env_filter_layer);
155159
layers.push(console_output_layer.boxed());
156160
}
157161

158-
if self.otlp_log_config.enabled {
162+
if self.otlp_log_settings.common_settings.enabled {
159163
let env_filter_layer = env_filter_builder(
160-
self.otlp_log_config.env_var,
161-
self.otlp_log_config.default_level_filter,
164+
&self.otlp_log_settings.common_settings.environment_variable,
165+
self.otlp_log_settings.common_settings.default_level,
162166
)
163167
// TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved
164168
.add_directive("h2=off".parse().expect("invalid directive"));
@@ -183,10 +187,13 @@ impl Tracing {
183187
self.logger_provider = Some(otel_log);
184188
}
185189

186-
if self.otlp_trace_config.enabled {
190+
if self.otlp_trace_settings.common_settings.enabled {
187191
let env_filter_layer = env_filter_builder(
188-
self.otlp_trace_config.env_var,
189-
self.otlp_trace_config.default_level_filter,
192+
&self
193+
.otlp_trace_settings
194+
.common_settings
195+
.environment_variable,
196+
self.otlp_trace_settings.common_settings.default_level,
190197
)
191198
// TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved
192199
.add_directive("h2=off".parse().expect("invalid directive"));
@@ -234,12 +241,12 @@ impl Tracing {
234241
impl Drop for Tracing {
235242
fn drop(&mut self) {
236243
tracing::debug!(
237-
opentelemetry.tracing.enabled = self.otlp_trace_config.enabled,
238-
opentelemetry.logger.enabled = self.otlp_log_config.enabled,
244+
opentelemetry.tracing.enabled = self.otlp_trace_settings.common_settings.enabled,
245+
opentelemetry.logger.enabled = self.otlp_log_settings.common_settings.enabled,
239246
"shutting down opentelemetry OTLP providers"
240247
);
241248

242-
if self.otlp_trace_config.enabled {
249+
if self.otlp_trace_settings.common_settings.enabled {
243250
// NOTE (@NickLarsenNZ): This might eventually be replaced with something like SdkMeterProvider::shutdown(&self)
244251
// as has been done with the LoggerProvider (further below)
245252
// see: https://github.com/open-telemetry/opentelemetry-rust/pull/1412/files#r1409608679
@@ -318,31 +325,14 @@ impl BuilderState for builder_state::Config {}
318325
#[derive(Default)]
319326
pub struct TracingBuilder<S: BuilderState> {
320327
service_name: Option<&'static str>,
321-
console_log_config: SubscriberConfig,
322-
otlp_log_config: SubscriberConfig,
323-
otlp_trace_config: SubscriberConfig,
328+
console_log_settings: ConsoleLogSettings,
329+
otlp_log_settings: OtlpLogSettings,
330+
otlp_trace_settings: OtlpTraceSettings,
324331

325332
/// Allow the generic to be used (needed for impls).
326333
_marker: std::marker::PhantomData<S>,
327334
}
328335

329-
#[derive(Clone, Debug, PartialEq)]
330-
struct SubscriberConfig {
331-
enabled: bool,
332-
env_var: &'static str,
333-
default_level_filter: LevelFilter,
334-
}
335-
336-
impl Default for SubscriberConfig {
337-
fn default() -> Self {
338-
Self {
339-
enabled: false,
340-
env_var: EnvFilter::DEFAULT_ENV,
341-
default_level_filter: LevelFilter::OFF,
342-
}
343-
}
344-
}
345-
346336
impl TracingBuilder<builder_state::PreServiceName> {
347337
/// Set the service name used in OTLP exports, and console output.
348338
///
@@ -361,17 +351,13 @@ impl TracingBuilder<builder_state::Config> {
361351
/// variable.
362352
pub fn with_console_output(
363353
self,
364-
settings: ConsoleLogSettings,
354+
console_log_settings: ConsoleLogSettings,
365355
) -> TracingBuilder<builder_state::Config> {
366356
TracingBuilder {
367357
service_name: self.service_name,
368-
console_log_config: SubscriberConfig {
369-
enabled: settings.common_settings.enabled,
370-
env_var: settings.common_settings.environment_variable,
371-
default_level_filter: settings.common_settings.default_level,
372-
},
373-
otlp_log_config: self.otlp_log_config,
374-
otlp_trace_config: self.otlp_trace_config,
358+
console_log_settings,
359+
otlp_log_settings: self.otlp_log_settings,
360+
otlp_trace_settings: self.otlp_trace_settings,
375361
_marker: self._marker,
376362
}
377363
}
@@ -383,17 +369,13 @@ impl TracingBuilder<builder_state::Config> {
383369
/// in the opentelemetry crates. See [`Tracing`].
384370
pub fn with_otlp_log_exporter(
385371
self,
386-
settings: OtlpLogSettings,
372+
otlp_log_settings: OtlpLogSettings,
387373
) -> TracingBuilder<builder_state::Config> {
388374
TracingBuilder {
389375
service_name: self.service_name,
390-
console_log_config: self.console_log_config,
391-
otlp_log_config: SubscriberConfig {
392-
enabled: settings.common_settings.enabled,
393-
env_var: settings.common_settings.environment_variable,
394-
default_level_filter: settings.common_settings.default_level,
395-
},
396-
otlp_trace_config: self.otlp_trace_config,
376+
console_log_settings: self.console_log_settings,
377+
otlp_log_settings,
378+
otlp_trace_settings: self.otlp_trace_settings,
397379
_marker: self._marker,
398380
}
399381
}
@@ -405,17 +387,13 @@ impl TracingBuilder<builder_state::Config> {
405387
/// in the opentelemetry crates. See [`Tracing`].
406388
pub fn with_otlp_trace_exporter(
407389
self,
408-
settings: OtlpTraceSettings,
390+
otlp_trace_settings: OtlpTraceSettings,
409391
) -> TracingBuilder<builder_state::Config> {
410392
TracingBuilder {
411393
service_name: self.service_name,
412-
console_log_config: self.console_log_config,
413-
otlp_log_config: self.otlp_log_config,
414-
otlp_trace_config: SubscriberConfig {
415-
enabled: settings.common_settings.enabled,
416-
env_var: settings.common_settings.environment_variable,
417-
default_level_filter: settings.common_settings.default_level,
418-
},
394+
console_log_settings: self.console_log_settings,
395+
otlp_log_settings: self.otlp_log_settings,
396+
otlp_trace_settings,
419397
_marker: self._marker,
420398
}
421399
}
@@ -429,9 +407,9 @@ impl TracingBuilder<builder_state::Config> {
429407
service_name: self
430408
.service_name
431409
.expect("service_name must be configured at this point"),
432-
console_log_config: self.console_log_config,
433-
otlp_log_config: self.otlp_log_config,
434-
otlp_trace_config: self.otlp_trace_config,
410+
console_log_settings: self.console_log_settings,
411+
otlp_log_settings: self.otlp_log_settings,
412+
otlp_trace_settings: self.otlp_trace_settings,
435413
logger_provider: None,
436414
}
437415
}
@@ -448,6 +426,7 @@ fn env_filter_builder(env_var: &str, default_directive: impl Into<Directive>) ->
448426
#[cfg(test)]
449427
mod test {
450428
use settings::{Build as _, Settings};
429+
use tracing::level_filters::LevelFilter;
451430

452431
use super::*;
453432

@@ -479,15 +458,18 @@ mod test {
479458
.build();
480459

481460
assert_eq!(
482-
trace_guard.console_log_config,
483-
SubscriberConfig {
484-
enabled: true,
485-
env_var: "ABC_B",
486-
default_level_filter: LevelFilter::DEBUG
461+
trace_guard.console_log_settings,
462+
ConsoleLogSettings {
463+
common_settings: Settings {
464+
enabled: true,
465+
environment_variable: "ABC_B",
466+
default_level: LevelFilter::DEBUG
467+
},
468+
log_format: Default::default()
487469
}
488470
);
489-
assert!(!trace_guard.otlp_log_config.enabled);
490-
assert!(!trace_guard.otlp_trace_config.enabled);
471+
assert!(!trace_guard.otlp_log_settings.common_settings.enabled);
472+
assert!(!trace_guard.otlp_trace_settings.common_settings.enabled);
491473
}
492474

493475
#[test]
@@ -518,27 +500,34 @@ mod test {
518500
.build();
519501

520502
assert_eq!(
521-
trace_guard.console_log_config,
522-
SubscriberConfig {
523-
enabled: true,
524-
env_var: "ABC_CONSOLE",
525-
default_level_filter: LevelFilter::INFO
503+
trace_guard.console_log_settings,
504+
ConsoleLogSettings {
505+
common_settings: Settings {
506+
enabled: true,
507+
environment_variable: "ABC_CONSOLE",
508+
default_level: LevelFilter::INFO
509+
},
510+
log_format: Default::default()
526511
}
527512
);
528513
assert_eq!(
529-
trace_guard.otlp_log_config,
530-
SubscriberConfig {
531-
enabled: true,
532-
env_var: "ABC_OTLP_LOG",
533-
default_level_filter: LevelFilter::DEBUG
514+
trace_guard.otlp_log_settings,
515+
OtlpLogSettings {
516+
common_settings: Settings {
517+
enabled: true,
518+
environment_variable: "ABC_OTLP_LOG",
519+
default_level: LevelFilter::DEBUG
520+
},
534521
}
535522
);
536523
assert_eq!(
537-
trace_guard.otlp_trace_config,
538-
SubscriberConfig {
539-
enabled: true,
540-
env_var: "ABC_OTLP_TRACE",
541-
default_level_filter: LevelFilter::TRACE
524+
trace_guard.otlp_trace_settings,
525+
OtlpTraceSettings {
526+
common_settings: Settings {
527+
enabled: true,
528+
environment_variable: "ABC_OTLP_TRACE",
529+
default_level: LevelFilter::TRACE
530+
}
542531
}
543532
);
544533
}

0 commit comments

Comments
 (0)