From c0cdf5994862957577512156c17030d105134901 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 25 Oct 2024 11:28:29 +0200 Subject: [PATCH 01/19] chore(stackable-telemetry): move tracing to a module directory --- crates/stackable-telemetry/src/{tracing.rs => tracing/mod.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename crates/stackable-telemetry/src/{tracing.rs => tracing/mod.rs} (100%) diff --git a/crates/stackable-telemetry/src/tracing.rs b/crates/stackable-telemetry/src/tracing/mod.rs similarity index 100% rename from crates/stackable-telemetry/src/tracing.rs rename to crates/stackable-telemetry/src/tracing/mod.rs From e92dbdd41a966aab54e5e6eb9e7f3050c4c250ef Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 25 Oct 2024 11:37:33 +0200 Subject: [PATCH 02/19] feat(stackable-telemetry): Add a settings builder and implement it for console logging --- crates/stackable-telemetry/src/tracing/mod.rs | 38 +++++-- .../src/tracing/settings/console_log.rs | 87 +++++++++++++++ .../src/tracing/settings/mod.rs | 103 ++++++++++++++++++ 3 files changed, 220 insertions(+), 8 deletions(-) create mode 100644 crates/stackable-telemetry/src/tracing/settings/console_log.rs create mode 100644 crates/stackable-telemetry/src/tracing/settings/mod.rs diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index 2f61e9ac3..aadb4bbca 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -14,10 +14,13 @@ use opentelemetry_sdk::{ trace, Resource, }; use opentelemetry_semantic_conventions::resource; +use settings::ConsoleLogSettings; use snafu::{ResultExt as _, Snafu}; use tracing::{level_filters::LevelFilter, subscriber::SetGlobalDefaultError}; use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry}; +pub mod settings; + type Result = std::result::Result; #[derive(Debug, Snafu)] @@ -358,15 +361,14 @@ impl TracingBuilder { /// variable. pub fn with_console_output( self, - env_var: &'static str, - default_level_filter: LevelFilter, + settings: ConsoleLogSettings, ) -> TracingBuilder { TracingBuilder { service_name: self.service_name, console_log_config: SubscriberConfig { - enabled: true, - env_var, - default_level_filter, + enabled: settings.common_settings.enabled, + env_var: settings.common_settings.environment_variable, + default_level_filter: settings.common_settings.default_level, }, otlp_log_config: self.otlp_log_config, otlp_trace_config: self.otlp_trace_config, @@ -447,6 +449,8 @@ fn env_filter_builder(env_var: &str, default_directive: impl Into) -> #[cfg(test)] mod test { + use settings::{Build as _, Settings}; + use super::*; #[test] @@ -460,8 +464,20 @@ mod test { fn builder_with_console_output() { let trace_guard = Tracing::builder() .service_name("test") - .with_console_output("ABC_A", LevelFilter::TRACE) - .with_console_output("ABC_B", LevelFilter::DEBUG) + .with_console_output( + Settings::builder() + .env_var("ABC_A") + .default_level(LevelFilter::TRACE) + .enabled(true) + .build(), + ) + .with_console_output( + Settings::builder() + .env_var("ABC_B") + .default_level(LevelFilter::DEBUG) + .enabled(true) + .build(), + ) .build(); assert_eq!( @@ -480,7 +496,13 @@ mod test { fn builder_with_all() { let trace_guard = Tracing::builder() .service_name("test") - .with_console_output("ABC_CONSOLE", LevelFilter::INFO) + .with_console_output( + Settings::builder() + .env_var("ABC_CONSOLE") + .default_level(LevelFilter::INFO) + .enabled(true) + .build(), + ) .with_otlp_log_exporter("ABC_OTLP_LOG", LevelFilter::DEBUG) .with_otlp_trace_exporter("ABC_OTLP_TRACE", LevelFilter::TRACE) .build(); diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs new file mode 100644 index 000000000..17790c562 --- /dev/null +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -0,0 +1,87 @@ +use super::{Build, Settings, SettingsBuilder}; + +#[derive(Debug, Default, PartialEq)] +pub struct ConsoleLogSettings { + pub common_settings: Settings, + pub log_format: Format, +} + +#[derive(Debug, Default, PartialEq)] +pub enum Format { + #[default] + Plain, + // Json { pretty: bool }, + // LogFmt, +} + +pub struct ConsoleLogSettingsBuilder { + pub(crate) common_settings: Settings, + pub(crate) log_format: Format, +} + +impl ConsoleLogSettingsBuilder { + pub fn log_format(mut self, format: Format) -> Self { + self.log_format = format; + self + } + + pub fn build(self) -> ConsoleLogSettings { + self.into() + } +} + +impl From for ConsoleLogSettings { + fn from(value: ConsoleLogSettingsBuilder) -> Self { + Self { + common_settings: value.common_settings, + log_format: value.log_format, + } + } +} + +impl From for ConsoleLogSettingsBuilder { + fn from(value: SettingsBuilder) -> Self { + Self { + common_settings: value.into(), + log_format: Format::default(), + } + } +} + +impl Build for SettingsBuilder { + fn build(self) -> ConsoleLogSettings { + ConsoleLogSettings { + common_settings: self.into(), + ..Default::default() + } + } +} + +#[cfg(test)] +mod test { + use tracing::level_filters::LevelFilter; + + use super::*; + + #[test] + fn builds_settings() { + let expected = ConsoleLogSettings { + common_settings: Settings { + environment_variable: "hello", + enabled: true, + default_level: LevelFilter::DEBUG, + }, + log_format: Format::Plain, + }; + let result = Settings::builder() + .enabled(true) + .env_var("hello") + .default_level(LevelFilter::DEBUG) + .console_log_settings_builder() + .log_format(Format::Plain) + // color + .build(); + + assert_eq!(expected, result); + } +} diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs new file mode 100644 index 000000000..e4adcdfdf --- /dev/null +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -0,0 +1,103 @@ +use tracing::level_filters::LevelFilter; + +pub mod console_log; +pub use console_log::*; + +#[derive(Debug, PartialEq)] +pub struct Settings { + pub environment_variable: &'static str, + + pub enabled: bool, + + pub default_level: LevelFilter, +} + +impl Settings { + pub fn builder() -> SettingsBuilder { + SettingsBuilder::default() + } +} + +impl Default for Settings { + fn default() -> Self { + SettingsBuilder::default().into() + } +} + +pub struct SettingsBuilder { + environment_variable: &'static str, + enabled: bool, + default_level: LevelFilter, +} + +pub trait Build { + fn build(self) -> T; +} + +impl Build for SettingsBuilder { + fn build(self) -> Settings { + self.into() + } +} + +impl SettingsBuilder { + pub fn env_var(mut self, name: &'static str) -> Self { + self.environment_variable = name; + self + } + + pub fn enabled(mut self, enabled: bool) -> Self { + self.enabled = enabled; + self + } + + pub fn default_level(mut self, level: impl Into) -> Self { + self.default_level = level.into(); + self + } + + pub fn console_log_settings_builder(self) -> ConsoleLogSettingsBuilder { + self.into() + } +} + +impl Default for SettingsBuilder { + fn default() -> Self { + Self { + environment_variable: "RUST_LOG", + enabled: false, + default_level: LevelFilter::OFF, + } + } +} + +impl From for Settings { + fn from(value: SettingsBuilder) -> Self { + Self { + environment_variable: value.environment_variable, + enabled: value.enabled, + default_level: value.default_level, + } + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn builds_settings() { + let expected = Settings { + environment_variable: "hello", + enabled: true, + default_level: LevelFilter::DEBUG, + }; + let result = Settings::builder() + .enabled(true) + .env_var("hello") + .default_level(LevelFilter::DEBUG) + .build(); + + assert_eq!(expected, result); + } +} From cdedab7ad40bae8e7272c835529d113c35cc4479 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 25 Oct 2024 11:52:11 +0200 Subject: [PATCH 03/19] feat(stackable-telemetry): Add a settings builder for the otlp trace exporter --- crates/stackable-telemetry/src/tracing/mod.rs | 19 ++++-- .../src/tracing/settings/mod.rs | 7 ++ .../src/tracing/settings/otlp_trace.rs | 67 +++++++++++++++++++ 3 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index aadb4bbca..4042cb2df 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -14,7 +14,7 @@ use opentelemetry_sdk::{ trace, Resource, }; use opentelemetry_semantic_conventions::resource; -use settings::ConsoleLogSettings; +use settings::{ConsoleLogSettings, OtlpTraceSettings}; use snafu::{ResultExt as _, Snafu}; use tracing::{level_filters::LevelFilter, subscriber::SetGlobalDefaultError}; use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry}; @@ -406,17 +406,16 @@ impl TracingBuilder { /// in the opentelemetry crates. See [`Tracing`]. pub fn with_otlp_trace_exporter( self, - env_var: &'static str, - default_level_filter: LevelFilter, + settings: OtlpTraceSettings, ) -> TracingBuilder { TracingBuilder { service_name: self.service_name, console_log_config: self.console_log_config, otlp_log_config: self.otlp_log_config, otlp_trace_config: SubscriberConfig { - enabled: true, - env_var, - default_level_filter, + enabled: settings.common_settings.enabled, + env_var: settings.common_settings.environment_variable, + default_level_filter: settings.common_settings.default_level, }, _marker: self._marker, } @@ -504,7 +503,13 @@ mod test { .build(), ) .with_otlp_log_exporter("ABC_OTLP_LOG", LevelFilter::DEBUG) - .with_otlp_trace_exporter("ABC_OTLP_TRACE", LevelFilter::TRACE) + .with_otlp_trace_exporter( + Settings::builder() + .env_var("ABC_OTLP_TRACE") + .default_level(LevelFilter::TRACE) + .enabled(true) + .build(), + ) .build(); assert_eq!( diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index e4adcdfdf..8bc4f3da6 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -3,6 +3,9 @@ use tracing::level_filters::LevelFilter; pub mod console_log; pub use console_log::*; +pub mod otlp_trace; +pub use otlp_trace::*; + #[derive(Debug, PartialEq)] pub struct Settings { pub environment_variable: &'static str, @@ -59,6 +62,10 @@ impl SettingsBuilder { pub fn console_log_settings_builder(self) -> ConsoleLogSettingsBuilder { self.into() } + + pub fn otlp_trace_settings_builder(self) -> OtlpTraceSettingsBuilder { + self.into() + } } impl Default for SettingsBuilder { diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs new file mode 100644 index 000000000..73d82fd7a --- /dev/null +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -0,0 +1,67 @@ +use super::{Build, Settings, SettingsBuilder}; + +#[derive(Debug, Default, PartialEq)] +pub struct OtlpTraceSettings { + pub common_settings: Settings, +} + +pub struct OtlpTraceSettingsBuilder { + pub(crate) common_settings: Settings, +} + +impl OtlpTraceSettingsBuilder { + pub fn build(self) -> OtlpTraceSettings { + self.into() + } +} + +impl From for OtlpTraceSettingsBuilder { + fn from(value: SettingsBuilder) -> Self { + Self { + common_settings: value.into(), + } + } +} + +impl From for OtlpTraceSettings { + fn from(value: OtlpTraceSettingsBuilder) -> Self { + Self { + common_settings: value.common_settings, + } + } +} + +impl Build for SettingsBuilder { + fn build(self) -> OtlpTraceSettings { + OtlpTraceSettings { + common_settings: self.into(), + ..Default::default() + } + } +} + +#[cfg(test)] +mod test { + use tracing::level_filters::LevelFilter; + + use super::*; + + #[test] + fn builds_settings() { + let expected = OtlpTraceSettings { + common_settings: Settings { + environment_variable: "hello", + enabled: true, + default_level: LevelFilter::DEBUG, + }, + }; + let result = Settings::builder() + .enabled(true) + .env_var("hello") + .default_level(LevelFilter::DEBUG) + .otlp_trace_settings_builder() + .build(); + + assert_eq!(expected, result); + } +} From 2ca287cb2b55040e65f51de924335dd3808d4b3e Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 25 Oct 2024 11:56:32 +0200 Subject: [PATCH 04/19] feat(stackable-telemetry): Add a settings builder for the otlp log exporter --- crates/stackable-telemetry/src/tracing/mod.rs | 19 ++++-- .../src/tracing/settings/mod.rs | 7 ++ .../src/tracing/settings/otlp_log.rs | 66 +++++++++++++++++++ 3 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 crates/stackable-telemetry/src/tracing/settings/otlp_log.rs diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index 4042cb2df..0aab0763a 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -14,7 +14,7 @@ use opentelemetry_sdk::{ trace, Resource, }; use opentelemetry_semantic_conventions::resource; -use settings::{ConsoleLogSettings, OtlpTraceSettings}; +use settings::{ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; use snafu::{ResultExt as _, Snafu}; use tracing::{level_filters::LevelFilter, subscriber::SetGlobalDefaultError}; use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry}; @@ -383,16 +383,15 @@ impl TracingBuilder { /// in the opentelemetry crates. See [`Tracing`]. pub fn with_otlp_log_exporter( self, - env_var: &'static str, - default_level_filter: LevelFilter, + settings: OtlpLogSettings, ) -> TracingBuilder { TracingBuilder { service_name: self.service_name, console_log_config: self.console_log_config, otlp_log_config: SubscriberConfig { - enabled: true, - env_var, - default_level_filter, + enabled: settings.common_settings.enabled, + env_var: settings.common_settings.environment_variable, + default_level_filter: settings.common_settings.default_level, }, otlp_trace_config: self.otlp_trace_config, _marker: self._marker, @@ -502,7 +501,13 @@ mod test { .enabled(true) .build(), ) - .with_otlp_log_exporter("ABC_OTLP_LOG", LevelFilter::DEBUG) + .with_otlp_log_exporter( + Settings::builder() + .env_var("ABC_OTLP_LOG") + .default_level(LevelFilter::DEBUG) + .enabled(true) + .build(), + ) .with_otlp_trace_exporter( Settings::builder() .env_var("ABC_OTLP_TRACE") diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index 8bc4f3da6..f4d854598 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -3,6 +3,9 @@ use tracing::level_filters::LevelFilter; pub mod console_log; pub use console_log::*; +pub mod otlp_log; +pub use otlp_log::*; + pub mod otlp_trace; pub use otlp_trace::*; @@ -63,6 +66,10 @@ impl SettingsBuilder { self.into() } + pub fn otlp_log_settings_builder(self) -> OtlpLogSettingsBuilder { + self.into() + } + pub fn otlp_trace_settings_builder(self) -> OtlpTraceSettingsBuilder { self.into() } diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs new file mode 100644 index 000000000..c7212328c --- /dev/null +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -0,0 +1,66 @@ +use super::{Build, Settings, SettingsBuilder}; + +#[derive(Debug, Default, PartialEq)] +pub struct OtlpLogSettings { + pub common_settings: Settings, +} + +pub struct OtlpLogSettingsBuilder { + pub(crate) common_settings: Settings, +} + +impl OtlpLogSettingsBuilder { + pub fn build(self) -> OtlpLogSettings { + self.into() + } +} + +impl From for OtlpLogSettingsBuilder { + fn from(value: SettingsBuilder) -> Self { + Self { + common_settings: value.into(), + } + } +} + +impl From for OtlpLogSettings { + fn from(value: OtlpLogSettingsBuilder) -> Self { + Self { + common_settings: value.common_settings, + } + } +} + +impl Build for SettingsBuilder { + fn build(self) -> OtlpLogSettings { + OtlpLogSettings { + common_settings: self.into(), + ..Default::default() + } + } +} +#[cfg(test)] +mod test { + use tracing::level_filters::LevelFilter; + + use super::*; + + #[test] + fn builds_settings() { + let expected = OtlpLogSettings { + common_settings: Settings { + environment_variable: "hello", + enabled: true, + default_level: LevelFilter::DEBUG, + }, + }; + let result = Settings::builder() + .enabled(true) + .env_var("hello") + .default_level(LevelFilter::DEBUG) + .otlp_log_settings_builder() + .build(); + + assert_eq!(expected, result); + } +} From a502da7c5812ef34f95eeb02893b3b49ee7e804c Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 25 Oct 2024 17:22:16 +0200 Subject: [PATCH 05/19] chore(stackable-telemetry): Make settings available to the Tracing::init() function --- crates/stackable-telemetry/src/tracing/mod.rs | 159 ++++++++---------- 1 file changed, 74 insertions(+), 85 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index 0aab0763a..cccf120ce 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -16,13 +16,14 @@ use opentelemetry_sdk::{ use opentelemetry_semantic_conventions::resource; use settings::{ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; use snafu::{ResultExt as _, Snafu}; -use tracing::{level_filters::LevelFilter, subscriber::SetGlobalDefaultError}; +use tracing::subscriber::SetGlobalDefaultError; use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry}; pub mod settings; type Result = std::result::Result; +#[allow(missing_docs)] #[derive(Debug, Snafu)] pub enum Error { #[snafu(display("unable to install opentelemetry trace exporter"))] @@ -126,9 +127,9 @@ pub enum Error { /// [5]: https://docs.rs/opentelemetry_sdk/latest/src/opentelemetry_sdk/logs/log_processor.rs.html pub struct Tracing { service_name: &'static str, - console_log_config: SubscriberConfig, - otlp_log_config: SubscriberConfig, - otlp_trace_config: SubscriberConfig, + console_log_settings: ConsoleLogSettings, + otlp_log_settings: OtlpLogSettings, + otlp_trace_settings: OtlpTraceSettings, logger_provider: Option, } @@ -145,20 +146,23 @@ impl Tracing { pub fn init(mut self) -> Result { let mut layers: Vec + Sync + Send>> = Vec::new(); - if self.console_log_config.enabled { + if self.console_log_settings.common_settings.enabled { let env_filter_layer = env_filter_builder( - self.console_log_config.env_var, - self.console_log_config.default_level_filter, + &self + .console_log_settings + .common_settings + .environment_variable, + self.console_log_settings.common_settings.default_level, ); let console_output_layer = tracing_subscriber::fmt::layer().with_filter(env_filter_layer); layers.push(console_output_layer.boxed()); } - if self.otlp_log_config.enabled { + if self.otlp_log_settings.common_settings.enabled { let env_filter_layer = env_filter_builder( - self.otlp_log_config.env_var, - self.otlp_log_config.default_level_filter, + &self.otlp_log_settings.common_settings.environment_variable, + self.otlp_log_settings.common_settings.default_level, ) // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); @@ -183,10 +187,13 @@ impl Tracing { self.logger_provider = Some(otel_log); } - if self.otlp_trace_config.enabled { + if self.otlp_trace_settings.common_settings.enabled { let env_filter_layer = env_filter_builder( - self.otlp_trace_config.env_var, - self.otlp_trace_config.default_level_filter, + &self + .otlp_trace_settings + .common_settings + .environment_variable, + self.otlp_trace_settings.common_settings.default_level, ) // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); @@ -234,12 +241,12 @@ impl Tracing { impl Drop for Tracing { fn drop(&mut self) { tracing::debug!( - opentelemetry.tracing.enabled = self.otlp_trace_config.enabled, - opentelemetry.logger.enabled = self.otlp_log_config.enabled, + opentelemetry.tracing.enabled = self.otlp_trace_settings.common_settings.enabled, + opentelemetry.logger.enabled = self.otlp_log_settings.common_settings.enabled, "shutting down opentelemetry OTLP providers" ); - if self.otlp_trace_config.enabled { + if self.otlp_trace_settings.common_settings.enabled { // NOTE (@NickLarsenNZ): This might eventually be replaced with something like SdkMeterProvider::shutdown(&self) // as has been done with the LoggerProvider (further below) // see: https://github.com/open-telemetry/opentelemetry-rust/pull/1412/files#r1409608679 @@ -318,31 +325,14 @@ impl BuilderState for builder_state::Config {} #[derive(Default)] pub struct TracingBuilder { service_name: Option<&'static str>, - console_log_config: SubscriberConfig, - otlp_log_config: SubscriberConfig, - otlp_trace_config: SubscriberConfig, + console_log_settings: ConsoleLogSettings, + otlp_log_settings: OtlpLogSettings, + otlp_trace_settings: OtlpTraceSettings, /// Allow the generic to be used (needed for impls). _marker: std::marker::PhantomData, } -#[derive(Clone, Debug, PartialEq)] -struct SubscriberConfig { - enabled: bool, - env_var: &'static str, - default_level_filter: LevelFilter, -} - -impl Default for SubscriberConfig { - fn default() -> Self { - Self { - enabled: false, - env_var: EnvFilter::DEFAULT_ENV, - default_level_filter: LevelFilter::OFF, - } - } -} - impl TracingBuilder { /// Set the service name used in OTLP exports, and console output. /// @@ -361,17 +351,13 @@ impl TracingBuilder { /// variable. pub fn with_console_output( self, - settings: ConsoleLogSettings, + console_log_settings: ConsoleLogSettings, ) -> TracingBuilder { TracingBuilder { service_name: self.service_name, - console_log_config: SubscriberConfig { - enabled: settings.common_settings.enabled, - env_var: settings.common_settings.environment_variable, - default_level_filter: settings.common_settings.default_level, - }, - otlp_log_config: self.otlp_log_config, - otlp_trace_config: self.otlp_trace_config, + console_log_settings, + otlp_log_settings: self.otlp_log_settings, + otlp_trace_settings: self.otlp_trace_settings, _marker: self._marker, } } @@ -383,17 +369,13 @@ impl TracingBuilder { /// in the opentelemetry crates. See [`Tracing`]. pub fn with_otlp_log_exporter( self, - settings: OtlpLogSettings, + otlp_log_settings: OtlpLogSettings, ) -> TracingBuilder { TracingBuilder { service_name: self.service_name, - console_log_config: self.console_log_config, - otlp_log_config: SubscriberConfig { - enabled: settings.common_settings.enabled, - env_var: settings.common_settings.environment_variable, - default_level_filter: settings.common_settings.default_level, - }, - otlp_trace_config: self.otlp_trace_config, + console_log_settings: self.console_log_settings, + otlp_log_settings, + otlp_trace_settings: self.otlp_trace_settings, _marker: self._marker, } } @@ -405,17 +387,13 @@ impl TracingBuilder { /// in the opentelemetry crates. See [`Tracing`]. pub fn with_otlp_trace_exporter( self, - settings: OtlpTraceSettings, + otlp_trace_settings: OtlpTraceSettings, ) -> TracingBuilder { TracingBuilder { service_name: self.service_name, - console_log_config: self.console_log_config, - otlp_log_config: self.otlp_log_config, - otlp_trace_config: SubscriberConfig { - enabled: settings.common_settings.enabled, - env_var: settings.common_settings.environment_variable, - default_level_filter: settings.common_settings.default_level, - }, + console_log_settings: self.console_log_settings, + otlp_log_settings: self.otlp_log_settings, + otlp_trace_settings, _marker: self._marker, } } @@ -429,9 +407,9 @@ impl TracingBuilder { service_name: self .service_name .expect("service_name must be configured at this point"), - console_log_config: self.console_log_config, - otlp_log_config: self.otlp_log_config, - otlp_trace_config: self.otlp_trace_config, + console_log_settings: self.console_log_settings, + otlp_log_settings: self.otlp_log_settings, + otlp_trace_settings: self.otlp_trace_settings, logger_provider: None, } } @@ -448,6 +426,7 @@ fn env_filter_builder(env_var: &str, default_directive: impl Into) -> #[cfg(test)] mod test { use settings::{Build as _, Settings}; + use tracing::level_filters::LevelFilter; use super::*; @@ -479,15 +458,18 @@ mod test { .build(); assert_eq!( - trace_guard.console_log_config, - SubscriberConfig { - enabled: true, - env_var: "ABC_B", - default_level_filter: LevelFilter::DEBUG + trace_guard.console_log_settings, + ConsoleLogSettings { + common_settings: Settings { + enabled: true, + environment_variable: "ABC_B", + default_level: LevelFilter::DEBUG + }, + log_format: Default::default() } ); - assert!(!trace_guard.otlp_log_config.enabled); - assert!(!trace_guard.otlp_trace_config.enabled); + assert!(!trace_guard.otlp_log_settings.common_settings.enabled); + assert!(!trace_guard.otlp_trace_settings.common_settings.enabled); } #[test] @@ -518,27 +500,34 @@ mod test { .build(); assert_eq!( - trace_guard.console_log_config, - SubscriberConfig { - enabled: true, - env_var: "ABC_CONSOLE", - default_level_filter: LevelFilter::INFO + trace_guard.console_log_settings, + ConsoleLogSettings { + common_settings: Settings { + enabled: true, + environment_variable: "ABC_CONSOLE", + default_level: LevelFilter::INFO + }, + log_format: Default::default() } ); assert_eq!( - trace_guard.otlp_log_config, - SubscriberConfig { - enabled: true, - env_var: "ABC_OTLP_LOG", - default_level_filter: LevelFilter::DEBUG + trace_guard.otlp_log_settings, + OtlpLogSettings { + common_settings: Settings { + enabled: true, + environment_variable: "ABC_OTLP_LOG", + default_level: LevelFilter::DEBUG + }, } ); assert_eq!( - trace_guard.otlp_trace_config, - SubscriberConfig { - enabled: true, - env_var: "ABC_OTLP_TRACE", - default_level_filter: LevelFilter::TRACE + trace_guard.otlp_trace_settings, + OtlpTraceSettings { + common_settings: Settings { + enabled: true, + environment_variable: "ABC_OTLP_TRACE", + default_level: LevelFilter::TRACE + } } ); } From cd609aa308a0b3ca6b18b5df2cd966e5ebd09a30 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Sat, 26 Oct 2024 01:18:15 +0200 Subject: [PATCH 06/19] chore(stackable-telemetry): Introduce the CommonSettings trait for quicker access to common settings from subscriber specific settings --- crates/stackable-telemetry/src/tracing/mod.rs | 26 +++++++++---------- .../src/tracing/settings/console_log.rs | 18 ++++++++++++- .../src/tracing/settings/mod.rs | 7 +++++ .../src/tracing/settings/otlp_log.rs | 19 +++++++++++++- .../src/tracing/settings/otlp_trace.rs | 18 ++++++++++++- 5 files changed, 72 insertions(+), 16 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index cccf120ce..5758484f1 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -14,7 +14,7 @@ use opentelemetry_sdk::{ trace, Resource, }; use opentelemetry_semantic_conventions::resource; -use settings::{ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; +use settings::{CommonSettings as _, ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; use snafu::{ResultExt as _, Snafu}; use tracing::subscriber::SetGlobalDefaultError; use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry}; @@ -146,23 +146,23 @@ impl Tracing { pub fn init(mut self) -> Result { let mut layers: Vec + Sync + Send>> = Vec::new(); - if self.console_log_settings.common_settings.enabled { + if self.console_log_settings.enabled() { let env_filter_layer = env_filter_builder( &self .console_log_settings .common_settings .environment_variable, - self.console_log_settings.common_settings.default_level, + self.console_log_settings.default_level(), ); let console_output_layer = tracing_subscriber::fmt::layer().with_filter(env_filter_layer); layers.push(console_output_layer.boxed()); } - if self.otlp_log_settings.common_settings.enabled { + if self.otlp_log_settings.enabled() { let env_filter_layer = env_filter_builder( - &self.otlp_log_settings.common_settings.environment_variable, - self.otlp_log_settings.common_settings.default_level, + &self.otlp_log_settings.environment_variable(), + self.otlp_log_settings.default_level(), ) // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); @@ -187,13 +187,13 @@ impl Tracing { self.logger_provider = Some(otel_log); } - if self.otlp_trace_settings.common_settings.enabled { + if self.otlp_trace_settings.enabled() { let env_filter_layer = env_filter_builder( &self .otlp_trace_settings .common_settings .environment_variable, - self.otlp_trace_settings.common_settings.default_level, + self.otlp_trace_settings.default_level(), ) // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); @@ -241,12 +241,12 @@ impl Tracing { impl Drop for Tracing { fn drop(&mut self) { tracing::debug!( - opentelemetry.tracing.enabled = self.otlp_trace_settings.common_settings.enabled, - opentelemetry.logger.enabled = self.otlp_log_settings.common_settings.enabled, + opentelemetry.tracing.enabled = self.otlp_trace_settings.enabled(), + opentelemetry.logger.enabled = self.otlp_log_settings.enabled(), "shutting down opentelemetry OTLP providers" ); - if self.otlp_trace_settings.common_settings.enabled { + if self.otlp_trace_settings.enabled() { // NOTE (@NickLarsenNZ): This might eventually be replaced with something like SdkMeterProvider::shutdown(&self) // as has been done with the LoggerProvider (further below) // see: https://github.com/open-telemetry/opentelemetry-rust/pull/1412/files#r1409608679 @@ -468,8 +468,8 @@ mod test { log_format: Default::default() } ); - assert!(!trace_guard.otlp_log_settings.common_settings.enabled); - assert!(!trace_guard.otlp_trace_settings.common_settings.enabled); + assert!(!trace_guard.otlp_log_settings.enabled()); + assert!(!trace_guard.otlp_trace_settings.enabled()); } #[test] diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 17790c562..838dd4be2 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -1,4 +1,6 @@ -use super::{Build, Settings, SettingsBuilder}; +use tracing::level_filters::LevelFilter; + +use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct ConsoleLogSettings { @@ -57,6 +59,20 @@ impl Build for SettingsBuilder { } } +impl CommonSettings for ConsoleLogSettings { + fn environment_variable(&self) -> &'static str { + self.common_settings.environment_variable + } + + fn enabled(&self) -> bool { + self.common_settings.enabled + } + + fn default_level(&self) -> LevelFilter { + self.common_settings.default_level + } +} + #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index f4d854598..f44e95cc9 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -9,6 +9,13 @@ pub use otlp_log::*; pub mod otlp_trace; pub use otlp_trace::*; +// this trait is to make it simpler to access common settings from specific settings. +pub trait CommonSettings { + fn environment_variable(&self) -> &'static str; + fn enabled(&self) -> bool; + fn default_level(&self) -> LevelFilter; +} + #[derive(Debug, PartialEq)] pub struct Settings { pub environment_variable: &'static str, diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index c7212328c..a8164a6d5 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -1,4 +1,6 @@ -use super::{Build, Settings, SettingsBuilder}; +use tracing::level_filters::LevelFilter; + +use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct OtlpLogSettings { @@ -39,6 +41,21 @@ impl Build for SettingsBuilder { } } } + +impl CommonSettings for OtlpLogSettings { + fn environment_variable(&self) -> &'static str { + self.common_settings.environment_variable + } + + fn enabled(&self) -> bool { + self.common_settings.enabled + } + + fn default_level(&self) -> LevelFilter { + self.common_settings.default_level + } +} + #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index 73d82fd7a..a66d03974 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -1,4 +1,6 @@ -use super::{Build, Settings, SettingsBuilder}; +use tracing::level_filters::LevelFilter; + +use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct OtlpTraceSettings { @@ -40,6 +42,20 @@ impl Build for SettingsBuilder { } } +impl CommonSettings for OtlpTraceSettings { + fn environment_variable(&self) -> &'static str { + self.common_settings.environment_variable + } + + fn enabled(&self) -> bool { + self.common_settings.enabled + } + + fn default_level(&self) -> LevelFilter { + self.common_settings.default_level + } +} + #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; From 98e7acde60d09abe7302b1ecdf0ffaf14968d756 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Sat, 26 Oct 2024 03:25:17 +0200 Subject: [PATCH 07/19] refactor(stackable-telemetry): Rename env_var() for consistency, reorder fields --- crates/stackable-telemetry/src/tracing/mod.rs | 6 ++--- .../src/tracing/settings/console_log.rs | 14 +++++----- .../src/tracing/settings/mod.rs | 26 +++++++++---------- .../src/tracing/settings/otlp_log.rs | 14 +++++----- .../src/tracing/settings/otlp_trace.rs | 14 +++++----- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index 5758484f1..f3181ae28 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -443,14 +443,14 @@ mod test { .service_name("test") .with_console_output( Settings::builder() - .env_var("ABC_A") + .environment_variable("ABC_A") .default_level(LevelFilter::TRACE) .enabled(true) .build(), ) .with_console_output( Settings::builder() - .env_var("ABC_B") + .environment_variable("ABC_B") .default_level(LevelFilter::DEBUG) .enabled(true) .build(), @@ -478,7 +478,7 @@ mod test { .service_name("test") .with_console_output( Settings::builder() - .env_var("ABC_CONSOLE") + .environment_variable("ABC_CONSOLE") .default_level(LevelFilter::INFO) .enabled(true) .build(), diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 838dd4be2..360f10246 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -64,13 +64,13 @@ impl CommonSettings for ConsoleLogSettings { self.common_settings.environment_variable } - fn enabled(&self) -> bool { - self.common_settings.enabled - } - fn default_level(&self) -> LevelFilter { self.common_settings.default_level } + + fn enabled(&self) -> bool { + self.common_settings.enabled + } } #[cfg(test)] @@ -84,15 +84,15 @@ mod test { let expected = ConsoleLogSettings { common_settings: Settings { environment_variable: "hello", - enabled: true, default_level: LevelFilter::DEBUG, + enabled: true, }, log_format: Format::Plain, }; let result = Settings::builder() - .enabled(true) - .env_var("hello") + .environment_variable("hello") .default_level(LevelFilter::DEBUG) + .enabled(true) .console_log_settings_builder() .log_format(Format::Plain) // color diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index f44e95cc9..459ab131f 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -12,17 +12,17 @@ pub use otlp_trace::*; // this trait is to make it simpler to access common settings from specific settings. pub trait CommonSettings { fn environment_variable(&self) -> &'static str; - fn enabled(&self) -> bool; fn default_level(&self) -> LevelFilter; + fn enabled(&self) -> bool; } #[derive(Debug, PartialEq)] pub struct Settings { pub environment_variable: &'static str, - pub enabled: bool, - pub default_level: LevelFilter, + + pub enabled: bool, } impl Settings { @@ -54,18 +54,18 @@ impl Build for SettingsBuilder { } impl SettingsBuilder { - pub fn env_var(mut self, name: &'static str) -> Self { + pub fn environment_variable(mut self, name: &'static str) -> Self { self.environment_variable = name; self } - pub fn enabled(mut self, enabled: bool) -> Self { - self.enabled = enabled; + pub fn default_level(mut self, level: impl Into) -> Self { + self.default_level = level.into(); self } - pub fn default_level(mut self, level: impl Into) -> Self { - self.default_level = level.into(); + pub fn enabled(mut self, enabled: bool) -> Self { + self.enabled = enabled; self } @@ -86,8 +86,8 @@ impl Default for SettingsBuilder { fn default() -> Self { Self { environment_variable: "RUST_LOG", - enabled: false, default_level: LevelFilter::OFF, + enabled: false, } } } @@ -96,8 +96,8 @@ impl From for Settings { fn from(value: SettingsBuilder) -> Self { Self { environment_variable: value.environment_variable, - enabled: value.enabled, default_level: value.default_level, + enabled: value.enabled, } } } @@ -110,13 +110,13 @@ mod test { fn builds_settings() { let expected = Settings { environment_variable: "hello", - enabled: true, default_level: LevelFilter::DEBUG, + enabled: true, }; let result = Settings::builder() - .enabled(true) - .env_var("hello") + .environment_variable("hello") .default_level(LevelFilter::DEBUG) + .enabled(true) .build(); assert_eq!(expected, result); diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index a8164a6d5..48052d805 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -47,13 +47,13 @@ impl CommonSettings for OtlpLogSettings { self.common_settings.environment_variable } - fn enabled(&self) -> bool { - self.common_settings.enabled - } - fn default_level(&self) -> LevelFilter { self.common_settings.default_level } + + fn enabled(&self) -> bool { + self.common_settings.enabled + } } #[cfg(test)] @@ -67,14 +67,14 @@ mod test { let expected = OtlpLogSettings { common_settings: Settings { environment_variable: "hello", - enabled: true, default_level: LevelFilter::DEBUG, + enabled: true, }, }; let result = Settings::builder() - .enabled(true) - .env_var("hello") + .environment_variable("hello") .default_level(LevelFilter::DEBUG) + .enabled(true) .otlp_log_settings_builder() .build(); diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index a66d03974..2387b6824 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -47,13 +47,13 @@ impl CommonSettings for OtlpTraceSettings { self.common_settings.environment_variable } - fn enabled(&self) -> bool { - self.common_settings.enabled - } - fn default_level(&self) -> LevelFilter { self.common_settings.default_level } + + fn enabled(&self) -> bool { + self.common_settings.enabled + } } #[cfg(test)] @@ -67,14 +67,14 @@ mod test { let expected = OtlpTraceSettings { common_settings: Settings { environment_variable: "hello", - enabled: true, default_level: LevelFilter::DEBUG, + enabled: true, }, }; let result = Settings::builder() - .enabled(true) - .env_var("hello") + .environment_variable("hello") .default_level(LevelFilter::DEBUG) + .enabled(true) .otlp_trace_settings_builder() .build(); From 51ae3ed502f683eb75cab3549c5cf42440954e2d Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Sat, 26 Oct 2024 03:30:21 +0200 Subject: [PATCH 08/19] chore(stackable-telemetry): Add SettingsDouble and SettingsTriple tuple and From impls as a config shortcut similar to before this PR --- crates/stackable-telemetry/src/tracing/mod.rs | 30 ++++++++----------- .../src/tracing/settings/console_log.rs | 20 ++++++++++++- .../src/tracing/settings/mod.rs | 25 ++++++++++++++++ .../src/tracing/settings/otlp_log.rs | 20 ++++++++++++- .../src/tracing/settings/otlp_trace.rs | 20 ++++++++++++- 5 files changed, 94 insertions(+), 21 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index f3181ae28..2a88d974c 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -44,7 +44,7 @@ pub enum Error { /// /// # Usage: /// ``` -/// use stackable_telemetry::tracing::{Tracing, Error}; +/// use stackable_telemetry::tracing::{Tracing, Error, settings::{Build as _, Settings}}; /// use tracing_subscriber::filter::LevelFilter; /// /// #[tokio::main] @@ -53,9 +53,15 @@ pub enum Error { /// // `let _ =`, as that will drop immediately. /// let _tracing_guard = Tracing::builder() /// .service_name("test") -/// .with_console_output("TEST_CONSOLE", LevelFilter::INFO) -/// .with_otlp_log_exporter("TEST_OTLP_LOG", LevelFilter::DEBUG) -/// .with_otlp_trace_exporter("TEST_OTLP_TRACE", LevelFilter::TRACE) +/// .with_console_output( +/// Settings::builder() +/// .environment_variable("TEST_CONSOLE") +/// .default_level(LevelFilter::INFO) +/// .enabled(true) +/// .build() +/// ) +/// .with_otlp_log_exporter(("TEST_OTLP_LOG", LevelFilter::DEBUG).into()) +/// .with_otlp_trace_exporter(("TEST_OTLP_TRACE", LevelFilter::TRACE).into()) /// .build() /// .init()?; /// @@ -483,20 +489,8 @@ mod test { .enabled(true) .build(), ) - .with_otlp_log_exporter( - Settings::builder() - .env_var("ABC_OTLP_LOG") - .default_level(LevelFilter::DEBUG) - .enabled(true) - .build(), - ) - .with_otlp_trace_exporter( - Settings::builder() - .env_var("ABC_OTLP_TRACE") - .default_level(LevelFilter::TRACE) - .enabled(true) - .build(), - ) + .with_otlp_log_exporter(("ABC_OTLP_LOG", LevelFilter::DEBUG).into()) + .with_otlp_trace_exporter(("ABC_OTLP_TRACE", LevelFilter::TRACE).into()) .build(); assert_eq!( diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 360f10246..30a7eba22 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -1,6 +1,6 @@ use tracing::level_filters::LevelFilter; -use super::{Build, CommonSettings, Settings, SettingsBuilder}; +use super::{Build, CommonSettings, Settings, SettingsBuilder, SettingsDouble, SettingsTriple}; #[derive(Debug, Default, PartialEq)] pub struct ConsoleLogSettings { @@ -73,6 +73,24 @@ impl CommonSettings for ConsoleLogSettings { } } +impl From for ConsoleLogSettings { + fn from(value: SettingsDouble) -> Self { + Self { + common_settings: value.into(), + ..Default::default() + } + } +} + +impl From for ConsoleLogSettings { + fn from(value: SettingsTriple) -> Self { + Self { + common_settings: value.into(), + ..Default::default() + } + } +} + #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index 459ab131f..a0a99f862 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -102,6 +102,31 @@ impl From for Settings { } } +pub(crate) type SettingsDouble = (&'static str, LevelFilter); +pub(crate) type SettingsTriple = (&'static str, LevelFilter, bool); + +// for enabling a subscriber in one line with no extra settings +impl From for Settings { + fn from((environment_variable, default_level): SettingsDouble) -> Self { + Settings { + environment_variable, + default_level, + enabled: true, + } + } +} + +// for configuring a subscriber in one line with no extra settings +impl From for Settings { + fn from((environment_variable, default_level, enabled): SettingsTriple) -> Self { + Settings { + environment_variable, + default_level, + enabled, + } + } +} + #[cfg(test)] mod test { use super::*; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index 48052d805..e36b73fa7 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -1,6 +1,6 @@ use tracing::level_filters::LevelFilter; -use super::{Build, CommonSettings, Settings, SettingsBuilder}; +use super::{Build, CommonSettings, Settings, SettingsBuilder, SettingsDouble, SettingsTriple}; #[derive(Debug, Default, PartialEq)] pub struct OtlpLogSettings { @@ -56,6 +56,24 @@ impl CommonSettings for OtlpLogSettings { } } +impl From for OtlpLogSettings { + fn from(value: SettingsDouble) -> Self { + Self { + common_settings: value.into(), + ..Default::default() + } + } +} + +impl From for OtlpLogSettings { + fn from(value: SettingsTriple) -> Self { + Self { + common_settings: value.into(), + ..Default::default() + } + } +} + #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index 2387b6824..5728bc7b6 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -1,6 +1,6 @@ use tracing::level_filters::LevelFilter; -use super::{Build, CommonSettings, Settings, SettingsBuilder}; +use super::{Build, CommonSettings, Settings, SettingsBuilder, SettingsDouble, SettingsTriple}; #[derive(Debug, Default, PartialEq)] pub struct OtlpTraceSettings { @@ -56,6 +56,24 @@ impl CommonSettings for OtlpTraceSettings { } } +impl From for OtlpTraceSettings { + fn from(value: SettingsDouble) -> Self { + Self { + common_settings: value.into(), + ..Default::default() + } + } +} + +impl From for OtlpTraceSettings { + fn from(value: SettingsTriple) -> Self { + Self { + common_settings: value.into(), + ..Default::default() + } + } +} + #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; From 41157ccb1022e307c73bae9790188ecae63d52f1 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Mon, 28 Oct 2024 11:36:33 +0100 Subject: [PATCH 09/19] chore(stackable-telemetry): Resolve clippy warnings --- crates/stackable-telemetry/src/tracing/mod.rs | 8 +++----- .../stackable-telemetry/src/tracing/settings/otlp_log.rs | 6 +++--- .../src/tracing/settings/otlp_trace.rs | 6 +++--- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index 2a88d974c..d4fc68c75 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -154,8 +154,7 @@ impl Tracing { if self.console_log_settings.enabled() { let env_filter_layer = env_filter_builder( - &self - .console_log_settings + self.console_log_settings .common_settings .environment_variable, self.console_log_settings.default_level(), @@ -167,7 +166,7 @@ impl Tracing { if self.otlp_log_settings.enabled() { let env_filter_layer = env_filter_builder( - &self.otlp_log_settings.environment_variable(), + self.otlp_log_settings.environment_variable(), self.otlp_log_settings.default_level(), ) // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved @@ -195,8 +194,7 @@ impl Tracing { if self.otlp_trace_settings.enabled() { let env_filter_layer = env_filter_builder( - &self - .otlp_trace_settings + self.otlp_trace_settings .common_settings .environment_variable, self.otlp_trace_settings.default_level(), diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index e36b73fa7..8a30df4b0 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -37,7 +37,7 @@ impl Build for SettingsBuilder { fn build(self) -> OtlpLogSettings { OtlpLogSettings { common_settings: self.into(), - ..Default::default() + // ..Default::default() } } } @@ -60,7 +60,7 @@ impl From for OtlpLogSettings { fn from(value: SettingsDouble) -> Self { Self { common_settings: value.into(), - ..Default::default() + // ..Default::default() } } } @@ -69,7 +69,7 @@ impl From for OtlpLogSettings { fn from(value: SettingsTriple) -> Self { Self { common_settings: value.into(), - ..Default::default() + // ..Default::default() } } } diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index 5728bc7b6..d928f5f51 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -37,7 +37,7 @@ impl Build for SettingsBuilder { fn build(self) -> OtlpTraceSettings { OtlpTraceSettings { common_settings: self.into(), - ..Default::default() + // ..Default::default() } } } @@ -60,7 +60,7 @@ impl From for OtlpTraceSettings { fn from(value: SettingsDouble) -> Self { Self { common_settings: value.into(), - ..Default::default() + // ..Default::default() } } } @@ -69,7 +69,7 @@ impl From for OtlpTraceSettings { fn from(value: SettingsTriple) -> Self { Self { common_settings: value.into(), - ..Default::default() + // ..Default::default() } } } From dbe3719ab3dc0cbdc7e906077b4b930117731092 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Mon, 28 Oct 2024 22:33:11 +0100 Subject: [PATCH 10/19] refactor(stackable-telemetry): Prefix builder methods with `with_`. I avoided prefixing `enabled()` because it sounds strange. --- crates/stackable-telemetry/src/tracing/mod.rs | 12 ++++++------ .../src/tracing/settings/console_log.rs | 8 ++++---- .../src/tracing/settings/mod.rs | 14 ++++++++++---- .../src/tracing/settings/otlp_log.rs | 4 ++-- .../src/tracing/settings/otlp_trace.rs | 4 ++-- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index d4fc68c75..fd1323472 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -447,15 +447,15 @@ mod test { .service_name("test") .with_console_output( Settings::builder() - .environment_variable("ABC_A") - .default_level(LevelFilter::TRACE) + .with_environment_variable("ABC_A") + .with_default_level(LevelFilter::TRACE) .enabled(true) .build(), ) .with_console_output( Settings::builder() - .environment_variable("ABC_B") - .default_level(LevelFilter::DEBUG) + .with_environment_variable("ABC_B") + .with_default_level(LevelFilter::DEBUG) .enabled(true) .build(), ) @@ -482,8 +482,8 @@ mod test { .service_name("test") .with_console_output( Settings::builder() - .environment_variable("ABC_CONSOLE") - .default_level(LevelFilter::INFO) + .with_environment_variable("ABC_CONSOLE") + .with_default_level(LevelFilter::INFO) .enabled(true) .build(), ) diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 30a7eba22..1ca95058a 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -22,7 +22,7 @@ pub struct ConsoleLogSettingsBuilder { } impl ConsoleLogSettingsBuilder { - pub fn log_format(mut self, format: Format) -> Self { + pub fn with_log_format(mut self, format: Format) -> Self { self.log_format = format; self } @@ -108,11 +108,11 @@ mod test { log_format: Format::Plain, }; let result = Settings::builder() - .environment_variable("hello") - .default_level(LevelFilter::DEBUG) + .with_environment_variable("hello") + .with_default_level(LevelFilter::DEBUG) .enabled(true) .console_log_settings_builder() - .log_format(Format::Plain) + .with_log_format(Format::Plain) // color .build(); diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index a0a99f862..0571e1815 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -54,16 +54,22 @@ impl Build for SettingsBuilder { } impl SettingsBuilder { - pub fn environment_variable(mut self, name: &'static str) -> Self { + pub fn with_environment_variable(mut self, name: &'static str) -> Self { self.environment_variable = name; self } - pub fn default_level(mut self, level: impl Into) -> Self { + pub fn with_default_level(mut self, level: impl Into) -> Self { self.default_level = level.into(); self } + // TODO (@NickLarsenNZ): Currently this has to be called to enable the + // subscriber. Eventually it should become optional, and default to on (if + // settings are supplied). Therefore, the fields in TracingBuilder to hold + // the subscriber settings should become Option so that the subscriber is + // disabled when not configured, is enabled when configured, while still + // controllable through this function. Then this can be renamed to `with_enabled` pub fn enabled(mut self, enabled: bool) -> Self { self.enabled = enabled; self @@ -139,8 +145,8 @@ mod test { enabled: true, }; let result = Settings::builder() - .environment_variable("hello") - .default_level(LevelFilter::DEBUG) + .with_environment_variable("hello") + .with_default_level(LevelFilter::DEBUG) .enabled(true) .build(); diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index 8a30df4b0..dabc7fb64 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -90,8 +90,8 @@ mod test { }, }; let result = Settings::builder() - .environment_variable("hello") - .default_level(LevelFilter::DEBUG) + .with_environment_variable("hello") + .with_default_level(LevelFilter::DEBUG) .enabled(true) .otlp_log_settings_builder() .build(); diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index d928f5f51..0a954e548 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -90,8 +90,8 @@ mod test { }, }; let result = Settings::builder() - .environment_variable("hello") - .default_level(LevelFilter::DEBUG) + .with_environment_variable("hello") + .with_default_level(LevelFilter::DEBUG) .enabled(true) .otlp_trace_settings_builder() .build(); From 2e4f19ff4bf7b26c898c70b7248b42c53e79aeec Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Wed, 27 Nov 2024 11:07:43 +0100 Subject: [PATCH 11/19] refactor(stackable-telemetry): Revert SettingsDouble/SettingsTriple Note: They will appear in a future PR --- crates/stackable-telemetry/src/tracing/mod.rs | 16 ++++++++++-- .../src/tracing/settings/console_log.rs | 20 +-------------- .../src/tracing/settings/mod.rs | 25 ------------------- .../src/tracing/settings/otlp_log.rs | 20 +-------------- .../src/tracing/settings/otlp_trace.rs | 20 +-------------- 5 files changed, 17 insertions(+), 84 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index fd1323472..735fb97d6 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -487,8 +487,20 @@ mod test { .enabled(true) .build(), ) - .with_otlp_log_exporter(("ABC_OTLP_LOG", LevelFilter::DEBUG).into()) - .with_otlp_trace_exporter(("ABC_OTLP_TRACE", LevelFilter::TRACE).into()) + .with_otlp_log_exporter( + Settings::builder() + .with_environment_variable("ABC_OTLP_LOG") + .with_default_level(LevelFilter::DEBUG) + .enabled(true) + .build(), + ) + .with_otlp_trace_exporter( + Settings::builder() + .with_environment_variable("ABC_OTLP_TRACE") + .with_default_level(LevelFilter::TRACE) + .enabled(true) + .build(), + ) .build(); assert_eq!( diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 1ca95058a..620daf20f 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -1,6 +1,6 @@ use tracing::level_filters::LevelFilter; -use super::{Build, CommonSettings, Settings, SettingsBuilder, SettingsDouble, SettingsTriple}; +use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct ConsoleLogSettings { @@ -73,24 +73,6 @@ impl CommonSettings for ConsoleLogSettings { } } -impl From for ConsoleLogSettings { - fn from(value: SettingsDouble) -> Self { - Self { - common_settings: value.into(), - ..Default::default() - } - } -} - -impl From for ConsoleLogSettings { - fn from(value: SettingsTriple) -> Self { - Self { - common_settings: value.into(), - ..Default::default() - } - } -} - #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index 0571e1815..df81b32d2 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -108,31 +108,6 @@ impl From for Settings { } } -pub(crate) type SettingsDouble = (&'static str, LevelFilter); -pub(crate) type SettingsTriple = (&'static str, LevelFilter, bool); - -// for enabling a subscriber in one line with no extra settings -impl From for Settings { - fn from((environment_variable, default_level): SettingsDouble) -> Self { - Settings { - environment_variable, - default_level, - enabled: true, - } - } -} - -// for configuring a subscriber in one line with no extra settings -impl From for Settings { - fn from((environment_variable, default_level, enabled): SettingsTriple) -> Self { - Settings { - environment_variable, - default_level, - enabled, - } - } -} - #[cfg(test)] mod test { use super::*; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index dabc7fb64..967590609 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -1,6 +1,6 @@ use tracing::level_filters::LevelFilter; -use super::{Build, CommonSettings, Settings, SettingsBuilder, SettingsDouble, SettingsTriple}; +use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct OtlpLogSettings { @@ -56,24 +56,6 @@ impl CommonSettings for OtlpLogSettings { } } -impl From for OtlpLogSettings { - fn from(value: SettingsDouble) -> Self { - Self { - common_settings: value.into(), - // ..Default::default() - } - } -} - -impl From for OtlpLogSettings { - fn from(value: SettingsTriple) -> Self { - Self { - common_settings: value.into(), - // ..Default::default() - } - } -} - #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index 0a954e548..7687ecd5b 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -1,6 +1,6 @@ use tracing::level_filters::LevelFilter; -use super::{Build, CommonSettings, Settings, SettingsBuilder, SettingsDouble, SettingsTriple}; +use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct OtlpTraceSettings { @@ -56,24 +56,6 @@ impl CommonSettings for OtlpTraceSettings { } } -impl From for OtlpTraceSettings { - fn from(value: SettingsDouble) -> Self { - Self { - common_settings: value.into(), - // ..Default::default() - } - } -} - -impl From for OtlpTraceSettings { - fn from(value: SettingsTriple) -> Self { - Self { - common_settings: value.into(), - // ..Default::default() - } - } -} - #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; From 951f5cc62be965e7982b41f16e1525cc789626a3 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Wed, 27 Nov 2024 11:08:56 +0100 Subject: [PATCH 12/19] docs(stackable-telemetry): Partially add docs Note: More docs will appear in a future PR so that this PR isn't a blocker. Tip: Enable `#![warn(missing_docs)]` --- .../src/tracing/settings/console_log.rs | 20 ++++++++++ .../src/tracing/settings/mod.rs | 38 ++++++++++++++++++- .../src/tracing/settings/otlp_log.rs | 2 + .../src/tracing/settings/otlp_trace.rs | 2 + 4 files changed, 61 insertions(+), 1 deletion(-) diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 620daf20f..c4b58bb45 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -1,21 +1,41 @@ +//! Console Log Subscriber Settings. + use tracing::level_filters::LevelFilter; use super::{Build, CommonSettings, Settings, SettingsBuilder}; +/// Configure specific settings for the Console Log subscriber. #[derive(Debug, Default, PartialEq)] pub struct ConsoleLogSettings { + /// Common subscriber settings that apply to the Console Log Subscriber. pub common_settings: Settings, + + /// Console Subscriber log event output format. pub log_format: Format, } +/// Console Subscriber log event output formats. +/// +/// Currently, only [Plain][Format::Plain] is supported. #[derive(Debug, Default, PartialEq)] pub enum Format { + /// Use the plain unstructured log output. + /// + /// ANSI color output is enabled by default, but can be disabled at runtime by + /// setting `NO_COLOR` to a non-empty value. + /// + /// See: [`Layer::with_ansi`][tracing_subscriber::fmt::Layer::with_ansi]. #[default] Plain, // Json { pretty: bool }, // LogFmt, } +/// For building [`ConsoleLogSettings`]. +/// +///
+/// Do not use directly, instead use the [`Settings::builder`] associated function. +///
pub struct ConsoleLogSettingsBuilder { pub(crate) common_settings: Settings, pub(crate) log_format: Format, diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index df81b32d2..fd8997e32 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -1,3 +1,5 @@ +//! Subscriber settings. + use tracing::level_filters::LevelFilter; pub mod console_log; @@ -9,23 +11,40 @@ pub use otlp_log::*; pub mod otlp_trace; pub use otlp_trace::*; -// this trait is to make it simpler to access common settings from specific settings. +/// Simplifies access common settings from subscriber specific settings. pub trait CommonSettings { + /// Access to the [`Settings::environment_variable`] field. fn environment_variable(&self) -> &'static str; + + /// Access to the [`Settings::default_level`] field. fn default_level(&self) -> LevelFilter; + + /// Access to the [`Settings::enabled`] field. fn enabled(&self) -> bool; } +/// General settings that apply to any subscriber. #[derive(Debug, PartialEq)] pub struct Settings { + /// The environment variable used to set the [`LevelFilter`]. + /// + /// When the environment variable is set, it will override what is set by + /// [`Self::default_level`]. pub environment_variable: &'static str, + /// The [`LevelFilter`] to fallback to if [`Self::environment_variable`] has + /// not been set. pub default_level: LevelFilter, + /// Whether or not the subscriber is enabled. + /// + /// When set to `true`, the [`tracing::Subscriber`] will be added to the + /// [`tracing_subscriber::Layer`] list. pub enabled: bool, } impl Settings { + /// Builder methods to override defaults. pub fn builder() -> SettingsBuilder { SettingsBuilder::default() } @@ -37,13 +56,16 @@ impl Default for Settings { } } +/// For building [`Settings`]. pub struct SettingsBuilder { environment_variable: &'static str, enabled: bool, default_level: LevelFilter, } +/// Finalizer to be implemented on builders. pub trait Build { + /// Finalize settings. fn build(self) -> T; } @@ -54,16 +76,27 @@ impl Build for SettingsBuilder { } impl SettingsBuilder { + /// Set the environment variable used for overriding the [`Settings::default_level`]. + /// + /// Defaults to `RUST_LOG`. + // TODO (@NickLarsenNZ): set a constant for the default environment variable. pub fn with_environment_variable(mut self, name: &'static str) -> Self { self.environment_variable = name; self } + /// Set the default [`LevelFilter`]. + /// + /// Defaults to [`LevelFilter::OFF`]. + // TODO (@NickLarsenNZ): set a constant for the default level. pub fn with_default_level(mut self, level: impl Into) -> Self { self.default_level = level.into(); self } + /// Enable or disable the [`tracing::Subscriber`]. + /// + /// Defaults to `false`. // TODO (@NickLarsenNZ): Currently this has to be called to enable the // subscriber. Eventually it should become optional, and default to on (if // settings are supplied). Therefore, the fields in TracingBuilder to hold @@ -75,14 +108,17 @@ impl SettingsBuilder { self } + /// Set specific [`ConsoleLogSettings`]. pub fn console_log_settings_builder(self) -> ConsoleLogSettingsBuilder { self.into() } + /// Set specific [`OtlpLogSettings`]. pub fn otlp_log_settings_builder(self) -> OtlpLogSettingsBuilder { self.into() } + /// Set specific [`OtlpTraceSettings`]. pub fn otlp_trace_settings_builder(self) -> OtlpTraceSettingsBuilder { self.into() } diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index 967590609..58899c957 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -1,3 +1,5 @@ +//! OTLP Log Subscriber Settings. + use tracing::level_filters::LevelFilter; use super::{Build, CommonSettings, Settings, SettingsBuilder}; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index 7687ecd5b..7a278bea0 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -1,3 +1,5 @@ +//! OTLP Trace Subscriber Settings. + use tracing::level_filters::LevelFilter; use super::{Build, CommonSettings, Settings, SettingsBuilder}; From 48ef4134eca644992f830679659662ce69c6b95d Mon Sep 17 00:00:00 2001 From: Techassi Date: Wed, 27 Nov 2024 14:44:15 +0100 Subject: [PATCH 13/19] refactor: Simplify From and Build trait usages --- .../src/tracing/settings/console_log.rs | 20 +++++++++---------- .../src/tracing/settings/mod.rs | 18 ++++++----------- .../src/tracing/settings/otlp_log.rs | 20 +++++++++---------- .../src/tracing/settings/otlp_trace.rs | 20 +++++++++---------- 4 files changed, 33 insertions(+), 45 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index c4b58bb45..2daa9d3d0 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -48,32 +48,30 @@ impl ConsoleLogSettingsBuilder { } pub fn build(self) -> ConsoleLogSettings { - self.into() - } -} - -impl From for ConsoleLogSettings { - fn from(value: ConsoleLogSettingsBuilder) -> Self { - Self { - common_settings: value.common_settings, - log_format: value.log_format, + ConsoleLogSettings { + common_settings: self.common_settings, + log_format: self.log_format, } } } +/// This implementation is used to turn the common settings builder into the console log specific +/// settings builder via the [`SettingsBuilder::console_log_settings_builder`] function. impl From for ConsoleLogSettingsBuilder { fn from(value: SettingsBuilder) -> Self { Self { - common_settings: value.into(), + common_settings: value.build(), log_format: Format::default(), } } } +/// This implementation is used to build console log settings from common settings without +/// specifying console log specific settings. impl Build for SettingsBuilder { fn build(self) -> ConsoleLogSettings { ConsoleLogSettings { - common_settings: self.into(), + common_settings: self.build(), ..Default::default() } } diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index fd8997e32..b0bc6a01d 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -52,7 +52,7 @@ impl Settings { impl Default for Settings { fn default() -> Self { - SettingsBuilder::default().into() + SettingsBuilder::default().build() } } @@ -71,7 +71,11 @@ pub trait Build { impl Build for SettingsBuilder { fn build(self) -> Settings { - self.into() + Settings { + environment_variable: self.environment_variable, + default_level: self.default_level, + enabled: self.enabled, + } } } @@ -134,16 +138,6 @@ impl Default for SettingsBuilder { } } -impl From for Settings { - fn from(value: SettingsBuilder) -> Self { - Self { - environment_variable: value.environment_variable, - default_level: value.default_level, - enabled: value.enabled, - } - } -} - #[cfg(test)] mod test { use super::*; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index 58899c957..c99e9074b 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -15,30 +15,28 @@ pub struct OtlpLogSettingsBuilder { impl OtlpLogSettingsBuilder { pub fn build(self) -> OtlpLogSettings { - self.into() + OtlpLogSettings { + common_settings: self.common_settings, + } } } +/// This implementation is used to turn the common settings builder into the OTLP log specific +/// settings builder via the [`SettingsBuilder::otlp_log_settings_builder`] function. impl From for OtlpLogSettingsBuilder { fn from(value: SettingsBuilder) -> Self { Self { - common_settings: value.into(), - } - } -} - -impl From for OtlpLogSettings { - fn from(value: OtlpLogSettingsBuilder) -> Self { - Self { - common_settings: value.common_settings, + common_settings: value.build(), } } } +/// This implementation is used to build OTLP log settings from common settings without +/// specifying OTLP log specific settings. impl Build for SettingsBuilder { fn build(self) -> OtlpLogSettings { OtlpLogSettings { - common_settings: self.into(), + common_settings: self.build(), // ..Default::default() } } diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index 7a278bea0..ff02c62f8 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -15,30 +15,28 @@ pub struct OtlpTraceSettingsBuilder { impl OtlpTraceSettingsBuilder { pub fn build(self) -> OtlpTraceSettings { - self.into() + OtlpTraceSettings { + common_settings: self.common_settings, + } } } +/// This implementation is used to turn the common settings builder into the OTLP trace specific +/// settings builder via the [`SettingsBuilder::otlp_trace_settings_builder`] function. impl From for OtlpTraceSettingsBuilder { fn from(value: SettingsBuilder) -> Self { Self { - common_settings: value.into(), - } - } -} - -impl From for OtlpTraceSettings { - fn from(value: OtlpTraceSettingsBuilder) -> Self { - Self { - common_settings: value.common_settings, + common_settings: value.build(), } } } +/// This implementation is used to build OTLP trace settings from common settings without +/// specifying OTLP trace specific settings. impl Build for SettingsBuilder { fn build(self) -> OtlpTraceSettings { OtlpTraceSettings { - common_settings: self.into(), + common_settings: self.build(), // ..Default::default() } } From 5de6ed4d74125144fdf43157ae39c2dedf8ec395 Mon Sep 17 00:00:00 2001 From: Techassi Date: Wed, 27 Nov 2024 14:49:29 +0100 Subject: [PATCH 14/19] refactor: Provide centralized default impls for CommonSettings trait --- .../src/tracing/settings/console_log.rs | 14 ++------------ .../src/tracing/settings/mod.rs | 15 ++++++++++++--- .../src/tracing/settings/otlp_log.rs | 14 ++------------ .../src/tracing/settings/otlp_trace.rs | 14 ++------------ 4 files changed, 18 insertions(+), 39 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 2daa9d3d0..1e8a6f5f2 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -1,7 +1,5 @@ //! Console Log Subscriber Settings. -use tracing::level_filters::LevelFilter; - use super::{Build, CommonSettings, Settings, SettingsBuilder}; /// Configure specific settings for the Console Log subscriber. @@ -78,16 +76,8 @@ impl Build for SettingsBuilder { } impl CommonSettings for ConsoleLogSettings { - fn environment_variable(&self) -> &'static str { - self.common_settings.environment_variable - } - - fn default_level(&self) -> LevelFilter { - self.common_settings.default_level - } - - fn enabled(&self) -> bool { - self.common_settings.enabled + fn common(&self) -> &Settings { + &self.common_settings } } diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index b0bc6a01d..db9d02cb0 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -13,14 +13,23 @@ pub use otlp_trace::*; /// Simplifies access common settings from subscriber specific settings. pub trait CommonSettings { + /// Access to common settings. + fn common(&self) -> &Settings; + /// Access to the [`Settings::environment_variable`] field. - fn environment_variable(&self) -> &'static str; + fn environment_variable(&self) -> &'static str { + self.common().environment_variable + } /// Access to the [`Settings::default_level`] field. - fn default_level(&self) -> LevelFilter; + fn default_level(&self) -> LevelFilter { + self.common().default_level + } /// Access to the [`Settings::enabled`] field. - fn enabled(&self) -> bool; + fn enabled(&self) -> bool { + self.common().enabled + } } /// General settings that apply to any subscriber. diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index c99e9074b..40c3167a3 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -1,7 +1,5 @@ //! OTLP Log Subscriber Settings. -use tracing::level_filters::LevelFilter; - use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] @@ -43,16 +41,8 @@ impl Build for SettingsBuilder { } impl CommonSettings for OtlpLogSettings { - fn environment_variable(&self) -> &'static str { - self.common_settings.environment_variable - } - - fn default_level(&self) -> LevelFilter { - self.common_settings.default_level - } - - fn enabled(&self) -> bool { - self.common_settings.enabled + fn common(&self) -> &Settings { + &self.common_settings } } diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index ff02c62f8..c2987ba60 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -1,7 +1,5 @@ //! OTLP Trace Subscriber Settings. -use tracing::level_filters::LevelFilter; - use super::{Build, CommonSettings, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] @@ -43,16 +41,8 @@ impl Build for SettingsBuilder { } impl CommonSettings for OtlpTraceSettings { - fn environment_variable(&self) -> &'static str { - self.common_settings.environment_variable - } - - fn default_level(&self) -> LevelFilter { - self.common_settings.default_level - } - - fn enabled(&self) -> bool { - self.common_settings.enabled + fn common(&self) -> &Settings { + &self.common_settings } } From 7137d50924591b363525919a457c0a5bfb7b428a Mon Sep 17 00:00:00 2001 From: Techassi Date: Wed, 27 Nov 2024 15:03:19 +0100 Subject: [PATCH 15/19] docs: Fix doc tests --- crates/stackable-telemetry/src/tracing/mod.rs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index 735fb97d6..ef7ea1d25 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -49,19 +49,36 @@ pub enum Error { /// /// #[tokio::main] /// async fn main() -> Result<(), Error> { +/// // This can come from a Clap argument for example. The enabled builder +/// // function below allows enabling/disabling certain subscribers during +/// // runtime. +/// let otlp_log_flag = false; +/// /// // IMPORTANT: Name the guard variable appropriately, do not just use /// // `let _ =`, as that will drop immediately. /// let _tracing_guard = Tracing::builder() /// .service_name("test") /// .with_console_output( /// Settings::builder() -/// .environment_variable("TEST_CONSOLE") -/// .default_level(LevelFilter::INFO) +/// .with_environment_variable("TEST_CONSOLE") +/// .with_default_level(LevelFilter::INFO) +/// .enabled(true) +/// .build() +/// ) +/// .with_otlp_log_exporter( +/// Settings::builder() +/// .with_environment_variable("TEST_OTLP_LOG") +/// .with_default_level(LevelFilter::DEBUG) +/// .enabled(otlp_log_flag) +/// .build() +/// ) +/// .with_otlp_trace_exporter( +/// Settings::builder() +/// .with_environment_variable("TEST_OTLP_TRACE") +/// .with_default_level(LevelFilter::TRACE) /// .enabled(true) /// .build() /// ) -/// .with_otlp_log_exporter(("TEST_OTLP_LOG", LevelFilter::DEBUG).into()) -/// .with_otlp_trace_exporter(("TEST_OTLP_TRACE", LevelFilter::TRACE).into()) /// .build() /// .init()?; /// From 7a4fdd802f6a050e89d8bc13ed52b437cae8d8e3 Mon Sep 17 00:00:00 2001 From: Techassi Date: Wed, 27 Nov 2024 15:08:55 +0100 Subject: [PATCH 16/19] docs: Fix doc comment references --- crates/stackable-telemetry/src/tracing/mod.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index ef7ea1d25..bfa003b76 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -368,8 +368,10 @@ impl TracingBuilder { impl TracingBuilder { /// Enable the console output tracing subscriber and set the default - /// [`LevelFilter`] which is overridable through the given environment + /// [`LevelFilter`][1] which is overridable through the given environment /// variable. + /// + /// [1]: tracing_subscriber::filter::LevelFilter pub fn with_console_output( self, console_log_settings: ConsoleLogSettings, @@ -383,11 +385,13 @@ impl TracingBuilder { } } - /// Enable the OTLP logging subscriber and set the default [`LevelFilter`] + /// Enable the OTLP logging subscriber and set the default [`LevelFilter`][1] /// which is overridable through the given environment variable. /// /// You can configure the OTLP log exports through the variables defined /// in the opentelemetry crates. See [`Tracing`]. + /// + /// [1]: tracing_subscriber::filter::LevelFilter pub fn with_otlp_log_exporter( self, otlp_log_settings: OtlpLogSettings, @@ -401,11 +405,13 @@ impl TracingBuilder { } } - /// Enable the OTLP tracing subscriber and set the default [`LevelFilter`] + /// Enable the OTLP tracing subscriber and set the default [`LevelFilter`][1] /// which is overridable through the given environment variable. /// /// You can configure the OTLP trace exports through the variables defined /// in the opentelemetry crates. See [`Tracing`]. + /// + /// [1]: tracing_subscriber::filter::LevelFilter pub fn with_otlp_trace_exporter( self, otlp_trace_settings: OtlpTraceSettings, From 8f59b158c0c4f043c216ee8e67c8e08fec26d052 Mon Sep 17 00:00:00 2001 From: Techassi Date: Wed, 27 Nov 2024 15:17:11 +0100 Subject: [PATCH 17/19] refactor: Use Deref instead of CommonSettings trait --- crates/stackable-telemetry/src/tracing/mod.rs | 26 +++++++++---------- .../src/tracing/settings/console_log.rs | 18 ++++++++----- .../src/tracing/settings/mod.rs | 21 --------------- .../src/tracing/settings/otlp_log.rs | 18 ++++++++----- .../src/tracing/settings/otlp_trace.rs | 18 ++++++++----- 5 files changed, 46 insertions(+), 55 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index bfa003b76..eca64a430 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -14,7 +14,7 @@ use opentelemetry_sdk::{ trace, Resource, }; use opentelemetry_semantic_conventions::resource; -use settings::{CommonSettings as _, ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; +use settings::{ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; use snafu::{ResultExt as _, Snafu}; use tracing::subscriber::SetGlobalDefaultError; use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry}; @@ -169,22 +169,22 @@ impl Tracing { pub fn init(mut self) -> Result { let mut layers: Vec + Sync + Send>> = Vec::new(); - if self.console_log_settings.enabled() { + if self.console_log_settings.enabled { let env_filter_layer = env_filter_builder( self.console_log_settings .common_settings .environment_variable, - self.console_log_settings.default_level(), + self.console_log_settings.default_level, ); let console_output_layer = tracing_subscriber::fmt::layer().with_filter(env_filter_layer); layers.push(console_output_layer.boxed()); } - if self.otlp_log_settings.enabled() { + if self.otlp_log_settings.enabled { let env_filter_layer = env_filter_builder( - self.otlp_log_settings.environment_variable(), - self.otlp_log_settings.default_level(), + self.otlp_log_settings.environment_variable, + self.otlp_log_settings.default_level, ) // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); @@ -209,12 +209,12 @@ impl Tracing { self.logger_provider = Some(otel_log); } - if self.otlp_trace_settings.enabled() { + if self.otlp_trace_settings.enabled { let env_filter_layer = env_filter_builder( self.otlp_trace_settings .common_settings .environment_variable, - self.otlp_trace_settings.default_level(), + self.otlp_trace_settings.default_level, ) // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); @@ -262,12 +262,12 @@ impl Tracing { impl Drop for Tracing { fn drop(&mut self) { tracing::debug!( - opentelemetry.tracing.enabled = self.otlp_trace_settings.enabled(), - opentelemetry.logger.enabled = self.otlp_log_settings.enabled(), + opentelemetry.tracing.enabled = self.otlp_trace_settings.enabled, + opentelemetry.logger.enabled = self.otlp_log_settings.enabled, "shutting down opentelemetry OTLP providers" ); - if self.otlp_trace_settings.enabled() { + if self.otlp_trace_settings.enabled { // NOTE (@NickLarsenNZ): This might eventually be replaced with something like SdkMeterProvider::shutdown(&self) // as has been done with the LoggerProvider (further below) // see: https://github.com/open-telemetry/opentelemetry-rust/pull/1412/files#r1409608679 @@ -495,8 +495,8 @@ mod test { log_format: Default::default() } ); - assert!(!trace_guard.otlp_log_settings.enabled()); - assert!(!trace_guard.otlp_trace_settings.enabled()); + assert!(!trace_guard.otlp_log_settings.enabled); + assert!(!trace_guard.otlp_trace_settings.enabled); } #[test] diff --git a/crates/stackable-telemetry/src/tracing/settings/console_log.rs b/crates/stackable-telemetry/src/tracing/settings/console_log.rs index 1e8a6f5f2..0ba059592 100644 --- a/crates/stackable-telemetry/src/tracing/settings/console_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/console_log.rs @@ -1,6 +1,8 @@ //! Console Log Subscriber Settings. -use super::{Build, CommonSettings, Settings, SettingsBuilder}; +use std::ops::Deref; + +use super::{Build, Settings, SettingsBuilder}; /// Configure specific settings for the Console Log subscriber. #[derive(Debug, Default, PartialEq)] @@ -12,6 +14,14 @@ pub struct ConsoleLogSettings { pub log_format: Format, } +impl Deref for ConsoleLogSettings { + type Target = Settings; + + fn deref(&self) -> &Self::Target { + &self.common_settings + } +} + /// Console Subscriber log event output formats. /// /// Currently, only [Plain][Format::Plain] is supported. @@ -75,12 +85,6 @@ impl Build for SettingsBuilder { } } -impl CommonSettings for ConsoleLogSettings { - fn common(&self) -> &Settings { - &self.common_settings - } -} - #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/mod.rs b/crates/stackable-telemetry/src/tracing/settings/mod.rs index db9d02cb0..aaf71c6bb 100644 --- a/crates/stackable-telemetry/src/tracing/settings/mod.rs +++ b/crates/stackable-telemetry/src/tracing/settings/mod.rs @@ -11,27 +11,6 @@ pub use otlp_log::*; pub mod otlp_trace; pub use otlp_trace::*; -/// Simplifies access common settings from subscriber specific settings. -pub trait CommonSettings { - /// Access to common settings. - fn common(&self) -> &Settings; - - /// Access to the [`Settings::environment_variable`] field. - fn environment_variable(&self) -> &'static str { - self.common().environment_variable - } - - /// Access to the [`Settings::default_level`] field. - fn default_level(&self) -> LevelFilter { - self.common().default_level - } - - /// Access to the [`Settings::enabled`] field. - fn enabled(&self) -> bool { - self.common().enabled - } -} - /// General settings that apply to any subscriber. #[derive(Debug, PartialEq)] pub struct Settings { diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs index 40c3167a3..6015e0564 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_log.rs @@ -1,12 +1,22 @@ //! OTLP Log Subscriber Settings. -use super::{Build, CommonSettings, Settings, SettingsBuilder}; +use std::ops::Deref; + +use super::{Build, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct OtlpLogSettings { pub common_settings: Settings, } +impl Deref for OtlpLogSettings { + type Target = Settings; + + fn deref(&self) -> &Self::Target { + &self.common_settings + } +} + pub struct OtlpLogSettingsBuilder { pub(crate) common_settings: Settings, } @@ -40,12 +50,6 @@ impl Build for SettingsBuilder { } } -impl CommonSettings for OtlpLogSettings { - fn common(&self) -> &Settings { - &self.common_settings - } -} - #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; diff --git a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs index c2987ba60..df13a9e2b 100644 --- a/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs +++ b/crates/stackable-telemetry/src/tracing/settings/otlp_trace.rs @@ -1,12 +1,22 @@ //! OTLP Trace Subscriber Settings. -use super::{Build, CommonSettings, Settings, SettingsBuilder}; +use std::ops::Deref; + +use super::{Build, Settings, SettingsBuilder}; #[derive(Debug, Default, PartialEq)] pub struct OtlpTraceSettings { pub common_settings: Settings, } +impl Deref for OtlpTraceSettings { + type Target = Settings; + + fn deref(&self) -> &Self::Target { + &self.common_settings + } +} + pub struct OtlpTraceSettingsBuilder { pub(crate) common_settings: Settings, } @@ -40,12 +50,6 @@ impl Build for SettingsBuilder { } } -impl CommonSettings for OtlpTraceSettings { - fn common(&self) -> &Settings { - &self.common_settings - } -} - #[cfg(test)] mod test { use tracing::level_filters::LevelFilter; From afc21636bf3ec0324aabd3dcf20b65dfe38de946 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Wed, 27 Nov 2024 15:45:16 +0100 Subject: [PATCH 18/19] chore(stackable-telemetry): Apply suggestions from code review Co-authored-by: Techassi --- crates/stackable-telemetry/src/tracing/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index eca64a430..43c943599 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -14,16 +14,16 @@ use opentelemetry_sdk::{ trace, Resource, }; use opentelemetry_semantic_conventions::resource; -use settings::{ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; use snafu::{ResultExt as _, Snafu}; use tracing::subscriber::SetGlobalDefaultError; use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry}; +use settings::{ConsoleLogSettings, OtlpLogSettings, OtlpTraceSettings}; + pub mod settings; type Result = std::result::Result; -#[allow(missing_docs)] #[derive(Debug, Snafu)] pub enum Error { #[snafu(display("unable to install opentelemetry trace exporter"))] From e6ff0249eb91a70d666ae3b5d681337efaf9d0b6 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Wed, 27 Nov 2024 16:10:39 +0100 Subject: [PATCH 19/19] chore(stackable-telemetry): Update changelog --- crates/stackable-telemetry/CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/crates/stackable-telemetry/CHANGELOG.md b/crates/stackable-telemetry/CHANGELOG.md index 8ba94c69b..889682a5a 100644 --- a/crates/stackable-telemetry/CHANGELOG.md +++ b/crates/stackable-telemetry/CHANGELOG.md @@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- Introduce common `Settings` and subscriber specific settings ([#901]). + +### Changed + +- BREAKING: Renamed `TracingBuilder` methods with long names, and prefix with `with_` ([#901]). +- BREAKING: Use the new subscriber settings in the `TracingBuilder` ([#901]). + +[#901]: https://github.com/stackabletech/operator-rs/pull/901 + ## [0.2.0] - 2024-07-10 ### Changed