Skip to content

Commit e72f278

Browse files
authored
update to opentelemetry 0.29 (#40)
1 parent 1986344 commit e72f278

File tree

7 files changed

+65
-64
lines changed

7 files changed

+65
-64
lines changed

Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ tonic = { version = "0.12", optional = true }
1919

2020
rand = "0.9.0"
2121

22-
opentelemetry = { version = "0.28", default-features = false, features = ["trace"] }
23-
opentelemetry_sdk = { version = "0.28", default-features = false, features = ["trace"] }
24-
opentelemetry-otlp = { version = "0.28", default-features = false, features = ["trace", "metrics"] }
22+
opentelemetry = { version = "0.29", default-features = false, features = ["trace"] }
23+
opentelemetry_sdk = { version = "0.29", default-features = false, features = ["trace"] }
24+
opentelemetry-otlp = { version = "0.29", default-features = false, features = ["trace", "metrics"] }
2525
futures-util = "0.3"
2626

2727
tracing = "0.1"
2828
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
29-
tracing-opentelemetry = "0.29"
29+
tracing-opentelemetry = "0.30"
3030

3131
thiserror = "2"
3232

@@ -38,7 +38,7 @@ regex = "1.11.1"
3838
[dev-dependencies]
3939
async-trait = "0.1.88"
4040
insta = "1.42.1"
41-
opentelemetry_sdk = { version = "0.28", default-features = false, features = ["testing"] }
41+
opentelemetry_sdk = { version = "0.29", default-features = false, features = ["testing"] }
4242
regex = "1.11.1"
4343
tokio = {version = "1.44.1", features = ["test-util"] }
4444
ulid = "1.2.0"

src/bridges/tracing.rs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -294,19 +294,20 @@ mod tests {
294294
fn test_tracing_bridge() {
295295
let exporter = InMemorySpanExporterBuilder::new().build();
296296

297-
let handler = crate::configure()
298-
.local()
299-
.send_to_logfire(false)
300-
.with_additional_span_processor(SimpleSpanProcessor::new(Box::new(
301-
DeterministicExporter::new(exporter.clone(), file!(), line!()),
302-
)))
303-
.install_panic_handler()
304-
.with_default_level_filter(LevelFilter::TRACE)
305-
.with_advanced_options(
306-
AdvancedOptions::default().with_id_generator(DeterministicIdGenerator::new()),
307-
)
308-
.finish()
309-
.unwrap();
297+
let handler =
298+
crate::configure()
299+
.local()
300+
.send_to_logfire(false)
301+
.with_additional_span_processor(SimpleSpanProcessor::new(
302+
DeterministicExporter::new(exporter.clone(), file!(), line!()),
303+
))
304+
.install_panic_handler()
305+
.with_default_level_filter(LevelFilter::TRACE)
306+
.with_advanced_options(
307+
AdvancedOptions::default().with_id_generator(DeterministicIdGenerator::new()),
308+
)
309+
.finish()
310+
.unwrap();
310311

311312
let guard = set_local_logfire(handler);
312313

@@ -340,7 +341,7 @@ mod tests {
340341
},
341342
parent_span_id: 0000000000000000,
342343
span_kind: Internal,
343-
name: "event src/bridges/tracing.rs:314",
344+
name: "event src/bridges/tracing.rs:315",
344345
start_time: SystemTime {
345346
tv_sec: 0,
346347
tv_nsec: 0,
@@ -1280,7 +1281,7 @@ mod tests {
12801281
"code.lineno",
12811282
),
12821283
value: I64(
1283-
322,
1284+
323,
12841285
),
12851286
},
12861287
],
@@ -1346,7 +1347,7 @@ mod tests {
13461347
"code.lineno",
13471348
),
13481349
value: I64(
1349-
323,
1350+
324,
13501351
),
13511352
},
13521353
],

src/internal/exporters/console.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use std::{
55
};
66

77
use chrono::{DateTime, Utc};
8-
use futures_util::future::BoxFuture;
98
use nu_ansi_term::{Color, Style};
109
use opentelemetry::Value;
1110
use opentelemetry_sdk::trace::SpanData;
@@ -35,14 +34,14 @@ impl SimpleConsoleSpanExporter {
3534
}
3635

3736
impl opentelemetry_sdk::trace::SpanExporter for SimpleConsoleSpanExporter {
38-
fn export(
39-
&mut self,
37+
async fn export(
38+
&self,
4039
batch: Vec<opentelemetry_sdk::trace::SpanData>,
41-
) -> BoxFuture<'static, opentelemetry_sdk::error::OTelSdkResult> {
40+
) -> opentelemetry_sdk::error::OTelSdkResult {
4241
if !self.stopped {
4342
self.writer.write_batch(&batch);
4443
}
45-
Box::pin(std::future::ready(Ok(())))
44+
Ok(())
4645
}
4746

4847
fn shutdown(&mut self) -> opentelemetry_sdk::error::OTelSdkResult {
@@ -384,7 +383,7 @@ mod tests {
384383
1970-01-01T00:00:00.000002Z DEBUG logfire::internal::exporters::console::tests debug span
385384
1970-01-01T00:00:00.000003Z DEBUG logfire::internal::exporters::console::tests debug span with explicit parent
386385
1970-01-01T00:00:00.000004Z INFO logfire::internal::exporters::console::tests hello world log
387-
[2m1970-01-01T00:00:00.000005Z[0m[31m ERROR[0m [2;3mlogfire[0m [1mpanic: oh no![0m [3mlocation[0m=src/internal/exporters/console.rs:370:17, [3mbacktrace[0m=disabled backtrace
386+
[2m1970-01-01T00:00:00.000005Z[0m[31m ERROR[0m [2;3mlogfire[0m [1mpanic: oh no![0m [3mlocation[0m=src/internal/exporters/console.rs:369:17, [3mbacktrace[0m=disabled backtrace
388387
"#);
389388
}
390389
}

src/internal/exporters/remove_pending.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use std::collections::HashMap;
22

3-
use futures_util::future::BoxFuture;
43
use opentelemetry_sdk::{
54
error::OTelSdkResult,
65
trace::{SpanData, SpanExporter},
@@ -18,7 +17,7 @@ impl<Inner> RemovePendingSpansExporter<Inner> {
1817
}
1918

2019
impl<Inner: SpanExporter> SpanExporter for RemovePendingSpansExporter<Inner> {
21-
fn export(&mut self, mut spans: Vec<SpanData>) -> BoxFuture<'static, OTelSdkResult> {
20+
async fn export(&self, mut spans: Vec<SpanData>) -> OTelSdkResult {
2221
let mut spans_by_id = HashMap::new();
2322

2423
spans = spans
@@ -44,7 +43,7 @@ impl<Inner: SpanExporter> SpanExporter for RemovePendingSpansExporter<Inner> {
4443
.collect();
4544

4645
spans.extend(spans_by_id.into_values());
47-
self.0.export(spans)
46+
self.0.export(spans).await
4847
}
4948

5049
fn shutdown(&mut self) -> OTelSdkResult {

src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,11 @@ pub enum ConfigureError {
158158

159159
/// Error configuring the OpenTelemetry tracer.
160160
#[error("Error configuring the OpenTelemetry tracer: {0}")]
161-
Trace(#[from] opentelemetry::trace::TraceError),
161+
Trace(#[from] opentelemetry_sdk::trace::TraceError),
162+
163+
/// OpenTelemetry exporter failed to build
164+
#[error("Error building the OpenTelemetry exporter: {0}")]
165+
ExporterBuildError(#[from] opentelemetry_otlp::ExporterBuildError),
162166

163167
/// Error installing the OpenTelemetry tracer.
164168
#[error("Error configuring the OpenTelemetry tracer: {0}")]
@@ -548,7 +552,7 @@ impl LogfireConfigBuilder {
548552

549553
if let Some(console_writer) = console_writer.clone() {
550554
tracer_provider_builder = tracer_provider_builder.with_span_processor(
551-
SimpleSpanProcessor::new(Box::new(SimpleConsoleSpanExporter::new(console_writer))),
555+
SimpleSpanProcessor::new(SimpleConsoleSpanExporter::new(console_writer)),
552556
);
553557
}
554558

src/test_utils.rs

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use std::{
44
borrow::Cow,
55
collections::{HashMap, hash_map::Entry},
66
future::Future,
7-
pin::Pin,
87
sync::{
98
Arc, Mutex,
109
atomic::{AtomicU64, Ordering},
@@ -72,10 +71,7 @@ impl<Inner> DeterministicExporter<Inner> {
7271
}
7372

7473
impl<Inner: SpanExporter> SpanExporter for DeterministicExporter<Inner> {
75-
fn export(
76-
&mut self,
77-
mut batch: Vec<SpanData>,
78-
) -> Pin<Box<dyn Future<Output = OTelSdkResult> + Send>> {
74+
fn export(&self, mut batch: Vec<SpanData>) -> impl Future<Output = OTelSdkResult> + Send {
7975
for span in &mut batch {
8076
// By remapping timestamps to deterministic values, we should find that
8177
// - pending spans have the same start time as their real span
@@ -133,30 +129,32 @@ impl<Inner: SpanExporter> SpanExporter for DeterministicExporter<Inner> {
133129

134130
#[async_trait]
135131
impl<Inner: PushMetricExporter> PushMetricExporter for DeterministicExporter<Inner> {
136-
async fn export(&self, metrics: &mut ResourceMetrics) -> OTelSdkResult {
137-
let timestamp_remap = self.timestamp_remap.clone();
138-
for scope in &mut metrics.scope_metrics {
139-
for metric in &mut scope.metrics {
140-
if let Some(sum) = (*metric.data).as_mut().downcast_mut::<Sum<u64>>() {
141-
sum.start_time = timestamp_remap
142-
.lock()
143-
.unwrap()
144-
.remap_timestamp(sum.start_time);
145-
sum.time = timestamp_remap.lock().unwrap().remap_timestamp(sum.time);
146-
147-
for data_point in &mut sum.data_points {
148-
data_point
149-
.attributes
150-
.sort_by_cached_key(|kv| kv.key.to_string());
132+
fn export(&self, metrics: &mut ResourceMetrics) -> impl Future<Output = OTelSdkResult> {
133+
async move {
134+
let timestamp_remap = self.timestamp_remap.clone();
135+
for scope in &mut metrics.scope_metrics {
136+
for metric in &mut scope.metrics {
137+
if let Some(sum) = (*metric.data).as_mut().downcast_mut::<Sum<u64>>() {
138+
sum.start_time = timestamp_remap
139+
.lock()
140+
.unwrap()
141+
.remap_timestamp(sum.start_time);
142+
sum.time = timestamp_remap.lock().unwrap().remap_timestamp(sum.time);
143+
144+
for data_point in &mut sum.data_points {
145+
data_point
146+
.attributes
147+
.sort_by_cached_key(|kv| kv.key.to_string());
148+
}
151149
}
152150
}
153151
}
152+
self.exporter.export(metrics).await
154153
}
155-
self.exporter.export(metrics).await
156154
}
157155

158-
async fn force_flush(&self) -> OTelSdkResult {
159-
self.exporter.force_flush().await
156+
fn force_flush(&self) -> OTelSdkResult {
157+
self.exporter.force_flush()
160158
}
161159

162160
fn shutdown(&self) -> OTelSdkResult {
@@ -179,7 +177,7 @@ impl<Inner> DeterministicExporter<Inner> {
179177
}
180178
}
181179

182-
fn remap_timestamp(&mut self, from: SystemTime) -> SystemTime {
180+
fn remap_timestamp(&self, from: SystemTime) -> SystemTime {
183181
self.timestamp_remap.lock().unwrap().remap_timestamp(from)
184182
}
185183
}

tests/test_basic_exports.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ use insta::assert_debug_snapshot;
66
use opentelemetry_sdk::{
77
Resource,
88
metrics::{
9-
InMemoryMetricExporterBuilder, ManualReader,
10-
data::ResourceMetrics,
11-
exporter::{self},
12-
reader::MetricReader,
9+
InMemoryMetricExporterBuilder, ManualReader, data::ResourceMetrics,
10+
exporter::PushMetricExporter, reader::MetricReader,
1311
},
1412
trace::{InMemorySpanExporterBuilder, SimpleSpanProcessor},
1513
};
@@ -33,8 +31,10 @@ fn test_basic_span() {
3331
let handler = logfire::configure()
3432
.local()
3533
.send_to_logfire(false)
36-
.with_additional_span_processor(SimpleSpanProcessor::new(Box::new(
37-
DeterministicExporter::new(exporter.clone(), file!(), line!()),
34+
.with_additional_span_processor(SimpleSpanProcessor::new(DeterministicExporter::new(
35+
exporter.clone(),
36+
file!(),
37+
line!(),
3838
)))
3939
.install_panic_handler()
4040
.with_default_level_filter(LevelFilter::TRACE)
@@ -1032,7 +1032,7 @@ fn test_basic_span() {
10321032
"code.lineno",
10331033
),
10341034
value: I64(
1035-
690,
1035+
694,
10361036
),
10371037
},
10381038
KeyValue {
@@ -1239,7 +1239,7 @@ impl SharedManualReader {
12391239
}
12401240
}
12411241

1242-
async fn export(&self, exporter: &mut dyn exporter::PushMetricExporter) {
1242+
async fn export<E: PushMetricExporter>(&self, exporter: &E) {
12431243
let mut metrics = ResourceMetrics {
12441244
resource: Resource::builder_empty().build(),
12451245
scope_metrics: Vec::new(),

0 commit comments

Comments
 (0)