Skip to content

Commit da01bf0

Browse files
committed
add methods to get Resource set on in memory exporters
1 parent 0631070 commit da01bf0

File tree

3 files changed

+61
-4
lines changed

3 files changed

+61
-4
lines changed

opentelemetry-sdk/src/logs/in_memory_exporter.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,14 @@ impl InMemoryLogExporter {
189189
.map(|mut logs_guard| logs_guard.clear())
190190
.map_err(|e| OTelSdkError::InternalFailure(format!("Failed to reset logs: {e}")));
191191
}
192+
193+
/// Returns a clone of the current resource set for the exporter.
194+
pub fn resource(&self) -> Resource {
195+
self.resource
196+
.lock()
197+
.map(|res_guard| res_guard.clone())
198+
.expect("Resource lock poisoned")
199+
}
192200
}
193201

194202
impl LogExporter for InMemoryLogExporter {
@@ -220,3 +228,23 @@ impl LogExporter for InMemoryLogExporter {
220228
*res_guard = resource.clone();
221229
}
222230
}
231+
232+
#[cfg(test)]
233+
mod tests {
234+
use opentelemetry::KeyValue;
235+
236+
use super::*;
237+
238+
#[test]
239+
fn test_in_memory_log_exporter_resource() {
240+
let mut exporter = InMemoryLogExporter::default();
241+
let custom_resource = Resource::builder()
242+
.with_attribute(KeyValue::new("key", "value"))
243+
.build();
244+
245+
assert_ne!(exporter.resource(), custom_resource);
246+
247+
exporter.set_resource(&custom_resource);
248+
assert_eq!(exporter.resource(), custom_resource);
249+
}
250+
}

opentelemetry-sdk/src/trace/in_memory_exporter.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@ impl InMemorySpanExporter {
127127
pub fn reset(&self) {
128128
let _ = self.spans.lock().map(|mut spans_guard| spans_guard.clear());
129129
}
130+
131+
/// Returns a clone of the current resource set for the exporter.
132+
pub fn resource(&self) -> Resource {
133+
self.resource
134+
.lock()
135+
.map(|res_guard| res_guard.clone())
136+
.expect("Resource lock poisoned")
137+
}
130138
}
131139

132140
impl SpanExporter for InMemorySpanExporter {
@@ -151,3 +159,23 @@ impl SpanExporter for InMemorySpanExporter {
151159
.expect("Resource lock poisoned");
152160
}
153161
}
162+
163+
#[cfg(test)]
164+
mod tests {
165+
use opentelemetry::KeyValue;
166+
167+
use super::*;
168+
169+
#[test]
170+
fn test_in_memory_span_exporter_resource() {
171+
let mut exporter = InMemorySpanExporter::default();
172+
let custom_resource = Resource::builder()
173+
.with_attribute(KeyValue::new("key", "value"))
174+
.build();
175+
176+
assert_ne!(exporter.resource(), custom_resource);
177+
178+
exporter.set_resource(&custom_resource);
179+
assert_eq!(exporter.resource(), custom_resource);
180+
}
181+
}

opentelemetry/CHANGELOG.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## vNext
44

55
- Add `get_all` method to `opentelemetry::propagation::Extractor` to return all values of the given propagation key and provide a default implementation.
6+
- Add `InMemorySpanExporter::resource` and `InMemoryLogExporter::resource` accessor methods.
67

78
## 0.30.0
89

@@ -104,10 +105,10 @@ let counter = meter.u64_counter("my_counter").build();
104105
- Replaced `global::meter_with_version` with `global::meter_with_scope`
105106
- Added `global::tracer_with_scope`
106107
- Refer to PR description for migration guide.
107-
- **Breaking change**: replaced `InstrumentationScope` public attributes by getters [#2275](https://github.com/open-telemetry/opentelemetry-rust/pull/2275)
108+
- **Breaking change**: replaced `InstrumentationScope` public attributes by getters [#2275](https://github.com/open-telemetry/opentelemetry-rust/pull/2275)
108109

109110
- **Breaking change**: [#2260](https://github.com/open-telemetry/opentelemetry-rust/pull/2260)
110-
- Removed `global::set_error_handler` and `global::handle_error`.
111+
- Removed `global::set_error_handler` and `global::handle_error`.
111112
- `global::handle_error` usage inside the opentelemetry crates has been replaced with `global::otel_info`, `otel_warn`, `otel_debug` and `otel_error` macros based on the severity of the internal logs.
112113
- The default behavior of `global::handle_error` was to log the error using `eprintln!`. With otel macros, the internal logs get emitted via `tracing` macros of matching severity. Users now need to configure a `tracing` layer/subscriber to capture these logs.
113114
- Refer to PR description for migration guide. Also refer to [self-diagnostics](https://github.com/open-telemetry/opentelemetry-rust/tree/main/examples/self-diagnostics) example to learn how to view internal logs in stdout using `tracing::fmt` layer.
@@ -207,7 +208,7 @@ to learn how to provide Observable callbacks.
207208
opaque string. Migration: Replace `.with_unit(Unit::new("myunit"))` with
208209
`.with_unit("myunit")`.
209210

210-
- [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) Introduced the `LogRecord::set_target()` method in the log bridge API.
211+
- [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) Introduced the `LogRecord::set_target()` method in the log bridge API.
211212
This method allows appenders to set the target/component emitting the logs.
212213

213214
## v0.23.0
@@ -228,7 +229,7 @@ This method allows appenders to set the target/component emitting the logs.
228229
- opentelemetry::global::shutdown_logger_provider
229230
- opentelemetry::global::logger_provider
230231
- opentelemetry::global::GlobalLoggerProvider
231-
- opentelemetry::global::ObjectSafeLoggerProvider
232+
- opentelemetry::global::ObjectSafeLoggerProvider
232233
For creating appenders using Logging bridge API, refer to the opentelemetry-tracing-appender [example](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-appender-tracing/examples/basic.rs)
233234

234235
### Changed

0 commit comments

Comments
 (0)