Skip to content

Commit e6102bb

Browse files
committed
Upgrade to otel 0.30
1 parent 088a700 commit e6102bb

File tree

2 files changed

+68
-46
lines changed

2 files changed

+68
-46
lines changed

Cargo.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "tracing-opentelemetry"
3-
version = "0.30.0"
3+
version = "0.31.0"
44
description = "OpenTelemetry integration for tracing"
55
homepage = "https://github.com/tokio-rs/tracing-opentelemetry"
66
repository = "https://github.com/tokio-rs/tracing-opentelemetry"
@@ -23,8 +23,8 @@ metrics = ["opentelemetry/metrics","opentelemetry_sdk/metrics", "smallvec"]
2323
metrics_gauge_unstable = []
2424

2525
[dependencies]
26-
opentelemetry = { version = "0.29.0", default-features = false, features = ["trace"] }
27-
opentelemetry_sdk = { version = "0.29.0", default-features = false, features = ["trace"] }
26+
opentelemetry = { version = "0.30.0", default-features = false, features = ["trace"] }
27+
opentelemetry_sdk = { version = "0.30.0", default-features = false, features = ["trace"] }
2828
tracing = { version = "0.1.35", default-features = false, features = ["std"] }
2929
tracing-core = "0.1.28"
3030
tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] }
@@ -43,11 +43,11 @@ smallvec = { version = "1.0", optional = true }
4343
[dev-dependencies]
4444
async-trait = "0.1.56"
4545
criterion = { version = "0.5.1", default-features = false, features = ["html_reports"] }
46-
opentelemetry = { version = "0.29.0", features = ["trace", "metrics"] }
47-
opentelemetry_sdk = { version = "0.29.0", default-features = false, features = ["trace", "rt-tokio"] }
48-
opentelemetry-stdout = { version = "0.29.0", features = ["trace", "metrics"] }
49-
opentelemetry-otlp = { version = "0.29.0", features = ["metrics", "grpc-tonic"] }
50-
opentelemetry-semantic-conventions = { version = "0.29.0", features = ["semconv_experimental"] }
46+
opentelemetry = { version = "0.30.0", features = ["trace", "metrics"] }
47+
opentelemetry_sdk = { version = "0.30.0", default-features = false, features = ["trace", "rt-tokio", "experimental_metrics_custom_reader"] }
48+
opentelemetry-stdout = { version = "0.30.0", features = ["trace", "metrics"] }
49+
opentelemetry-otlp = { version = "0.30.0", features = ["metrics", "grpc-tonic"] }
50+
opentelemetry-semantic-conventions = { version = "0.30.0", features = ["semconv_experimental"] }
5151
futures-util = { version = "0.3.17", default-features = false }
5252
tokio = { version = "1", features = ["full"] }
5353
tokio-stream = "0.1"

tests/metrics_publishing.rs

Lines changed: 60 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ use opentelemetry_sdk::{
44
metrics::{
55
data::{self, Gauge, Histogram, Sum},
66
reader::MetricReader,
7-
InstrumentKind, ManualReader, MeterProviderBuilder, MetricError, SdkMeterProvider,
7+
InstrumentKind, ManualReader, MeterProviderBuilder, SdkMeterProvider,
88
},
9-
Resource,
109
};
1110

1211
use std::{fmt::Debug, sync::Arc};
@@ -548,10 +547,7 @@ impl MetricReader for TestReader {
548547
self.inner.register_pipeline(pipeline);
549548
}
550549

551-
fn collect(
552-
&self,
553-
rm: &mut data::ResourceMetrics,
554-
) -> opentelemetry_sdk::metrics::MetricResult<()> {
550+
fn collect(&self, rm: &mut data::ResourceMetrics) -> OTelSdkResult {
555551
self.inner.collect(rm)
556552
}
557553

@@ -566,6 +562,10 @@ impl MetricReader for TestReader {
566562
fn temporality(&self, kind: InstrumentKind) -> opentelemetry_sdk::metrics::Temporality {
567563
self.inner.temporality(kind)
568564
}
565+
566+
fn shutdown_with_timeout(&self, timeout: std::time::Duration) -> OTelSdkResult {
567+
self.inner.shutdown_with_timeout(timeout)
568+
}
569569
}
570570

571571
struct TestExporter<T> {
@@ -577,78 +577,100 @@ struct TestExporter<T> {
577577
_meter_provider: SdkMeterProvider,
578578
}
579579

580+
trait AsAny {
581+
fn as_any(&self) -> &dyn std::any::Any;
582+
}
583+
584+
impl AsAny for data::AggregatedMetrics {
585+
fn as_any(&self) -> &dyn std::any::Any {
586+
match self {
587+
data::AggregatedMetrics::F64(data::MetricData::Sum(sum)) => sum as &dyn std::any::Any,
588+
data::AggregatedMetrics::U64(data::MetricData::Sum(sum)) => sum as &dyn std::any::Any,
589+
data::AggregatedMetrics::I64(data::MetricData::Sum(sum)) => sum as &dyn std::any::Any,
590+
data::AggregatedMetrics::F64(data::MetricData::Histogram(histogram)) => {
591+
histogram as &dyn std::any::Any
592+
}
593+
data::AggregatedMetrics::U64(data::MetricData::Histogram(histogram)) => {
594+
histogram as &dyn std::any::Any
595+
}
596+
data::AggregatedMetrics::I64(data::MetricData::Histogram(histogram)) => {
597+
histogram as &dyn std::any::Any
598+
}
599+
_ => unreachable!("expected a Sum<T> or Histogram<T>"),
600+
}
601+
}
602+
}
603+
580604
impl<T> TestExporter<T>
581605
where
582606
T: Debug + PartialEq + Copy + std::iter::Sum + 'static,
583607
{
584-
fn export(&self) -> Result<(), MetricError> {
585-
let mut rm = data::ResourceMetrics {
586-
resource: Resource::builder().build(),
587-
scope_metrics: Vec::new(),
588-
};
608+
fn export(&self) -> OTelSdkResult {
609+
let mut rm = data::ResourceMetrics::default();
589610
self.reader.collect(&mut rm)?;
590611

591-
assert!(!rm.scope_metrics.is_empty());
612+
let mut scope_metrics = rm.scope_metrics().peekable();
613+
614+
assert!(scope_metrics.peek().is_some());
592615

593-
rm.scope_metrics.into_iter().for_each(|scope_metrics| {
594-
assert_eq!(scope_metrics.scope.name(), INSTRUMENTATION_LIBRARY_NAME);
595-
assert_eq!(scope_metrics.scope.version().unwrap(), CARGO_PKG_VERSION);
616+
scope_metrics.for_each(|scope_metrics| {
617+
assert_eq!(scope_metrics.scope().name(), INSTRUMENTATION_LIBRARY_NAME);
618+
assert_eq!(scope_metrics.scope().version().unwrap(), CARGO_PKG_VERSION);
596619

597-
scope_metrics.metrics.into_iter().for_each(|metric| {
598-
assert_eq!(metric.name, self.expected_metric_name);
620+
scope_metrics.metrics().for_each(|metric| {
621+
assert_eq!(metric.name(), self.expected_metric_name);
599622

600623
match self.expected_instrument_kind {
601624
InstrumentKind::Counter | InstrumentKind::UpDownCounter => {
602-
let sum = metric.data.as_any().downcast_ref::<Sum<T>>().unwrap();
625+
let sum = metric.data().as_any().downcast_ref::<Sum<T>>().unwrap();
603626
assert_eq!(
604627
self.expected_value,
605-
sum.data_points
606-
.iter()
607-
.map(|data_point| data_point.value)
608-
.sum()
628+
sum.data_points().map(|data_point| data_point.value()).sum()
609629
);
610630

611631
if let Some(expected_attributes) = self.expected_attributes.as_ref() {
612-
sum.data_points.iter().for_each(|data_point| {
632+
sum.data_points().for_each(|data_point| {
613633
assert!(compare_attributes(
614634
expected_attributes,
615-
&data_point.attributes,
635+
data_point.attributes().cloned().collect(),
616636
))
617637
});
618638
}
619639
}
620640
InstrumentKind::Gauge => {
621-
let gauge = metric.data.as_any().downcast_ref::<Gauge<T>>().unwrap();
641+
let gauge = metric.data().as_any().downcast_ref::<Gauge<T>>().unwrap();
622642
assert_eq!(
623643
self.expected_value,
624644
gauge
625-
.data_points
626-
.iter()
627-
.map(|data_point| data_point.value)
628-
.next_back()
645+
.data_points()
646+
.map(|data_point| data_point.value())
647+
.last()
629648
.unwrap()
630649
);
631650

632651
if let Some(expected_attributes) = self.expected_attributes.as_ref() {
633-
gauge.data_points.iter().for_each(|data_point| {
652+
gauge.data_points().for_each(|data_point| {
634653
assert!(compare_attributes(
635654
expected_attributes,
636-
&data_point.attributes,
655+
data_point.attributes().cloned().collect(),
637656
))
638657
});
639658
}
640659
}
641660
InstrumentKind::Histogram => {
642-
let histogram =
643-
metric.data.as_any().downcast_ref::<Histogram<T>>().unwrap();
644-
let histogram_data = histogram.data_points.first().unwrap();
645-
assert!(histogram_data.count > 0);
646-
assert_eq!(histogram_data.sum, self.expected_value);
661+
let histogram = metric
662+
.data()
663+
.as_any()
664+
.downcast_ref::<Histogram<T>>()
665+
.unwrap();
666+
let histogram_data = histogram.data_points().next().unwrap();
667+
assert!(histogram_data.count() > 0);
668+
assert_eq!(histogram_data.sum(), self.expected_value);
647669

648670
if let Some(expected_attributes) = self.expected_attributes.as_ref() {
649671
assert!(compare_attributes(
650672
expected_attributes,
651-
&histogram_data.attributes
673+
histogram_data.attributes().cloned().collect(),
652674
))
653675
}
654676
}
@@ -666,7 +688,7 @@ where
666688
// After sorting the KeyValue vec, compare them.
667689
// Return true if they are equal.
668690
#[allow(clippy::ptr_arg)]
669-
fn compare_attributes(expected: &Vec<KeyValue>, actual: &Vec<KeyValue>) -> bool {
691+
fn compare_attributes(expected: &Vec<KeyValue>, actual: Vec<KeyValue>) -> bool {
670692
let mut expected = expected.clone();
671693
let mut actual = actual.clone();
672694

0 commit comments

Comments
 (0)