Skip to content

Commit 15a3386

Browse files
Unify builders across signals
1 parent 84c151c commit 15a3386

File tree

21 files changed

+238
-508
lines changed

21 files changed

+238
-508
lines changed

opentelemetry-appender-log/src/lib.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,11 @@
9797
use log::{Level, Metadata, Record};
9898
use opentelemetry::{
9999
logs::{AnyValue, LogRecord, Logger, LoggerProvider, Severity},
100-
Key,
100+
InstrumentationLibrary, Key,
101101
};
102102
#[cfg(feature = "experimental_metadata_attributes")]
103103
use opentelemetry_semantic_conventions::attribute::{CODE_FILEPATH, CODE_LINENO, CODE_NAMESPACE};
104-
use std::borrow::Cow;
104+
use std::sync::Arc;
105105

106106
pub struct OpenTelemetryLogBridge<P, L>
107107
where
@@ -170,11 +170,13 @@ where
170170
L: Logger + Send + Sync,
171171
{
172172
pub fn new(provider: &P) -> Self {
173-
OpenTelemetryLogBridge {
174-
logger: provider
175-
.logger_builder("opentelemetry-log-appender")
176-
.with_version(Cow::Borrowed(env!("CARGO_PKG_VERSION")))
173+
let library = Arc::new(
174+
InstrumentationLibrary::builder("opentelemetry-log-appender")
175+
.with_version(env!("CARGO_PKG_VERSION"))
177176
.build(),
177+
);
178+
OpenTelemetryLogBridge {
179+
logger: provider.library_logger(library),
178180
_phantom: Default::default(),
179181
}
180182
}

opentelemetry-appender-tracing/src/layer.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use opentelemetry::{
22
logs::{AnyValue, LogRecord, Logger, LoggerProvider, Severity},
3-
Key,
3+
InstrumentationLibrary, Key,
44
};
5-
use std::borrow::Cow;
5+
use std::{borrow::Cow, sync::Arc};
66
use tracing_core::Level;
77
#[cfg(feature = "experimental_metadata_attributes")]
88
use tracing_core::Metadata;
@@ -136,11 +136,14 @@ where
136136
L: Logger + Send + Sync,
137137
{
138138
pub fn new(provider: &P) -> Self {
139-
OpenTelemetryTracingBridge {
140-
logger: provider
141-
.logger_builder(INSTRUMENTATION_LIBRARY_NAME)
139+
let library = Arc::new(
140+
InstrumentationLibrary::builder(INSTRUMENTATION_LIBRARY_NAME)
142141
.with_version(Cow::Borrowed(env!("CARGO_PKG_VERSION")))
143142
.build(),
143+
);
144+
145+
OpenTelemetryTracingBridge {
146+
logger: provider.library_logger(library),
144147
_phantom: Default::default(),
145148
}
146149
}

opentelemetry-otlp/examples/basic-otlp-http/src/main.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use once_cell::sync::Lazy;
22
use opentelemetry::{
33
global,
44
metrics::MetricsError,
5-
trace::{TraceContextExt, TraceError, Tracer, TracerProvider as _},
6-
KeyValue,
5+
trace::{TraceContextExt, TraceError, Tracer},
6+
InstrumentationLibrary, KeyValue,
77
};
88
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
99
use opentelemetry_otlp::Protocol;
@@ -13,7 +13,7 @@ use opentelemetry_sdk::{
1313
logs::{self as sdklogs},
1414
Resource,
1515
};
16-
use std::error::Error;
16+
use std::{error::Error, sync::Arc};
1717
use tracing::info;
1818
use tracing_subscriber::prelude::*;
1919
use tracing_subscriber::EnvFilter;
@@ -121,16 +121,14 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
121121
.init();
122122

123123
let common_scope_attributes = vec![KeyValue::new("scope-key", "scope-value")];
124-
let tracer = global::tracer_provider()
125-
.tracer_builder("basic")
126-
.with_attributes(common_scope_attributes.clone())
127-
.build();
128-
let meter = global::meter_with_version(
129-
"basic",
130-
Some("v1.0"),
131-
Some("schema_url"),
132-
Some(common_scope_attributes.clone()),
124+
let library = Arc::new(
125+
InstrumentationLibrary::builder("basic")
126+
.with_version("1.0")
127+
.with_attributes(common_scope_attributes)
128+
.build(),
133129
);
130+
let tracer = global::library_tracer(library.clone());
131+
let meter = global::library_meter(library);
134132

135133
let counter = meter
136134
.u64_counter("test_counter")

opentelemetry-otlp/examples/basic-otlp/src/main.rs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
use once_cell::sync::Lazy;
2-
use opentelemetry::global;
32
use opentelemetry::logs::LogError;
43
use opentelemetry::metrics::MetricsError;
5-
use opentelemetry::trace::{TraceError, TracerProvider};
6-
use opentelemetry::{
7-
trace::{TraceContextExt, Tracer},
8-
KeyValue,
9-
};
4+
use opentelemetry::trace::{TraceContextExt, TraceError, Tracer, TracerProvider};
5+
use opentelemetry::KeyValue;
6+
use opentelemetry::{global, InstrumentationLibrary};
107
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
118
use opentelemetry_otlp::{ExportConfig, WithExportConfig};
129
use opentelemetry_sdk::trace::Config;
1310
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
1411
use std::error::Error;
12+
use std::sync::Arc;
1513
use tracing::info;
1614
use tracing_subscriber::prelude::*;
1715
use tracing_subscriber::EnvFilter;
@@ -112,16 +110,14 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
112110
.init();
113111

114112
let common_scope_attributes = vec![KeyValue::new("scope-key", "scope-value")];
115-
let tracer = global::tracer_provider()
116-
.tracer_builder("basic")
117-
.with_attributes(common_scope_attributes.clone())
118-
.build();
119-
let meter = global::meter_with_version(
120-
"basic",
121-
Some("v1.0"),
122-
Some("schema_url"),
123-
Some(common_scope_attributes.clone()),
113+
let library = Arc::new(
114+
InstrumentationLibrary::builder("basic")
115+
.with_version("1.0")
116+
.with_attributes(common_scope_attributes)
117+
.build(),
124118
);
119+
let tracer = global::tracer_provider().library_tracer(library.clone());
120+
let meter = global::library_meter(library);
125121

126122
let counter = meter
127123
.u64_counter("test_counter")

opentelemetry-sdk/src/logs/log_emitter.rs

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ use opentelemetry::{
1010
#[cfg(feature = "logs_level_enabled")]
1111
use opentelemetry::logs::Severity;
1212

13-
use std::{
14-
borrow::Cow,
15-
sync::{atomic::Ordering, Arc},
13+
use std::sync::{
14+
atomic::{AtomicBool, Ordering},
15+
Arc,
1616
};
17-
use std::{sync::atomic::AtomicBool, time::SystemTime};
17+
use std::time::SystemTime;
1818

1919
use once_cell::sync::Lazy;
2020

@@ -45,42 +45,9 @@ pub struct LoggerProvider {
4545
inner: Arc<LoggerProviderInner>,
4646
}
4747

48-
/// Default logger name if empty string is provided.
49-
const DEFAULT_COMPONENT_NAME: &str = "rust.opentelemetry.io/sdk/logger";
50-
5148
impl opentelemetry::logs::LoggerProvider for LoggerProvider {
5249
type Logger = Logger;
5350

54-
/// Create a new versioned `Logger` instance.
55-
fn versioned_logger(
56-
&self,
57-
name: impl Into<Cow<'static, str>>,
58-
version: Option<Cow<'static, str>>,
59-
schema_url: Option<Cow<'static, str>>,
60-
attributes: Option<Vec<opentelemetry::KeyValue>>,
61-
) -> Logger {
62-
let name = name.into();
63-
let component_name = if name.is_empty() {
64-
Cow::Borrowed(DEFAULT_COMPONENT_NAME)
65-
} else {
66-
name
67-
};
68-
69-
let mut builder = self.logger_builder(component_name);
70-
71-
if let Some(v) = version {
72-
builder = builder.with_version(v);
73-
}
74-
if let Some(s) = schema_url {
75-
builder = builder.with_schema_url(s);
76-
}
77-
if let Some(a) = attributes {
78-
builder = builder.with_attributes(a);
79-
}
80-
81-
builder.build()
82-
}
83-
8451
fn library_logger(&self, library: Arc<InstrumentationLibrary>) -> Self::Logger {
8552
// If the provider is shutdown, new logger will refer a no-op logger provider.
8653
if self.inner.is_shutdown.load(Ordering::Relaxed) {

opentelemetry-sdk/src/logs/mod.rs

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ mod tests {
3030
use opentelemetry::{logs::AnyValue, Key, KeyValue};
3131
use std::borrow::Borrow;
3232
use std::collections::HashMap;
33+
use std::sync::Arc;
3334

3435
#[test]
3536
fn logging_sdk_test() {
@@ -104,36 +105,16 @@ mod tests {
104105
#[test]
105106
fn logger_attributes() {
106107
let provider = LoggerProvider::builder().build();
107-
let logger = provider
108-
.logger_builder("test_logger")
109-
.with_schema_url("https://opentelemetry.io/schema/1.0.0")
110-
.with_attributes(vec![(KeyValue::new("test_k", "test_v"))])
111-
.build();
112-
let instrumentation_library = logger.instrumentation_library();
113-
let attributes = &instrumentation_library.attributes;
114-
assert_eq!(instrumentation_library.name, "test_logger");
115-
assert_eq!(
116-
instrumentation_library.schema_url,
117-
Some("https://opentelemetry.io/schema/1.0.0".into())
118-
);
119-
assert_eq!(attributes.len(), 1);
120-
assert_eq!(attributes[0].key, "test_k".into());
121-
assert_eq!(attributes[0].value, "test_v".into());
122-
}
123-
124-
#[test]
125-
#[allow(deprecated)]
126-
fn versioned_logger_options() {
127-
let provider = LoggerProvider::builder().build();
128-
let logger = provider.versioned_logger(
129-
"test_logger",
130-
Some("v1.2.3".into()),
131-
Some("https://opentelemetry.io/schema/1.0.0".into()),
132-
Some(vec![(KeyValue::new("test_k", "test_v"))]),
108+
let library = Arc::new(
109+
InstrumentationLibrary::builder("test_logger")
110+
.with_schema_url("https://opentelemetry.io/schema/1.0.0")
111+
.with_attributes(vec![(KeyValue::new("test_k", "test_v"))])
112+
.build(),
133113
);
114+
let logger = provider.library_logger(library);
134115
let instrumentation_library = logger.instrumentation_library();
135116
let attributes = &instrumentation_library.attributes;
136-
assert_eq!(instrumentation_library.version, Some("v1.2.3".into()));
117+
assert_eq!(instrumentation_library.name, "test_logger");
137118
assert_eq!(
138119
instrumentation_library.schema_url,
139120
Some("https://opentelemetry.io/schema/1.0.0".into())

opentelemetry-sdk/src/metrics/meter_provider.rs

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::{
1010
use opentelemetry::{
1111
global,
1212
metrics::{Meter, MeterProvider, MetricsError, Result},
13-
KeyValue,
13+
InstrumentationLibrary,
1414
};
1515

1616
use crate::{instrumentation::Scope, Resource};
@@ -145,34 +145,14 @@ impl Drop for SdkMeterProviderInner {
145145
}
146146
}
147147
impl MeterProvider for SdkMeterProvider {
148-
fn versioned_meter(
149-
&self,
150-
name: &'static str,
151-
version: Option<&'static str>,
152-
schema_url: Option<&'static str>,
153-
attributes: Option<Vec<KeyValue>>,
154-
) -> Meter {
148+
fn library_meter(&self, library: Arc<InstrumentationLibrary>) -> Meter {
155149
if self.inner.is_shutdown.load(Ordering::Relaxed) {
156150
return Meter::new(Arc::new(NoopMeter::new()));
157151
}
158152

159-
let mut builder = Scope::builder(name);
160-
161-
if let Some(v) = version {
162-
builder = builder.with_version(v);
163-
}
164-
if let Some(s) = schema_url {
165-
builder = builder.with_schema_url(s);
166-
}
167-
if let Some(a) = attributes {
168-
builder = builder.with_attributes(a);
169-
}
170-
171-
let scope = builder.build();
172-
173153
if let Ok(mut meters) = self.inner.meters.lock() {
174154
let meter = meters
175-
.entry(scope)
155+
.entry(InstrumentationLibrary::clone(&library))
176156
.or_insert_with_key(|scope| {
177157
Arc::new(SdkMeter::new(scope.clone(), self.inner.pipes.clone()))
178158
})
@@ -260,10 +240,11 @@ mod tests {
260240
};
261241
use crate::testing::metrics::metric_reader::TestMetricReader;
262242
use crate::Resource;
263-
use opentelemetry::global;
264243
use opentelemetry::metrics::MeterProvider;
244+
use opentelemetry::{global, InstrumentationLibrary};
265245
use opentelemetry::{Key, KeyValue, Value};
266246
use std::env;
247+
use std::sync::Arc;
267248

268249
#[test]
269250
fn test_meter_provider_resource() {
@@ -454,21 +435,41 @@ mod tests {
454435
let _meter1 = provider.meter("test");
455436
let _meter2 = provider.meter("test");
456437
assert_eq!(provider.inner.meters.lock().unwrap().len(), 1);
457-
let _meter3 =
458-
provider.versioned_meter("test", Some("1.0.0"), Some("http://example.com"), None);
459-
let _meter4 =
460-
provider.versioned_meter("test", Some("1.0.0"), Some("http://example.com"), None);
461-
let _meter5 =
462-
provider.versioned_meter("test", Some("1.0.0"), Some("http://example.com"), None);
438+
439+
let library = Arc::new(
440+
InstrumentationLibrary::builder("test")
441+
.with_version("1.0.0")
442+
.with_schema_url("http://example.com")
443+
.build(),
444+
);
445+
446+
let _meter3 = provider.library_meter(library.clone());
447+
let _meter4 = provider.library_meter(library.clone());
448+
let _meter5 = provider.library_meter(library);
463449
assert_eq!(provider.inner.meters.lock().unwrap().len(), 2);
464450

465-
// the below are different meters, as meter names are case sensitive
466-
let _meter6 =
467-
provider.versioned_meter("ABC", Some("1.0.0"), Some("http://example.com"), None);
468-
let _meter7 =
469-
provider.versioned_meter("Abc", Some("1.0.0"), Some("http://example.com"), None);
470-
let _meter8 =
471-
provider.versioned_meter("abc", Some("1.0.0"), Some("http://example.com"), None);
451+
// these are different meters because meter names are case sensitive
452+
let library = Arc::new(
453+
InstrumentationLibrary::builder("ABC")
454+
.with_version("1.0.0")
455+
.with_schema_url("http://example.com")
456+
.build(),
457+
);
458+
let _meter6 = provider.library_meter(library);
459+
let library = Arc::new(
460+
InstrumentationLibrary::builder("Abc")
461+
.with_version("1.0.0")
462+
.with_schema_url("http://example.com")
463+
.build(),
464+
);
465+
let _meter7 = provider.library_meter(library);
466+
let library = Arc::new(
467+
InstrumentationLibrary::builder("abc")
468+
.with_version("1.0.0")
469+
.with_schema_url("http://example.com")
470+
.build(),
471+
);
472+
let _meter8 = provider.library_meter(library);
472473
assert_eq!(provider.inner.meters.lock().unwrap().len(), 5);
473474
}
474475
}

0 commit comments

Comments
 (0)