Skip to content

Commit 4619e2f

Browse files
authored
Merge branch 'main' into fix-metrics-u64-serialization
2 parents 5911ff0 + 8520610 commit 4619e2f

File tree

12 files changed

+182
-167
lines changed

12 files changed

+182
-167
lines changed

opentelemetry-http/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- Bump msrv to 1.75.0.
66
- Add "internal-logs" feature flag (enabled by default), and emit internal logs.
7+
- Add `HttpClient::send_bytes` with `bytes::Bytes` request payload and deprecate old `HttpClient::send` function.
78

89
## 0.27.0
910

opentelemetry-http/src/lib.rs

+16-5
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,24 @@ pub type HttpError = Box<dyn std::error::Error + Send + Sync + 'static>;
5555
/// users to bring their choice of HTTP client.
5656
#[async_trait]
5757
pub trait HttpClient: Debug + Send + Sync {
58-
/// Send the specified HTTP request
58+
/// Send the specified HTTP request with `Vec<u8>` payload
5959
///
6060
/// Returns the HTTP response including the status code and body.
6161
///
6262
/// Returns an error if it can't connect to the server or the request could not be completed,
6363
/// e.g. because of a timeout, infinite redirects, or a loss of connection.
64-
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError>;
64+
#[deprecated(note = "Use `send_bytes` with `Bytes` payload instead.")]
65+
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError> {
66+
self.send_bytes(request.map(Into::into)).await
67+
}
68+
69+
/// Send the specified HTTP request with `Bytes` payload.
70+
///
71+
/// Returns the HTTP response including the status code and body.
72+
///
73+
/// Returns an error if it can't connect to the server or the request could not be completed,
74+
/// e.g. because of a timeout, infinite redirects, or a loss of connection.
75+
async fn send_bytes(&self, request: Request<Bytes>) -> Result<Response<Bytes>, HttpError>;
6576
}
6677

6778
#[cfg(feature = "reqwest")]
@@ -72,7 +83,7 @@ mod reqwest {
7283

7384
#[async_trait]
7485
impl HttpClient for reqwest::Client {
75-
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError> {
86+
async fn send_bytes(&self, request: Request<Bytes>) -> Result<Response<Bytes>, HttpError> {
7687
otel_debug!(name: "ReqwestClient.Send");
7788
let request = request.try_into()?;
7889
let mut response = self.execute(request).await?.error_for_status()?;
@@ -89,7 +100,7 @@ mod reqwest {
89100
#[cfg(not(target_arch = "wasm32"))]
90101
#[async_trait]
91102
impl HttpClient for reqwest::blocking::Client {
92-
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError> {
103+
async fn send_bytes(&self, request: Request<Bytes>) -> Result<Response<Bytes>, HttpError> {
93104
otel_debug!(name: "ReqwestBlockingClient.Send");
94105
let request = request.try_into()?;
95106
let mut response = self.execute(request)?.error_for_status()?;
@@ -159,7 +170,7 @@ pub mod hyper {
159170

160171
#[async_trait]
161172
impl HttpClient for HyperClient {
162-
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError> {
173+
async fn send_bytes(&self, request: Request<Bytes>) -> Result<Response<Bytes>, HttpError> {
163174
otel_debug!(name: "HyperClient.Send");
164175
let (parts, body) = request.into_parts();
165176
let mut request = Request::from_parts(parts, Body(Full::from(body)));

opentelemetry-otlp/src/exporter/http/logs.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl LogExporter for OtlpHttpClient {
2828
.method(Method::POST)
2929
.uri(&self.collector_endpoint)
3030
.header(CONTENT_TYPE, content_type)
31-
.body(body)
31+
.body(body.into())
3232
.map_err(|e| crate::Error::RequestFailed(Box::new(e)))?;
3333

3434
for (k, v) in &self.headers {
@@ -37,7 +37,7 @@ impl LogExporter for OtlpHttpClient {
3737

3838
let request_uri = request.uri().to_string();
3939
otel_debug!(name: "HttpLogsClient.CallingExport");
40-
let response = client.send(request).await?;
40+
let response = client.send_bytes(request).await?;
4141

4242
if !response.status().is_success() {
4343
let error = format!(

opentelemetry-otlp/src/exporter/http/metrics.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ impl MetricsClient for OtlpHttpClient {
2727
.method(Method::POST)
2828
.uri(&self.collector_endpoint)
2929
.header(CONTENT_TYPE, content_type)
30-
.body(body)
30+
.body(body.into())
3131
.map_err(|e| crate::Error::RequestFailed(Box::new(e)))?;
3232

3333
for (k, v) in &self.headers {
@@ -36,7 +36,7 @@ impl MetricsClient for OtlpHttpClient {
3636

3737
otel_debug!(name: "HttpMetricsClient.CallingExport");
3838
client
39-
.send(request)
39+
.send_bytes(request)
4040
.await
4141
.map_err(|e| MetricError::ExportErr(Box::new(Error::RequestFailed(e))))?;
4242

opentelemetry-otlp/src/exporter/http/trace.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ impl SpanExporter for OtlpHttpClient {
3030
.method(Method::POST)
3131
.uri(&self.collector_endpoint)
3232
.header(CONTENT_TYPE, content_type)
33-
.body(body)
33+
.body(body.into())
3434
{
3535
Ok(req) => req,
3636
Err(e) => {
@@ -48,7 +48,7 @@ impl SpanExporter for OtlpHttpClient {
4848
Box::pin(async move {
4949
let request_uri = request.uri().to_string();
5050
otel_debug!(name: "HttpTracesClient.CallingExport");
51-
let response = client.send(request).await?;
51+
let response = client.send_bytes(request).await?;
5252

5353
if !response.status().is_success() {
5454
let error = format!(

opentelemetry-sdk/src/trace/sampler/jaeger_remote/sampler.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ impl JaegerRemoteSampler {
228228
{
229229
let request = http::Request::get(endpoint)
230230
.header("Content-Type", "application/json")
231-
.body(Vec::new())
231+
.body(Default::default())
232232
.unwrap();
233233

234234
let resp = client

opentelemetry-zipkin/CHANGELOG.md

+20
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,26 @@
33
## vNext
44

55
- Bump msrv to 1.75.0.
6+
- **Breaking** The `opentelemetry_zipkin::new_pipeline()` interface is now replaced with `opentelemetry_zipkin::ZipkinExporter::builder()`.
7+
8+
Previous Signature:
9+
```rust
10+
let tracer = opentelemetry_zipkin::new_pipeline()
11+
.with_service_name("trace-demo")
12+
.install_simple()?;
13+
```
14+
Updated Signature:
15+
```rust
16+
let exporter = ZipkinExporter::builder()
17+
.with_service_name("trace-demo")
18+
.build()?;
19+
let provider = TracerProvider::builder()
20+
.with_simple_exporter(exporter)
21+
.build();
22+
global::set_tracer_provider(provider.clone());
23+
24+
let tracer = global::tracer("zipkin-tracer");
25+
```
626

727
## 0.27.0
828

opentelemetry-zipkin/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ reqwest-client = ["reqwest", "opentelemetry-http/reqwest"]
2626
reqwest-rustls = ["reqwest", "reqwest/rustls-tls-native-roots"]
2727

2828
[dependencies]
29-
async-trait = { workspace = true }
3029
once_cell = { workspace = true }
3130
opentelemetry = { version = "0.27", path = "../opentelemetry" }
3231
opentelemetry_sdk = { version = "0.27", path = "../opentelemetry-sdk", features = ["trace"] }
@@ -41,6 +40,7 @@ thiserror = { workspace = true }
4140
futures-core = { workspace = true }
4241

4342
[dev-dependencies]
43+
async-trait = { workspace = true }
4444
bytes = { workspace = true }
4545
futures-util = { workspace = true, features = ["io"] }
4646
http-body-util = { workspace = true }

opentelemetry-zipkin/examples/zipkin.rs

+23-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
use opentelemetry::{
22
global::{self},
3-
trace::{Span, Tracer},
3+
trace::{Span, TraceError, Tracer},
4+
InstrumentationScope, KeyValue,
45
};
6+
use opentelemetry_sdk::trace::TracerProvider;
7+
use opentelemetry_zipkin::ZipkinExporter;
58
use std::thread;
69
use std::time::Duration;
710

@@ -12,10 +15,26 @@ fn bar() {
1215
span.end()
1316
}
1417

15-
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
16-
let (tracer, provider) = opentelemetry_zipkin::new_pipeline()
18+
fn init_traces() -> Result<TracerProvider, TraceError> {
19+
let exporter = ZipkinExporter::builder()
1720
.with_service_name("trace-demo")
18-
.install_simple()?;
21+
.build()?;
22+
23+
Ok(TracerProvider::builder()
24+
.with_simple_exporter(exporter)
25+
.build())
26+
}
27+
28+
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
29+
let provider = init_traces()?;
30+
global::set_tracer_provider(provider.clone());
31+
32+
let common_scope_attributes = vec![KeyValue::new("scope-key", "scope-value")];
33+
let scope = InstrumentationScope::builder("opentelemetry-zipkin")
34+
.with_version(env!("CARGO_PKG_VERSION"))
35+
.with_attributes(common_scope_attributes)
36+
.build();
37+
let tracer = global::tracer_with_scope(scope.clone());
1938

2039
tracer.in_span("foo", |_cx| {
2140
thread::sleep(Duration::from_millis(6));

0 commit comments

Comments
 (0)