Skip to content

Commit 4800dd6

Browse files
committed
feat: update otel versions for prometheus to 0.27
1 parent 849778d commit 4800dd6

File tree

7 files changed

+124
-119
lines changed

7 files changed

+124
-119
lines changed

opentelemetry-prometheus/CHANGELOG.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
## vNext
44

5-
- Bump MSRV to 1.70 [#2179](https://github.com/open-telemetry/opentelemetry-rust/pull/2179)
6-
- Update `opentelemetry` dependency version to 0.26
7-
- Update `opentelemetry_sdk` dependency version to 0.26
8-
- Update `opentelemetry-semantic-conventions` dependency version to 0.26
5+
## v0.27.0
6+
7+
- Update `opentelemetry` dependency version to 0.27
8+
- Update `opentelemetry_sdk` dependency version to 0.27
9+
- Update `opentelemetry-semantic-conventions` dependency version to 0.27
910

1011

1112
## v0.17.0

opentelemetry-prometheus/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "opentelemetry-prometheus"
3-
version = "0.17.0"
3+
version = "0.27.0"
44
description = "Prometheus exporter for OpenTelemetry"
55
homepage = "https://github.com/open-telemetry/opentelemetry-rust"
66
repository = "https://github.com/open-telemetry/opentelemetry-rust"
@@ -21,13 +21,13 @@ rustdoc-args = ["--cfg", "docsrs"]
2121

2222
[dependencies]
2323
once_cell = { workspace = true }
24-
opentelemetry = { version = "0.26", default-features = false, features = ["metrics"] }
25-
opentelemetry_sdk = { version = "0.26", default-features = false, features = ["metrics"] }
24+
opentelemetry = { version = "0.27", path = "../opentelemetry", default-features = false, features = ["metrics"] }
25+
opentelemetry_sdk = { version = "0.27", path = "../opentelemetry-sdk", default-features = false, features = ["metrics", "spec_unstable_metrics_views"] }
2626
prometheus = "0.13"
2727
protobuf = "2.14"
2828

2929
[dev-dependencies]
30-
opentelemetry-semantic-conventions = { version = "0.26" }
30+
opentelemetry-semantic-conventions = { version = "0.27" , path = "../opentelemetry-semantic-conventions"}
3131
http-body-util = { workspace = true }
3232
hyper = { workspace = true, features = ["full"] }
3333
hyper-util = { workspace = true, features = ["full"] }

opentelemetry-prometheus/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
[`Prometheus`] integration for applications instrumented with [`OpenTelemetry`].
88

99
**The development of prometheus exporter has halt until the Opentelemetry metrics API and SDK reaches 1.0. Current
10-
implementation is based on Opentelemetry API and SDK 0.24**.
10+
implementation is based on Opentelemetry API and SDK 0.27**.
1111

1212
[![Crates.io: opentelemetry-prometheus](https://img.shields.io/crates/v/opentelemetry-prometheus.svg)](https://crates.io/crates/opentelemetry-prometheus)
1313
[![Documentation](https://docs.rs/opentelemetry-prometheus/badge.svg)](https://docs.rs/opentelemetry-prometheus)

opentelemetry-prometheus/examples/hyper.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,17 @@ pub async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
8585
http_counter: meter
8686
.u64_counter("http_requests_total")
8787
.with_description("Total number of HTTP requests made.")
88-
.init(),
88+
.build(),
8989
http_body_gauge: meter
9090
.u64_histogram("example.http_response_size")
9191
.with_unit("By")
9292
.with_description("The metrics HTTP response sizes in bytes.")
93-
.init(),
93+
.build(),
9494
http_req_histogram: meter
9595
.f64_histogram("example.http_request_duration")
9696
.with_unit("ms")
9797
.with_description("The HTTP request latencies in milliseconds.")
98-
.init(),
98+
.build(),
9999
});
100100

101101
let addr: SocketAddr = ([127, 0, 0, 1], 3000).into();

opentelemetry-prometheus/src/config.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use core::fmt;
22
use once_cell::sync::OnceCell;
3-
use opentelemetry::metrics::{MetricsError, Result};
4-
use opentelemetry_sdk::metrics::ManualReaderBuilder;
3+
use opentelemetry_sdk::metrics::{MetricError, MetricResult, ManualReaderBuilder};
54
use std::sync::{Arc, Mutex};
65

76
use crate::{Collector, PrometheusExporter, ResourceSelector};
@@ -116,7 +115,7 @@ impl ExporterBuilder {
116115
}
117116

118117
/// Creates a new [PrometheusExporter] from this configuration.
119-
pub fn build(self) -> Result<PrometheusExporter> {
118+
pub fn build(self) -> MetricResult<PrometheusExporter> {
120119
let reader = Arc::new(self.reader.build());
121120

122121
let collector = Collector {
@@ -135,7 +134,7 @@ impl ExporterBuilder {
135134
let registry = self.registry.unwrap_or_default();
136135
registry
137136
.register(Box::new(collector))
138-
.map_err(|e| MetricsError::Other(e.to_string()))?;
137+
.map_err(|e| MetricError::Other(e.to_string()))?;
139138

140139
Ok(PrometheusExporter { reader })
141140
}

opentelemetry-prometheus/src/lib.rs

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
//! let counter = meter
2929
//! .u64_counter("a.counter")
3030
//! .with_description("Counts things")
31-
//! .init();
31+
//! .build();
3232
//! let histogram = meter
3333
//! .u64_histogram("a.histogram")
3434
//! .with_description("Records values")
35-
//! .init();
35+
//! .build();
3636
//!
3737
//! counter.add(100, &[KeyValue::new("key", "value")]);
3838
//! histogram.record(100, &[KeyValue::new("key", "value")]);
@@ -98,17 +98,19 @@
9898

9999
use once_cell::sync::{Lazy, OnceCell};
100100
use opentelemetry::{
101-
global,
102-
metrics::{MetricsError, Result},
101+
otel_error,
103102
Key, Value,
103+
InstrumentationScope
104104
};
105105
use opentelemetry_sdk::{
106106
metrics::{
107-
data::{self, ResourceMetrics, Temporality},
108-
reader::{MetricReader, TemporalitySelector},
107+
Temporality,
108+
data::{self, ResourceMetrics},
109+
reader::MetricReader,
109110
InstrumentKind, ManualReader, Pipeline,
111+
MetricResult
110112
},
111-
Resource, Scope,
113+
Resource,
112114
};
113115
use prometheus::{
114116
core::Desc,
@@ -152,30 +154,26 @@ pub struct PrometheusExporter {
152154
reader: Arc<ManualReader>,
153155
}
154156

155-
impl TemporalitySelector for PrometheusExporter {
156-
/// Note: Prometheus only supports cumulative temporality so this will always be
157-
/// [Temporality::Cumulative].
158-
fn temporality(&self, kind: InstrumentKind) -> Temporality {
159-
self.reader.temporality(kind)
160-
}
161-
}
162-
163157
impl MetricReader for PrometheusExporter {
164158
fn register_pipeline(&self, pipeline: Weak<Pipeline>) {
165159
self.reader.register_pipeline(pipeline)
166160
}
167161

168-
fn collect(&self, rm: &mut ResourceMetrics) -> Result<()> {
162+
fn collect(&self, rm: &mut ResourceMetrics) -> MetricResult<()> {
169163
self.reader.collect(rm)
170164
}
171165

172-
fn force_flush(&self) -> Result<()> {
166+
fn force_flush(&self) -> MetricResult<()> {
173167
self.reader.force_flush()
174168
}
175169

176-
fn shutdown(&self) -> Result<()> {
170+
fn shutdown(&self) -> MetricResult<()> {
177171
self.reader.shutdown()
178172
}
173+
174+
fn temporality(&self, kind: InstrumentKind) -> Temporality {
175+
self.reader.temporality(kind)
176+
}
179177
}
180178

181179
struct Collector {
@@ -193,7 +191,7 @@ struct Collector {
193191

194192
#[derive(Default)]
195193
struct CollectorInner {
196-
scope_infos: HashMap<Scope, MetricFamily>,
194+
scope_infos: HashMap<InstrumentationScope, MetricFamily>,
197195
metric_families: HashMap<String, MetricFamily>,
198196
}
199197

@@ -281,7 +279,7 @@ impl prometheus::core::Collector for Collector {
281279
let mut inner = match self.inner.lock() {
282280
Ok(guard) => guard,
283281
Err(err) => {
284-
global::handle_error(err);
282+
otel_error!(name: format!("OpenTelemetry error occurred. {}", err.to_string()));
285283
return Vec::new();
286284
}
287285
};
@@ -291,7 +289,7 @@ impl prometheus::core::Collector for Collector {
291289
scope_metrics: vec![],
292290
};
293291
if let Err(err) = self.reader.collect(&mut metrics) {
294-
global::handle_error(err);
292+
otel_error!(name: format!("OpenTelemetry metrics error occurred. {}", err.to_string()));
295293
return vec![];
296294
}
297295
let mut res = Vec::with_capacity(metrics.scope_metrics.len() + 1);
@@ -311,7 +309,7 @@ impl prometheus::core::Collector for Collector {
311309

312310
for scope_metrics in metrics.scope_metrics {
313311
let scope_labels = if !self.disable_scope_info {
314-
if !scope_metrics.scope.attributes.is_empty() {
312+
if scope_metrics.scope.attributes().count() > 0 {
315313
let scope_info = inner
316314
.scope_infos
317315
.entry(scope_metrics.scope.clone())
@@ -320,12 +318,12 @@ impl prometheus::core::Collector for Collector {
320318
}
321319

322320
let mut labels =
323-
Vec::with_capacity(1 + scope_metrics.scope.version.is_some() as usize);
321+
Vec::with_capacity(1 + scope_metrics.scope.version().is_some() as usize);
324322
let mut name = LabelPair::new();
325323
name.set_name(SCOPE_INFO_KEYS[0].into());
326-
name.set_value(scope_metrics.scope.name.to_string());
324+
name.set_value(scope_metrics.scope.name().to_string());
327325
labels.push(name);
328-
if let Some(version) = &scope_metrics.scope.version {
326+
if let Some(version) = &scope_metrics.scope.version() {
329327
let mut l_version = LabelPair::new();
330328
l_version.set_name(SCOPE_INFO_KEYS[1].into());
331329
l_version.set_value(version.to_string());
@@ -421,11 +419,11 @@ fn validate_metrics(
421419
) -> (bool, Option<String>) {
422420
if let Some(existing) = mfs.get(name) {
423421
if existing.get_field_type() != metric_type {
424-
global::handle_error(MetricsError::Other(format!("Instrument type conflict, using existing type definition. Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_field_type(), metric_type)));
422+
otel_error!(name: format!("OpenTelemetry metrics error occurred. Instrument type conflict, using existing type definition. Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_field_type(), metric_type));
425423
return (true, None);
426424
}
427425
if existing.get_help() != description {
428-
global::handle_error(MetricsError::Other(format!("Instrument description conflict, using existing. Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_help(), description)));
426+
otel_error!(name: format!("OpenTelemetry metrics error occurred. Instrument description conflict, using existing. Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_help(), description));
429427
return (false, Some(existing.get_help().to_string()));
430428
}
431429
(false, None)
@@ -578,16 +576,16 @@ fn create_info_metric(
578576
mf
579577
}
580578

581-
fn create_scope_info_metric(scope: &Scope) -> MetricFamily {
579+
fn create_scope_info_metric(scope: &InstrumentationScope) -> MetricFamily {
582580
let mut g = prometheus::proto::Gauge::default();
583581
g.set_value(1.0);
584582

585-
let mut labels = Vec::with_capacity(1 + scope.version.is_some() as usize);
583+
let mut labels = Vec::with_capacity(1 + scope.version().is_some() as usize);
586584
let mut name = LabelPair::new();
587585
name.set_name(SCOPE_INFO_KEYS[0].into());
588-
name.set_value(scope.name.to_string());
586+
name.set_value(scope.name().to_string());
589587
labels.push(name);
590-
if let Some(version) = &scope.version {
588+
if let Some(version) = &scope.version() {
591589
let mut v_label = LabelPair::new();
592590
v_label.set_name(SCOPE_INFO_KEYS[1].into());
593591
v_label.set_value(version.to_string());

0 commit comments

Comments
 (0)