Skip to content

Commit eb0d997

Browse files
authored
Remove MetricProducer (#2105)
1 parent 24da59e commit eb0d997

File tree

4 files changed

+11
-73
lines changed

4 files changed

+11
-73
lines changed

opentelemetry-sdk/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
## vNext
44

55
- Update `async-std` dependency version to 1.13
6+
- *Breaking* - Remove support for `MetricProducer` which allowed metrics from
7+
external sources to be sent through OpenTelemetry.
8+
[#2105](https://github.com/open-telemetry/opentelemetry-rust/pull/2105)
69

710
## v0.25.0
811

opentelemetry-sdk/src/metrics/manual_reader.rs

+5-36
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ use super::{
1212
data::{ResourceMetrics, Temporality},
1313
instrument::InstrumentKind,
1414
pipeline::Pipeline,
15-
reader::{
16-
DefaultTemporalitySelector, MetricProducer, MetricReader, SdkProducer, TemporalitySelector,
17-
},
15+
reader::{DefaultTemporalitySelector, MetricReader, SdkProducer, TemporalitySelector},
1816
};
1917

2018
/// A simple [MetricReader] that allows an application to read metrics on demand.
@@ -51,7 +49,6 @@ impl fmt::Debug for ManualReader {
5149
struct ManualReaderInner {
5250
sdk_producer: Option<Weak<dyn SdkProducer>>,
5351
is_shutdown: bool,
54-
external_producers: Vec<Box<dyn MetricProducer>>,
5552
}
5653

5754
impl ManualReader {
@@ -61,15 +58,11 @@ impl ManualReader {
6158
}
6259

6360
/// A [MetricReader] which is directly called to collect metrics.
64-
pub(crate) fn new(
65-
temporality_selector: Box<dyn TemporalitySelector>,
66-
producers: Vec<Box<dyn MetricProducer>>,
67-
) -> Self {
61+
pub(crate) fn new(temporality_selector: Box<dyn TemporalitySelector>) -> Self {
6862
ManualReader {
6963
inner: Box::new(Mutex::new(ManualReaderInner {
7064
sdk_producer: None,
7165
is_shutdown: false,
72-
external_producers: producers,
7366
})),
7467
temporality_selector,
7568
}
@@ -98,7 +91,7 @@ impl MetricReader for ManualReader {
9891
});
9992
}
10093

101-
/// Gathers all metrics from the SDK and other [MetricProducer]s, calling any
94+
/// Gathers all metrics from the SDK, calling any
10295
/// callbacks necessary and returning the results.
10396
///
10497
/// Returns an error if called after shutdown.
@@ -113,19 +106,7 @@ impl MetricReader for ManualReader {
113106
}
114107
};
115108

116-
let mut errs = vec![];
117-
for producer in &inner.external_producers {
118-
match producer.produce() {
119-
Ok(metrics) => rm.scope_metrics.push(metrics),
120-
Err(err) => errs.push(err),
121-
}
122-
}
123-
124-
if errs.is_empty() {
125-
Ok(())
126-
} else {
127-
Err(MetricsError::Other(format!("{:?}", errs)))
128-
}
109+
Ok(())
129110
}
130111

131112
/// ForceFlush is a no-op, it always returns nil.
@@ -140,7 +121,6 @@ impl MetricReader for ManualReader {
140121
// Any future call to collect will now return an error.
141122
inner.sdk_producer = None;
142123
inner.is_shutdown = true;
143-
inner.external_producers = Vec::new();
144124

145125
Ok(())
146126
}
@@ -149,7 +129,6 @@ impl MetricReader for ManualReader {
149129
/// Configuration for a [ManualReader]
150130
pub struct ManualReaderBuilder {
151131
temporality_selector: Box<dyn TemporalitySelector>,
152-
producers: Vec<Box<dyn MetricProducer>>,
153132
}
154133

155134
impl fmt::Debug for ManualReaderBuilder {
@@ -162,7 +141,6 @@ impl Default for ManualReaderBuilder {
162141
fn default() -> Self {
163142
ManualReaderBuilder {
164143
temporality_selector: Box::new(DefaultTemporalitySelector { _private: () }),
165-
producers: vec![],
166144
}
167145
}
168146
}
@@ -184,17 +162,8 @@ impl ManualReaderBuilder {
184162
self
185163
}
186164

187-
/// Registers a an external [MetricProducer] with this reader.
188-
///
189-
/// The producer is used as a source of aggregated metric data which is
190-
/// incorporated into metrics collected from the SDK.
191-
pub fn with_producer(mut self, producer: impl MetricProducer + 'static) -> Self {
192-
self.producers.push(Box::new(producer));
193-
self
194-
}
195-
196165
/// Create a new [ManualReader] from this configuration.
197166
pub fn build(self) -> ManualReader {
198-
ManualReader::new(self.temporality_selector, self.producers)
167+
ManualReader::new(self.temporality_selector)
199168
}
200169
}

opentelemetry-sdk/src/metrics/periodic_reader.rs

+2-30
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@ use opentelemetry::{
1818

1919
use crate::runtime::Runtime;
2020
use crate::{
21-
metrics::{
22-
exporter::PushMetricsExporter,
23-
reader::{MetricProducer, SdkProducer},
24-
},
21+
metrics::{exporter::PushMetricsExporter, reader::SdkProducer},
2522
Resource,
2623
};
2724

@@ -57,7 +54,6 @@ pub struct PeriodicReaderBuilder<E, RT> {
5754
interval: Duration,
5855
timeout: Duration,
5956
exporter: E,
60-
producers: Vec<Box<dyn MetricProducer>>,
6157
runtime: RT,
6258
}
6359

@@ -79,7 +75,6 @@ where
7975
PeriodicReaderBuilder {
8076
interval,
8177
timeout,
82-
producers: vec![],
8378
exporter,
8479
runtime,
8580
}
@@ -114,15 +109,6 @@ where
114109
self
115110
}
116111

117-
/// Registers a an external [MetricProducer] with this reader.
118-
///
119-
/// The producer is used as a source of aggregated metric data which is
120-
/// incorporated into metrics collected from the SDK.
121-
pub fn with_producer(mut self, producer: impl MetricProducer + 'static) -> Self {
122-
self.producers.push(Box::new(producer));
123-
self
124-
}
125-
126112
/// Create a [PeriodicReader] with the given config.
127113
pub fn build(self) -> PeriodicReader {
128114
let (message_sender, message_receiver) = mpsc::channel(256);
@@ -156,7 +142,6 @@ where
156142
inner: Arc::new(Mutex::new(PeriodicReaderInner {
157143
message_sender,
158144
is_shutdown: false,
159-
external_producers: self.producers,
160145
sdk_producer_or_worker: ProducerOrWorker::Worker(Box::new(worker)),
161146
})),
162147
}
@@ -226,7 +211,6 @@ impl fmt::Debug for PeriodicReader {
226211
struct PeriodicReaderInner {
227212
message_sender: mpsc::Sender<Message>,
228213
is_shutdown: bool,
229-
external_producers: Vec<Box<dyn MetricProducer>>,
230214
sdk_producer_or_worker: ProducerOrWorker,
231215
}
232216

@@ -342,19 +326,7 @@ impl MetricReader for PeriodicReader {
342326
return Err(MetricsError::Other("reader is not registered".into()));
343327
}
344328

345-
let mut errs = vec![];
346-
for producer in &inner.external_producers {
347-
match producer.produce() {
348-
Ok(metrics) => rm.scope_metrics.push(metrics),
349-
Err(err) => errs.push(err),
350-
}
351-
}
352-
353-
if errs.is_empty() {
354-
Ok(())
355-
} else {
356-
Err(MetricsError::Other(format!("{:?}", errs)))
357-
}
329+
Ok(())
358330
}
359331

360332
fn force_flush(&self) -> Result<()> {

opentelemetry-sdk/src/metrics/reader.rs

+1-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::{fmt, sync::Weak};
44
use opentelemetry::metrics::Result;
55

66
use super::{
7-
data::{ResourceMetrics, ScopeMetrics, Temporality},
7+
data::{ResourceMetrics, Temporality},
88
instrument::InstrumentKind,
99
pipeline::Pipeline,
1010
};
@@ -59,12 +59,6 @@ pub(crate) trait SdkProducer: fmt::Debug + Send + Sync {
5959
fn produce(&self, rm: &mut ResourceMetrics) -> Result<()>;
6060
}
6161

62-
/// Produces metrics for a [MetricReader] from an external source.
63-
pub trait MetricProducer: fmt::Debug + Send + Sync {
64-
/// Returns aggregated metrics from an external source.
65-
fn produce(&self) -> Result<ScopeMetrics>;
66-
}
67-
6862
/// An interface for selecting the temporality for an [InstrumentKind].
6963
pub trait TemporalitySelector: Send + Sync {
7064
/// Selects the temporality to use based on the [InstrumentKind].

0 commit comments

Comments
 (0)