Skip to content

Commit eda6bca

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

File tree

7 files changed

+122
-123
lines changed

7 files changed

+122
-123
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::{ManualReaderBuilder, MetricError, MetricResult};
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: 27 additions & 35 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")]);
@@ -97,18 +97,14 @@
9797
#![cfg_attr(test, deny(warnings))]
9898

9999
use once_cell::sync::{Lazy, OnceCell};
100-
use opentelemetry::{
101-
global,
102-
metrics::{MetricsError, Result},
103-
Key, Value,
104-
};
100+
use opentelemetry::{otel_error, InstrumentationScope, Key, Value};
105101
use opentelemetry_sdk::{
106102
metrics::{
107-
data::{self, ResourceMetrics, Temporality},
108-
reader::{MetricReader, TemporalitySelector},
109-
InstrumentKind, ManualReader, Pipeline,
103+
data::{self, ResourceMetrics},
104+
reader::MetricReader,
105+
InstrumentKind, ManualReader, MetricResult, Pipeline, Temporality,
110106
},
111-
Resource, Scope,
107+
Resource,
112108
};
113109
use prometheus::{
114110
core::Desc,
@@ -152,30 +148,26 @@ pub struct PrometheusExporter {
152148
reader: Arc<ManualReader>,
153149
}
154150

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-
163151
impl MetricReader for PrometheusExporter {
164152
fn register_pipeline(&self, pipeline: Weak<Pipeline>) {
165153
self.reader.register_pipeline(pipeline)
166154
}
167155

168-
fn collect(&self, rm: &mut ResourceMetrics) -> Result<()> {
156+
fn collect(&self, rm: &mut ResourceMetrics) -> MetricResult<()> {
169157
self.reader.collect(rm)
170158
}
171159

172-
fn force_flush(&self) -> Result<()> {
160+
fn force_flush(&self) -> MetricResult<()> {
173161
self.reader.force_flush()
174162
}
175163

176-
fn shutdown(&self) -> Result<()> {
164+
fn shutdown(&self) -> MetricResult<()> {
177165
self.reader.shutdown()
178166
}
167+
168+
fn temporality(&self, kind: InstrumentKind) -> Temporality {
169+
self.reader.temporality(kind)
170+
}
179171
}
180172

181173
struct Collector {
@@ -193,7 +185,7 @@ struct Collector {
193185

194186
#[derive(Default)]
195187
struct CollectorInner {
196-
scope_infos: HashMap<Scope, MetricFamily>,
188+
scope_infos: HashMap<InstrumentationScope, MetricFamily>,
197189
metric_families: HashMap<String, MetricFamily>,
198190
}
199191

@@ -281,7 +273,7 @@ impl prometheus::core::Collector for Collector {
281273
let mut inner = match self.inner.lock() {
282274
Ok(guard) => guard,
283275
Err(err) => {
284-
global::handle_error(err);
276+
otel_error!(name: format!("OpenTelemetry error occurred. {}", err.to_string()));
285277
return Vec::new();
286278
}
287279
};
@@ -291,7 +283,7 @@ impl prometheus::core::Collector for Collector {
291283
scope_metrics: vec![],
292284
};
293285
if let Err(err) = self.reader.collect(&mut metrics) {
294-
global::handle_error(err);
286+
otel_error!(name: format!("OpenTelemetry metrics error occurred. {}", err.to_string()));
295287
return vec![];
296288
}
297289
let mut res = Vec::with_capacity(metrics.scope_metrics.len() + 1);
@@ -311,7 +303,7 @@ impl prometheus::core::Collector for Collector {
311303

312304
for scope_metrics in metrics.scope_metrics {
313305
let scope_labels = if !self.disable_scope_info {
314-
if !scope_metrics.scope.attributes.is_empty() {
306+
if scope_metrics.scope.attributes().count() > 0 {
315307
let scope_info = inner
316308
.scope_infos
317309
.entry(scope_metrics.scope.clone())
@@ -320,12 +312,12 @@ impl prometheus::core::Collector for Collector {
320312
}
321313

322314
let mut labels =
323-
Vec::with_capacity(1 + scope_metrics.scope.version.is_some() as usize);
315+
Vec::with_capacity(1 + scope_metrics.scope.version().is_some() as usize);
324316
let mut name = LabelPair::new();
325317
name.set_name(SCOPE_INFO_KEYS[0].into());
326-
name.set_value(scope_metrics.scope.name.to_string());
318+
name.set_value(scope_metrics.scope.name().to_string());
327319
labels.push(name);
328-
if let Some(version) = &scope_metrics.scope.version {
320+
if let Some(version) = &scope_metrics.scope.version() {
329321
let mut l_version = LabelPair::new();
330322
l_version.set_name(SCOPE_INFO_KEYS[1].into());
331323
l_version.set_value(version.to_string());
@@ -421,11 +413,11 @@ fn validate_metrics(
421413
) -> (bool, Option<String>) {
422414
if let Some(existing) = mfs.get(name) {
423415
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)));
416+
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));
425417
return (true, None);
426418
}
427419
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)));
420+
otel_error!(name: format!("OpenTelemetry metrics error occurred. Instrument description conflict, using existing. Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_help(), description));
429421
return (false, Some(existing.get_help().to_string()));
430422
}
431423
(false, None)
@@ -578,16 +570,16 @@ fn create_info_metric(
578570
mf
579571
}
580572

581-
fn create_scope_info_metric(scope: &Scope) -> MetricFamily {
573+
fn create_scope_info_metric(scope: &InstrumentationScope) -> MetricFamily {
582574
let mut g = prometheus::proto::Gauge::default();
583575
g.set_value(1.0);
584576

585-
let mut labels = Vec::with_capacity(1 + scope.version.is_some() as usize);
577+
let mut labels = Vec::with_capacity(1 + scope.version().is_some() as usize);
586578
let mut name = LabelPair::new();
587579
name.set_name(SCOPE_INFO_KEYS[0].into());
588-
name.set_value(scope.name.to_string());
580+
name.set_value(scope.name().to_string());
589581
labels.push(name);
590-
if let Some(version) = &scope.version {
582+
if let Some(version) = &scope.version() {
591583
let mut v_label = LabelPair::new();
592584
v_label.set_name(SCOPE_INFO_KEYS[1].into());
593585
v_label.set_value(version.to_string());

0 commit comments

Comments
 (0)