Skip to content

Commit b2ab799

Browse files
authored
Move HTTP-related code into a separate crate (#415)
* opentelemetry: display exporter name in export errors * opentelemetry-http: move HTTP-related code into a separate crate * opentelemetry-http: move isahc client impl from opentelemetry-jaeger * opentelemetry-http: move client impls into separate modules * opentelemetry-http: add CODEOWNERS, LICENSE and README
1 parent fc3175f commit b2ab799

File tree

27 files changed

+540
-222
lines changed

27 files changed

+540
-222
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
override: true
5353
- name: Run tests
5454
run: cargo --version &&
55-
cargo test --verbose --manifest-path=opentelemetry/Cargo.toml --features trace,metrics,serialize,tokio,serde,http,reqwest,testing &&
55+
cargo test --verbose --manifest-path=opentelemetry/Cargo.toml --features trace,metrics,serialize,tokio,serde,testing &&
5656
cargo test --manifest-path=opentelemetry-jaeger/Cargo.toml &&
5757
cargo test --manifest-path=opentelemetry-zipkin/Cargo.toml
5858
meta:

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
members = [
33
"opentelemetry",
44
"opentelemetry-contrib",
5+
"opentelemetry-http",
56
"opentelemetry-jaeger",
67
"opentelemetry-otlp",
78
"opentelemetry-prometheus",

examples/aws-xray/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ path = "src/client.rs"
1616
[dependencies]
1717
hyper = { version = "0.14", features = ["full"] }
1818
tokio = { version = "1.0", features = ["full"] }
19-
opentelemetry = { path = "../../opentelemetry", features = ["http"] }
19+
opentelemetry = { path = "../../opentelemetry" }
2020
opentelemetry-contrib = { path = "../../opentelemetry-contrib", features = ["aws-xray"] }
21+
opentelemetry-http = { path = "../../opentelemetry-http" }

examples/aws-xray/src/client.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use opentelemetry::{
77
Context, KeyValue,
88
};
99
use opentelemetry_contrib::trace::propagator::XrayPropagator;
10+
use opentelemetry_http::HeaderInjector;
1011

1112
fn init_tracer() -> (sdktrace::Tracer, stdout::Uninstall) {
1213
global::set_text_map_propagator(XrayPropagator::new());
@@ -34,7 +35,7 @@ async fn main() -> std::result::Result<(), Box<dyn std::error::Error + Send + Sy
3435
let mut req = hyper::Request::builder().uri("http://127.0.0.1:3000");
3536

3637
global::get_text_map_propagator(|propagator| {
37-
propagator.inject_context(&cx, req.headers_mut().unwrap());
38+
propagator.inject_context(&cx, &mut HeaderInjector(req.headers_mut().unwrap()));
3839

3940
println!("Headers: {:?}", req.headers_ref());
4041
});

examples/aws-xray/src/server.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ use opentelemetry::{
77
trace::{Span, Tracer},
88
};
99
use opentelemetry_contrib::trace::propagator::XrayPropagator;
10+
use opentelemetry_http::HeaderExtractor;
1011
use std::{convert::Infallible, net::SocketAddr};
1112

1213
async fn handle(req: Request<Body>) -> Result<Response<Body>, Infallible> {
13-
let parent_context =
14-
global::get_text_map_propagator(|propagator| propagator.extract(req.headers()));
14+
let parent_context = global::get_text_map_propagator(|propagator| {
15+
propagator.extract(&HeaderExtractor(req.headers()))
16+
});
1517

1618
let x_amzn_trace_id = req
1719
.headers()

examples/http/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ path = "src/client.rs"
1414
[dependencies]
1515
hyper = { version = "0.14", features = ["full"] }
1616
tokio = { version = "1.0", features = ["full"] }
17-
opentelemetry = { path = "../../opentelemetry", features = ["http"] }
17+
opentelemetry = { path = "../../opentelemetry" }
18+
opentelemetry-http = { path = "../../opentelemetry-http" }

examples/http/src/client.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use opentelemetry::{
99
trace::{TraceContextExt, Tracer},
1010
Context, KeyValue,
1111
};
12+
use opentelemetry_http::HeaderInjector;
1213

1314
fn init_tracer() -> (impl Tracer, stdout::Uninstall) {
1415
global::set_text_map_propagator(TraceContextPropagator::new());
@@ -33,7 +34,7 @@ async fn main() -> std::result::Result<(), Box<dyn std::error::Error + Send + Sy
3334

3435
let mut req = hyper::Request::builder().uri("http://127.0.0.1:3000");
3536
global::get_text_map_propagator(|propagator| {
36-
propagator.inject_context(&cx, req.headers_mut().unwrap())
37+
propagator.inject_context(&cx, &mut HeaderInjector(&mut req.headers_mut().unwrap()))
3738
});
3839
let res = client.request(req.body(Body::from("Hallo!"))?).await?;
3940

examples/http/src/server.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@ use opentelemetry::{
99
},
1010
trace::{Span, Tracer},
1111
};
12+
use opentelemetry_http::HeaderExtractor;
1213
use std::{convert::Infallible, net::SocketAddr};
1314

1415
async fn handle(req: Request<Body>) -> Result<Response<Body>, Infallible> {
15-
let parent_cx = global::get_text_map_propagator(|propagator| propagator.extract(req.headers()));
16+
let parent_cx = global::get_text_map_propagator(|propagator| {
17+
propagator.extract(&HeaderExtractor(req.headers()))
18+
});
1619
let span = global::tracer("example/server").start_with_context("hello", parent_cx);
1720
span.add_event("handling this...".to_string(), Vec::new());
1821

opentelemetry-contrib/Cargo.toml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,17 @@ rustdoc-args = ["--cfg", "docsrs"]
2222
default = []
2323
base64_format = ["base64", "binary_propagator"]
2424
binary_propagator = []
25-
datadog = ["indexmap", "rmp", "async-trait", "thiserror"]
26-
reqwest-blocking-client = ["reqwest/blocking", "opentelemetry/reqwest"]
27-
reqwest-client = ["reqwest", "opentelemetry/reqwest"]
28-
surf-client = ["surf", "opentelemetry/surf"]
25+
datadog = ["indexmap", "rmp", "async-trait", "thiserror", "opentelemetry-http"]
26+
reqwest-blocking-client = ["reqwest/blocking", "opentelemetry-http/reqwest"]
27+
reqwest-client = ["reqwest", "opentelemetry-http/reqwest"]
28+
surf-client = ["surf", "opentelemetry-http/surf"]
2929
aws-xray = []
3030

3131
[dependencies]
3232
async-trait = { version = "0.1", optional = true }
3333
indexmap = { version = "1.6", optional = true }
34-
opentelemetry = { version = "0.11", path = "../opentelemetry", features = ["trace", "http"] }
34+
opentelemetry = { version = "0.11", path = "../opentelemetry", features = ["trace"] }
35+
opentelemetry-http = { version = "0.1", path = "../opentelemetry-http", optional = true }
3536
rmp = { version = "0.8", optional = true }
3637
lazy_static = "1.4"
3738
reqwest = { version = "0.10", optional = true }
@@ -43,4 +44,4 @@ thiserror = { version = "1.0", optional = true }
4344
[dev-dependencies]
4445
base64 = "0.13"
4546
isahc = "0.9"
46-
opentelemetry = { path = "../opentelemetry", features = ["trace", "http", "testing"] }
47+
opentelemetry = { path = "../opentelemetry", features = ["trace", "testing"] }

opentelemetry-contrib/src/trace/exporter/datadog/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@
7373
//! use opentelemetry::{KeyValue, trace::Tracer};
7474
//! use opentelemetry::sdk::{trace::{self, IdGenerator, Sampler}, Resource};
7575
//! use opentelemetry::sdk::export::trace::ExportResult;
76-
//! use opentelemetry::sdk::export::trace::HttpClient;
7776
//! use opentelemetry_contrib::trace::exporter::datadog::{new_pipeline, ApiVersion};
77+
//! use opentelemetry_http::HttpClient;
7878
//! use async_trait::async_trait;
7979
//! use opentelemetry_contrib::trace::exporter::datadog::Error;
8080
//!
@@ -128,9 +128,10 @@ pub use model::Error;
128128
use async_trait::async_trait;
129129
use http::{Method, Request, Uri};
130130
use opentelemetry::sdk::export::trace;
131-
use opentelemetry::sdk::export::trace::{HttpClient, SpanData};
131+
use opentelemetry::sdk::export::trace::SpanData;
132132
use opentelemetry::trace::TraceError;
133133
use opentelemetry::{global, sdk, trace::TracerProvider};
134+
use opentelemetry_http::HttpClient;
134135

135136
/// Default Datadog collector endpoint
136137
const DEFAULT_AGENT_ENDPOINT: &str = "http://127.0.0.1:8126";

0 commit comments

Comments
 (0)