diff --git a/src/lib.rs b/src/lib.rs index 1e2ed931d..ea38c1e75 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -244,11 +244,5 @@ pub use root_span_builder::{DefaultRootSpanBuilder, RootSpanBuilder}; #[doc(hidden)] pub mod root_span_macro; -#[cfg(feature = "opentelemetry_0_13")] -mod otel_0_13; - -#[cfg(feature = "opentelemetry_0_14")] -mod otel_0_14; - -#[cfg(feature = "opentelemetry_0_15")] -mod otel_0_15; +#[cfg(any(feature = "opentelemetry_0_13", feature = "opentelemetry_0_14", feature = "opentelemetry_0_15"))] +mod otel; diff --git a/src/otel_0_13.rs b/src/otel.rs similarity index 53% rename from src/otel_0_13.rs rename to src/otel.rs index 37fbf03c8..9bd6b794f 100644 --- a/src/otel_0_13.rs +++ b/src/otel.rs @@ -1,5 +1,20 @@ use actix_web::dev::ServiceRequest; -use opentelemetry_0_13_pkg::propagation::Extractor; + +#[cfg(feature = "opentelemetry_0_13")] +use opentelemetry_0_13_pkg as opentelemetry; +#[cfg(feature = "opentelemetry_0_14")] +use opentelemetry_0_14_pkg as opentelemetry; +#[cfg(feature = "opentelemetry_0_15")] +use opentelemetry_0_15_pkg as opentelemetry; + +#[cfg(feature = "opentelemetry_0_13")] +use tracing_opentelemetry_0_12_pkg as tracing_opentelemetry; +#[cfg(feature = "opentelemetry_0_14")] +use tracing_opentelemetry_0_13_pkg as tracing_opentelemetry; +#[cfg(feature = "opentelemetry_0_15")] +use tracing_opentelemetry_0_14_pkg as tracing_opentelemetry; + +use opentelemetry::propagation::Extractor; pub(crate) struct RequestHeaderCarrier<'a> { headers: &'a actix_web::http::HeaderMap, @@ -22,11 +37,11 @@ impl<'a> Extractor for RequestHeaderCarrier<'a> { } pub(crate) fn set_otel_parent(req: &ServiceRequest, span: &tracing::Span) { - use opentelemetry_0_13_pkg::trace::TraceContextExt as _; - use tracing_opentelemetry_0_12_pkg::OpenTelemetrySpanExt as _; + use opentelemetry::trace::TraceContextExt as _; + use tracing_opentelemetry::OpenTelemetrySpanExt as _; - let parent_context = opentelemetry_0_13_pkg::global::get_text_map_propagator(|propagator| { - propagator.extract(&crate::otel_0_13::RequestHeaderCarrier::new(req.headers())) + let parent_context = opentelemetry::global::get_text_map_propagator(|propagator| { + propagator.extract(&RequestHeaderCarrier::new(req.headers())) }); span.set_parent(parent_context); // If we have a remote parent span, this will be the parent's trace identifier. diff --git a/src/otel_0_14.rs b/src/otel_0_14.rs deleted file mode 100644 index 40698c912..000000000 --- a/src/otel_0_14.rs +++ /dev/null @@ -1,36 +0,0 @@ -use actix_web::dev::ServiceRequest; -use opentelemetry_0_14_pkg::propagation::Extractor; - -pub(crate) struct RequestHeaderCarrier<'a> { - headers: &'a actix_web::http::HeaderMap, -} - -impl<'a> RequestHeaderCarrier<'a> { - pub(crate) fn new(headers: &'a actix_web::http::HeaderMap) -> Self { - RequestHeaderCarrier { headers } - } -} - -impl<'a> Extractor for RequestHeaderCarrier<'a> { - fn get(&self, key: &str) -> Option<&str> { - self.headers.get(key).and_then(|v| v.to_str().ok()) - } - - fn keys(&self) -> Vec<&str> { - self.headers.keys().map(|header| header.as_str()).collect() - } -} - -pub(crate) fn set_otel_parent(req: &ServiceRequest, span: &tracing::Span) { - use opentelemetry_0_14_pkg::trace::TraceContextExt as _; - use tracing_opentelemetry_0_13_pkg::OpenTelemetrySpanExt as _; - - let parent_context = opentelemetry_0_14_pkg::global::get_text_map_propagator(|propagator| { - propagator.extract(&crate::otel_0_14::RequestHeaderCarrier::new(req.headers())) - }); - span.set_parent(parent_context); - // If we have a remote parent span, this will be the parent's trace identifier. - // If not, it will be the newly generated trace identifier with this request as root span. - let trace_id = span.context().span().span_context().trace_id().to_hex(); - span.record("trace_id", &tracing::field::display(trace_id)); -} diff --git a/src/otel_0_15.rs b/src/otel_0_15.rs deleted file mode 100644 index ee98d5a70..000000000 --- a/src/otel_0_15.rs +++ /dev/null @@ -1,36 +0,0 @@ -use actix_web::dev::ServiceRequest; -use opentelemetry_0_15_pkg::propagation::Extractor; - -pub(crate) struct RequestHeaderCarrier<'a> { - headers: &'a actix_web::http::HeaderMap, -} - -impl<'a> RequestHeaderCarrier<'a> { - pub(crate) fn new(headers: &'a actix_web::http::HeaderMap) -> Self { - RequestHeaderCarrier { headers } - } -} - -impl<'a> Extractor for RequestHeaderCarrier<'a> { - fn get(&self, key: &str) -> Option<&str> { - self.headers.get(key).and_then(|v| v.to_str().ok()) - } - - fn keys(&self) -> Vec<&str> { - self.headers.keys().map(|header| header.as_str()).collect() - } -} - -pub(crate) fn set_otel_parent(req: &ServiceRequest, span: &tracing::Span) { - use opentelemetry_0_15_pkg::trace::TraceContextExt as _; - use tracing_opentelemetry_0_14_pkg::OpenTelemetrySpanExt as _; - - let parent_context = opentelemetry_0_15_pkg::global::get_text_map_propagator(|propagator| { - propagator.extract(&crate::otel_0_15::RequestHeaderCarrier::new(req.headers())) - }); - span.set_parent(parent_context); - // If we have a remote parent span, this will be the parent's trace identifier. - // If not, it will be the newly generated trace identifier with this request as root span. - let trace_id = span.context().span().span_context().trace_id().to_hex(); - span.record("trace_id", &tracing::field::display(trace_id)); -} diff --git a/src/root_span_macro.rs b/src/root_span_macro.rs index 39a714941..e1951cbbd 100644 --- a/src/root_span_macro.rs +++ b/src/root_span_macro.rs @@ -97,14 +97,8 @@ macro_rules! root_span { ); std::mem::drop(connection_info); - #[cfg(feature = "opentelemetry_0_13")] - $crate::root_span_macro::private::set_otel_parent_0_13(&$request, &span); - - #[cfg(feature = "opentelemetry_0_14")] - $crate::root_span_macro::private::set_otel_parent_0_14(&$request, &span); - - #[cfg(feature = "opentelemetry_0_15")] - $crate::root_span_macro::private::set_otel_parent_0_15(&$request, &span); + #[cfg(any(feature = "opentelemetry_0_13", feature = "opentelemetry_0_14", feature = "opentelemetry_0_15"))] + $crate::root_span_macro::private::set_otel_parent(&$request, &span); span } @@ -124,22 +118,10 @@ pub mod private { pub use tracing; - #[cfg(feature = "opentelemetry_0_13")] + #[cfg(any(feature = "opentelemetry_0_13", feature = "opentelemetry_0_14", feature = "opentelemetry_0_15"))] #[doc(hidden)] - pub fn set_otel_parent_0_13(req: &ServiceRequest, span: &tracing::Span) { - crate::otel_0_13::set_otel_parent(req, span); - } - - #[cfg(feature = "opentelemetry_0_14")] - #[doc(hidden)] - pub fn set_otel_parent_0_14(req: &ServiceRequest, span: &tracing::Span) { - crate::otel_0_14::set_otel_parent(req, span); - } - - #[cfg(feature = "opentelemetry_0_15")] - #[doc(hidden)] - pub fn set_otel_parent_0_15(req: &ServiceRequest, span: &tracing::Span) { - crate::otel_0_15::set_otel_parent(req, span); + pub fn set_otel_parent(req: &ServiceRequest, span: &tracing::Span) { + crate::otel::set_otel_parent(req, span); } #[doc(hidden)]