Skip to content

Commit 7d79fae

Browse files
committed
feat(stackable-telemetry): Add a settings builder for the otlp trace exporter
1 parent 388a867 commit 7d79fae

File tree

3 files changed

+86
-7
lines changed

3 files changed

+86
-7
lines changed

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use opentelemetry_sdk::{
1414
trace, Resource,
1515
};
1616
use opentelemetry_semantic_conventions::resource;
17-
use settings::ConsoleLogSettings;
17+
use settings::{ConsoleLogSettings, OtlpTraceSettings};
1818
use snafu::{ResultExt as _, Snafu};
1919
use tracing::{level_filters::LevelFilter, subscriber::SetGlobalDefaultError};
2020
use tracing_subscriber::{filter::Directive, layer::SubscriberExt, EnvFilter, Layer, Registry};
@@ -406,17 +406,16 @@ impl TracingBuilder<builder_state::Config> {
406406
/// in the opentelemetry crates. See [`Tracing`].
407407
pub fn with_otlp_trace_exporter(
408408
self,
409-
env_var: &'static str,
410-
default_level_filter: LevelFilter,
409+
settings: OtlpTraceSettings,
411410
) -> TracingBuilder<builder_state::Config> {
412411
TracingBuilder {
413412
service_name: self.service_name,
414413
console_log_config: self.console_log_config,
415414
otlp_log_config: self.otlp_log_config,
416415
otlp_trace_config: SubscriberConfig {
417-
enabled: true,
418-
env_var,
419-
default_level_filter,
416+
enabled: settings.common_settings.enabled,
417+
env_var: settings.common_settings.environment_variable,
418+
default_level_filter: settings.common_settings.default_level,
420419
},
421420
_marker: self._marker,
422421
}
@@ -504,7 +503,13 @@ mod test {
504503
.build(),
505504
)
506505
.with_otlp_log_exporter("ABC_OTLP_LOG", LevelFilter::DEBUG)
507-
.with_otlp_trace_exporter("ABC_OTLP_TRACE", LevelFilter::TRACE)
506+
.with_otlp_trace_exporter(
507+
Settings::builder()
508+
.env_var("ABC_OTLP_TRACE")
509+
.default_level(LevelFilter::TRACE)
510+
.enabled(true)
511+
.build(),
512+
)
508513
.build();
509514

510515
assert_eq!(

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ use tracing::level_filters::LevelFilter;
33
pub mod console_log;
44
pub use console_log::*;
55

6+
pub mod otlp_trace;
7+
pub use otlp_trace::*;
8+
69
#[derive(Debug, PartialEq)]
710
pub struct Settings {
811
pub environment_variable: &'static str,
@@ -59,6 +62,10 @@ impl SettingsBuilder {
5962
pub fn console_log_settings_builder(self) -> ConsoleLogSettingsBuilder {
6063
self.into()
6164
}
65+
66+
pub fn otlp_trace_settings_builder(self) -> OtlpTraceSettingsBuilder {
67+
self.into()
68+
}
6269
}
6370

6471
impl Default for SettingsBuilder {
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
use super::{Build, Settings, SettingsBuilder};
2+
3+
#[derive(Debug, Default, PartialEq)]
4+
pub struct OtlpTraceSettings {
5+
pub common_settings: Settings,
6+
}
7+
8+
pub struct OtlpTraceSettingsBuilder {
9+
pub(crate) common_settings: Settings,
10+
}
11+
12+
impl OtlpTraceSettingsBuilder {
13+
pub fn build(self) -> OtlpTraceSettings {
14+
self.into()
15+
}
16+
}
17+
18+
impl From<SettingsBuilder> for OtlpTraceSettingsBuilder {
19+
fn from(value: SettingsBuilder) -> Self {
20+
Self {
21+
common_settings: value.into(),
22+
}
23+
}
24+
}
25+
26+
impl From<OtlpTraceSettingsBuilder> for OtlpTraceSettings {
27+
fn from(value: OtlpTraceSettingsBuilder) -> Self {
28+
Self {
29+
common_settings: value.common_settings,
30+
}
31+
}
32+
}
33+
34+
impl Build<OtlpTraceSettings> for SettingsBuilder {
35+
fn build(self) -> OtlpTraceSettings {
36+
OtlpTraceSettings {
37+
common_settings: self.into(),
38+
..Default::default()
39+
}
40+
}
41+
}
42+
43+
#[cfg(test)]
44+
mod test {
45+
use tracing::level_filters::LevelFilter;
46+
47+
use super::*;
48+
49+
#[test]
50+
fn builds_settings() {
51+
let expected = OtlpTraceSettings {
52+
common_settings: Settings {
53+
environment_variable: "hello",
54+
enabled: true,
55+
default_level: LevelFilter::DEBUG,
56+
},
57+
};
58+
let result = Settings::builder()
59+
.enabled(true)
60+
.env_var("hello")
61+
.default_level(LevelFilter::DEBUG)
62+
.otlp_trace_settings_builder()
63+
.build();
64+
65+
assert_eq!(expected, result);
66+
}
67+
}

0 commit comments

Comments
 (0)