Skip to content

Commit 9fdba40

Browse files
authored
Merge pull request #215 from SimenB/otel-0-28
feat: support OTel 0.28
1 parent 9445740 commit 9fdba40

File tree

5 files changed

+39
-0
lines changed

5 files changed

+39
-0
lines changed

reqwest-tracing/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
- Added support for OpenTelemetry `0.28` ([#215](https://github.com/TrueLayer/reqwest-middleware/pull/215))
12+
1013
## [0.5.5] - 2024-12-02
1114

1215
### Added

reqwest-tracing/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ opentelemetry_0_24 = ["opentelemetry_0_24_pkg", "tracing-opentelemetry_0_25_pkg"
1818
opentelemetry_0_25 = ["opentelemetry_0_25_pkg", "tracing-opentelemetry_0_26_pkg"]
1919
opentelemetry_0_26 = ["opentelemetry_0_26_pkg", "tracing-opentelemetry_0_27_pkg"]
2020
opentelemetry_0_27 = ["opentelemetry_0_27_pkg", "tracing-opentelemetry_0_28_pkg"]
21+
opentelemetry_0_28 = ["opentelemetry_0_28_pkg", "tracing-opentelemetry_0_29_pkg"]
2122
# This feature ensures that both the old (deprecated) and new attributes are published simultaneously.
2223
# By doing so, we maintain backward compatibility, allowing existing code that relies on the old attributes
2324
# to continue functioning while encouraging the transition to the new attributes.
@@ -41,6 +42,7 @@ opentelemetry_0_24_pkg = { package = "opentelemetry", version = "0.24.0", option
4142
opentelemetry_0_25_pkg = { package = "opentelemetry", version = "0.25.0", optional = true }
4243
opentelemetry_0_26_pkg = { package = "opentelemetry", version = "0.26.0", optional = true }
4344
opentelemetry_0_27_pkg = { package = "opentelemetry", version = "0.27.0", optional = true }
45+
opentelemetry_0_28_pkg = { package = "opentelemetry", version = "0.28.0", optional = true }
4446
tracing-opentelemetry_0_21_pkg = { package = "tracing-opentelemetry", version = "0.21.0", optional = true }
4547
tracing-opentelemetry_0_22_pkg = { package = "tracing-opentelemetry", version = "0.22.0", optional = true }
4648
tracing-opentelemetry_0_23_pkg = { package = "tracing-opentelemetry", version = "0.23.0", optional = true }
@@ -49,6 +51,7 @@ tracing-opentelemetry_0_25_pkg = { package = "tracing-opentelemetry", version =
4951
tracing-opentelemetry_0_26_pkg = { package = "tracing-opentelemetry", version = "0.26.0", optional = true }
5052
tracing-opentelemetry_0_27_pkg = { package = "tracing-opentelemetry", version = "0.27.0", optional = true }
5153
tracing-opentelemetry_0_28_pkg = { package = "tracing-opentelemetry", version = "0.28.0", optional = true }
54+
tracing-opentelemetry_0_29_pkg = { package = "tracing-opentelemetry", version = "0.29.0", optional = true }
5255

5356
[target.'cfg(target_arch = "wasm32")'.dependencies]
5457
getrandom = { version = "0.2.0", features = ["js"] }
@@ -66,6 +69,7 @@ opentelemetry_sdk_0_24 = { package = "opentelemetry_sdk", version = "0.24.1", fe
6669
opentelemetry_sdk_0_25 = { package = "opentelemetry_sdk", version = "0.25.0", features = ["trace"] }
6770
opentelemetry_sdk_0_26 = { package = "opentelemetry_sdk", version = "0.26.0", features = ["trace"] }
6871
opentelemetry_sdk_0_27 = { package = "opentelemetry_sdk", version = "0.27.0", features = ["trace"] }
72+
opentelemetry_sdk_0_28 = { package = "opentelemetry_sdk", version = "0.28.0", features = ["trace"] }
6973
opentelemetry_stdout_0_1 = { package = "opentelemetry-stdout", version = "0.1.0", features = ["trace"] }
7074
opentelemetry_stdout_0_2 = { package = "opentelemetry-stdout", version = "0.2.0", features = ["trace"] }
7175
opentelemetry_stdout_0_3 = { package = "opentelemetry-stdout", version = "0.3.0", features = ["trace"] }

reqwest-tracing/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ mod middleware;
9292
feature = "opentelemetry_0_25",
9393
feature = "opentelemetry_0_26",
9494
feature = "opentelemetry_0_27",
95+
feature = "opentelemetry_0_28",
9596
))]
9697
mod otel;
9798
mod reqwest_otel_span_builder;

reqwest-tracing/src/middleware.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ where
5454
feature = "opentelemetry_0_25",
5555
feature = "opentelemetry_0_26",
5656
feature = "opentelemetry_0_27",
57+
feature = "opentelemetry_0_28",
5758
))]
5859
let req = if extensions.get::<crate::DisableOtelPropagation>().is_none() {
5960
// Adds tracing headers to the given request to propagate the OpenTelemetry context to downstream revivers of the request.

reqwest-tracing/src/otel.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ pub fn inject_opentelemetry_context_into_request(mut request: Request) -> Reques
6161
injector.inject_context(&context, &mut RequestCarrier::new(&mut request))
6262
});
6363

64+
#[cfg(feature = "opentelemetry_0_28")]
65+
opentelemetry_0_28_pkg::global::get_text_map_propagator(|injector| {
66+
use tracing_opentelemetry_0_29_pkg::OpenTelemetrySpanExt;
67+
let context = Span::current().context();
68+
injector.inject_context(&context, &mut RequestCarrier::new(&mut request))
69+
});
70+
6471
request
6572
}
6673

@@ -144,6 +151,13 @@ impl opentelemetry_0_27_pkg::propagation::Injector for RequestCarrier<'_> {
144151
}
145152
}
146153

154+
#[cfg(feature = "opentelemetry_0_28")]
155+
impl opentelemetry_0_28_pkg::propagation::Injector for RequestCarrier<'_> {
156+
fn set(&mut self, key: &str, value: String) {
157+
self.set_inner(key, value)
158+
}
159+
}
160+
147161
#[cfg(test)]
148162
mod test {
149163
use std::sync::OnceLock;
@@ -327,6 +341,22 @@ mod test {
327341
subscriber.with(telemetry)
328342
};
329343

344+
#[cfg(feature = "opentelemetry_0_28")]
345+
let subscriber = {
346+
use opentelemetry_0_28_pkg::trace::TracerProvider;
347+
348+
let provider = opentelemetry_sdk_0_28::trace::SdkTracerProvider::builder().build();
349+
350+
let tracer = provider.tracer("reqwest");
351+
let _ = opentelemetry_0_28_pkg::global::set_tracer_provider(provider);
352+
opentelemetry_0_28_pkg::global::set_text_map_propagator(
353+
opentelemetry_sdk_0_28::propagation::TraceContextPropagator::new(),
354+
);
355+
356+
let telemetry = tracing_opentelemetry_0_29_pkg::layer().with_tracer(tracer);
357+
subscriber.with(telemetry)
358+
};
359+
330360
tracing::subscriber::set_global_default(subscriber).unwrap();
331361
});
332362

0 commit comments

Comments
 (0)