Skip to content

Commit 4a92519

Browse files
authored
Merge branch 'main' into hwrdtm/fix-serde-v2
2 parents a8d1fce + cdf5f03 commit 4a92519

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+6058
-7610
lines changed

Cargo.toml

+10-8
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,25 @@ criterion = "0.5"
2323
futures-core = "0.3"
2424
futures-executor = "0.3"
2525
futures-util = { version = "0.3", default-features = false }
26-
hyper = { version = "0.14", default-features = false }
27-
http = { version = "0.2", default-features = false }
26+
http = { version = "1.1", default-features = false, features = ["std"] }
27+
http-body-util = "0.1"
28+
hyper = { version = "1.3", default-features = false }
29+
hyper-util = "0.1"
2830
log = "0.4.21"
2931
once_cell = "1.13"
3032
ordered-float = "4.0"
3133
pin-project-lite = "0.2"
32-
prost = "0.12"
33-
prost-build = "0.12"
34-
prost-types = "0.12"
34+
prost = "0.13"
35+
prost-build = "0.13"
36+
prost-types = "0.13"
3537
rand = { version = "0.8", default-features = false }
36-
reqwest = { version = "0.11", default-features = false }
38+
reqwest = { version = "0.12", default-features = false }
3739
serde = { version = "1.0", default-features = false }
3840
serde_json = "1.0"
3941
temp-env = "0.3.6"
4042
thiserror = { version = "1", default-features = false }
41-
tonic = { version = "0.11", default-features = false }
42-
tonic-build = "0.11"
43+
tonic = { version = "0.12", default-features = false }
44+
tonic-build = "0.12"
4345
tokio = { version = "1", default-features = false }
4446
tokio-stream = "0.1.1"
4547
tracing = { version = "0.1", default-features = false }

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ observability tools.
2727

2828
| Signal/Component | Overall Status |
2929
| -------------------- | ------------------ |
30-
| Logs-API | Alpha* |
31-
| Logs-SDK | Alpha |
32-
| Logs-OTLP Exporter | Alpha |
33-
| Logs-Appender-Tracing | Alpha |
30+
| Logs-API | Beta* |
31+
| Logs-SDK | Beta |
32+
| Logs-OTLP Exporter | Beta |
33+
| Logs-Appender-Tracing | Beta |
3434
| Metrics-API | Alpha |
3535
| Metrics-SDK | Alpha |
3636
| Metrics-OTLP Exporter | Alpha |

examples/tracing-http-propagator/Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ path = "src/client.rs"
1616
doc = false
1717

1818
[dependencies]
19+
http-body-util = { workspace = true }
1920
hyper = { workspace = true, features = ["full"] }
21+
hyper-util = { workspace = true, features = ["full"] }
2022
tokio = { workspace = true, features = ["full"] }
2123
opentelemetry = { path = "../../opentelemetry" }
2224
opentelemetry_sdk = { path = "../../opentelemetry-sdk" }

examples/tracing-http-propagator/src/client.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
use hyper::{body::Body, Client};
1+
use http_body_util::Full;
2+
use hyper_util::{client::legacy::Client, rt::TokioExecutor};
23
use opentelemetry::{
34
global,
45
trace::{SpanKind, TraceContextExt, Tracer},
56
Context, KeyValue,
67
};
7-
use opentelemetry_http::HeaderInjector;
8+
use opentelemetry_http::{Bytes, HeaderInjector};
89
use opentelemetry_sdk::{propagation::TraceContextPropagator, trace::TracerProvider};
910
use opentelemetry_stdout::SpanExporter;
1011

@@ -24,7 +25,7 @@ async fn send_request(
2425
body_content: &str,
2526
span_name: &str,
2627
) -> std::result::Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
27-
let client = Client::new();
28+
let client = Client::builder(TokioExecutor::new()).build_http();
2829
let tracer = global::tracer("example/client");
2930
let span = tracer
3031
.span_builder(String::from(span_name))
@@ -37,7 +38,7 @@ async fn send_request(
3738
propagator.inject_context(&cx, &mut HeaderInjector(req.headers_mut().unwrap()))
3839
});
3940
let res = client
40-
.request(req.body(Body::from(String::from(body_content)))?)
41+
.request(req.body(Full::new(Bytes::from(body_content.to_string())))?)
4142
.await?;
4243

4344
cx.span().add_event(

examples/tracing-http-propagator/src/server.rs

+37-19
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,64 @@
1-
use hyper::{
2-
service::{make_service_fn, service_fn},
3-
Body, Request, Response, Server, StatusCode,
4-
};
1+
use http_body_util::{combinators::BoxBody, BodyExt, Full};
2+
use hyper::{body::Incoming, service::service_fn, Request, Response, StatusCode};
3+
use hyper_util::rt::{TokioExecutor, TokioIo};
54
use opentelemetry::{
65
global,
76
trace::{FutureExt, Span, SpanKind, TraceContextExt, Tracer},
87
Context, KeyValue,
98
};
10-
use opentelemetry_http::HeaderExtractor;
9+
use opentelemetry_http::{Bytes, HeaderExtractor};
1110
use opentelemetry_sdk::{propagation::TraceContextPropagator, trace::TracerProvider};
1211
use opentelemetry_semantic_conventions::trace;
1312
use opentelemetry_stdout::SpanExporter;
1413
use std::{convert::Infallible, net::SocketAddr};
14+
use tokio::net::TcpListener;
1515

1616
// Utility function to extract the context from the incoming request headers
17-
fn extract_context_from_request(req: &Request<Body>) -> Context {
17+
fn extract_context_from_request(req: &Request<Incoming>) -> Context {
1818
global::get_text_map_propagator(|propagator| {
1919
propagator.extract(&HeaderExtractor(req.headers()))
2020
})
2121
}
2222

2323
// Separate async function for the handle endpoint
24-
async fn handle_health_check(_req: Request<Body>) -> Result<Response<Body>, Infallible> {
24+
async fn handle_health_check(
25+
_req: Request<Incoming>,
26+
) -> Result<Response<BoxBody<Bytes, hyper::Error>>, Infallible> {
2527
let tracer = global::tracer("example/server");
2628
let mut span = tracer
2729
.span_builder("health_check")
2830
.with_kind(SpanKind::Internal)
2931
.start(&tracer);
3032
span.add_event("Health check accessed", vec![]);
31-
let res = Response::new(Body::from("Server is up and running!"));
33+
34+
let res = Response::new(
35+
Full::new(Bytes::from_static(b"Server is up and running!"))
36+
.map_err(|err| match err {})
37+
.boxed(),
38+
);
39+
3240
Ok(res)
3341
}
3442

3543
// Separate async function for the echo endpoint
36-
async fn handle_echo(req: Request<Body>) -> Result<Response<Body>, Infallible> {
44+
async fn handle_echo(
45+
req: Request<Incoming>,
46+
) -> Result<Response<BoxBody<Bytes, hyper::Error>>, Infallible> {
3747
let tracer = global::tracer("example/server");
3848
let mut span = tracer
3949
.span_builder("echo")
4050
.with_kind(SpanKind::Internal)
4151
.start(&tracer);
4252
span.add_event("Echoing back the request", vec![]);
43-
let res = Response::new(req.into_body());
53+
54+
let res = Response::new(req.into_body().boxed());
55+
4456
Ok(res)
4557
}
4658

47-
async fn router(req: Request<Body>) -> Result<Response<Body>, Infallible> {
59+
async fn router(
60+
req: Request<Incoming>,
61+
) -> Result<Response<BoxBody<Bytes, hyper::Error>>, Infallible> {
4862
// Extract the context from the incoming request headers
4963
let parent_cx = extract_context_from_request(&req);
5064
let response = {
@@ -64,12 +78,13 @@ async fn router(req: Request<Body>) -> Result<Response<Body>, Infallible> {
6478
_ => {
6579
cx.span()
6680
.set_attribute(KeyValue::new(trace::HTTP_RESPONSE_STATUS_CODE, 404));
67-
let mut not_found = Response::default();
81+
let mut not_found = Response::new(BoxBody::default());
6882
*not_found.status_mut() = StatusCode::NOT_FOUND;
6983
Ok(not_found)
7084
}
7185
}
7286
};
87+
7388
response
7489
}
7590

@@ -87,15 +102,18 @@ fn init_tracer() {
87102

88103
#[tokio::main]
89104
async fn main() {
105+
use hyper_util::server::conn::auto::Builder;
106+
90107
init_tracer();
91108
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
109+
let listener = TcpListener::bind(addr).await.unwrap();
92110

93-
let make_svc = make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(router)) });
94-
95-
let server = Server::bind(&addr).serve(make_svc);
96-
97-
println!("Listening on {addr}");
98-
if let Err(e) = server.await {
99-
eprintln!("server error: {e}");
111+
while let Ok((stream, _addr)) = listener.accept().await {
112+
if let Err(err) = Builder::new(TokioExecutor::new())
113+
.serve_connection(TokioIo::new(stream), service_fn(router))
114+
.await
115+
{
116+
eprintln!("{err}");
117+
}
100118
}
101119
}

opentelemetry-appender-log/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
## vNext
44

5+
## v0.5.0
6+
57
- [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) Utilize the `LogRecord::set_target()` method to pass the log target to the SDK.
8+
- Update `opentelemetry` dependency version to 0.24
69

710
## v0.4.0
811

opentelemetry-appender-log/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "opentelemetry-appender-log"
3-
version = "0.4.0"
3+
version = "0.5.0"
44
description = "An OpenTelemetry appender for the log crate"
55
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-log"
66
repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-log"
@@ -11,7 +11,7 @@ rust-version = "1.65"
1111
edition = "2021"
1212

1313
[dependencies]
14-
opentelemetry = { version = "0.23", path = "../opentelemetry", features = ["logs"]}
14+
opentelemetry = { version = "0.24", path = "../opentelemetry", features = ["logs"]}
1515
log = { workspace = true, features = ["kv", "std"]}
1616
serde = { workspace = true, optional = true, features = ["std"] }
1717

opentelemetry-appender-tracing/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@
22

33
## vNext
44

5+
## v0.5.0
6+
57
- [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) Utilize the `LogRecord::set_target()` method to pass the tracing target to the SDK.
68
Exporters might use the target to override the instrumentation scope, which previously contained "opentelemetry-appender-tracing".
79

10+
- **Breaking** [1928](https://github.com/open-telemetry/opentelemetry-rust/pull/1928) Insert tracing event name into LogRecord::event_name instead of attributes.
11+
- If using a custom exporter, then they must serialize this field directly from LogRecord::event_name instead of iterating over the attributes. OTLP Exporter is modified to handle this.
12+
- Update `opentelemetry` dependency version to 0.24
13+
814
## v0.4.0
915

1016
- Removed unwanted dependency on opentelemetry-sdk.

opentelemetry-appender-tracing/Cargo.toml

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "opentelemetry-appender-tracing"
3-
version = "0.4.0"
3+
version = "0.5.0"
44
edition = "2021"
55
description = "An OpenTelemetry log appender for the tracing crate"
66
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-tracing"
@@ -12,8 +12,7 @@ rust-version = "1.65"
1212

1313
[dependencies]
1414
log = { workspace = true, optional = true }
15-
once_cell = { workspace = true }
16-
opentelemetry = { version = "0.23", path = "../opentelemetry", features = ["logs"] }
15+
opentelemetry = { version = "0.24", path = "../opentelemetry", features = ["logs"] }
1716
tracing = { workspace = true, features = ["std"]}
1817
tracing-core = { workspace = true }
1918
tracing-log = { version = "0.2", optional = true }

opentelemetry-appender-tracing/src/layer.rs

+16-23
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ use opentelemetry::{
33
Key,
44
};
55
use std::borrow::Cow;
6-
use tracing_core::{Level, Metadata};
6+
use tracing_core::Level;
7+
#[cfg(feature = "experimental_metadata_attributes")]
8+
use tracing_core::Metadata;
79
#[cfg(feature = "experimental_metadata_attributes")]
810
use tracing_log::NormalizeEvent;
911
use tracing_subscriber::Layer;
@@ -39,13 +41,6 @@ impl<'a, LR: LogRecord> EventVisitor<'a, LR> {
3941
fn new(log_record: &'a mut LR) -> Self {
4042
EventVisitor { log_record }
4143
}
42-
fn visit_metadata(&mut self, meta: &Metadata) {
43-
self.log_record
44-
.add_attribute(Key::new("name"), AnyValue::from(meta.name()));
45-
46-
#[cfg(feature = "experimental_metadata_attributes")]
47-
self.visit_experimental_metadata(meta);
48-
}
4944

5045
#[cfg(feature = "experimental_metadata_attributes")]
5146
fn visit_experimental_metadata(&mut self, meta: &Metadata) {
@@ -170,15 +165,17 @@ where
170165

171166
//let mut log_record: LogRecord = LogRecord::default();
172167
let mut log_record = self.logger.create_log_record();
168+
log_record.set_target(meta.target().to_string());
169+
log_record.set_event_name(meta.name());
173170
log_record.set_severity_number(severity_of_level(meta.level()));
174171
log_record.set_severity_text(meta.level().to_string().into());
175-
log_record.set_target(meta.target().to_string());
176-
177172
let mut visitor = EventVisitor::new(&mut log_record);
178-
visitor.visit_metadata(meta);
173+
#[cfg(feature = "experimental_metadata_attributes")]
174+
visitor.visit_experimental_metadata(meta);
179175
// Visit fields.
180176
event.record(&mut visitor);
181177

178+
//emit record
182179
self.logger.emit(log_record);
183180
}
184181

@@ -261,10 +258,9 @@ mod tests {
261258
.clone()
262259
.expect("Attributes are expected");
263260
#[cfg(not(feature = "experimental_metadata_attributes"))]
264-
assert_eq!(attributes.len(), 4);
261+
assert_eq!(attributes.len(), 3);
265262
#[cfg(feature = "experimental_metadata_attributes")]
266-
assert_eq!(attributes.len(), 9);
267-
assert!(attributes.contains(&(Key::new("name"), "my-event-name".into())));
263+
assert_eq!(attributes.len(), 8);
268264
assert!(attributes.contains(&(Key::new("event_id"), 20.into())));
269265
assert!(attributes.contains(&(Key::new("user_name"), "otel".into())));
270266
assert!(attributes.contains(&(Key::new("user_email"), "otel@opentelemetry.io".into())));
@@ -358,10 +354,9 @@ mod tests {
358354
.clone()
359355
.expect("Attributes are expected");
360356
#[cfg(not(feature = "experimental_metadata_attributes"))]
361-
assert_eq!(attributes.len(), 4);
357+
assert_eq!(attributes.len(), 3);
362358
#[cfg(feature = "experimental_metadata_attributes")]
363-
assert_eq!(attributes.len(), 9);
364-
assert!(attributes.contains(&(Key::new("name"), "my-event-name".into())));
359+
assert_eq!(attributes.len(), 8);
365360
assert!(attributes.contains(&(Key::new("event_id"), 20.into())));
366361
assert!(attributes.contains(&(Key::new("user_name"), "otel".into())));
367362
assert!(attributes.contains(&(Key::new("user_email"), "otel@opentelemetry.io".into())));
@@ -419,6 +414,7 @@ mod tests {
419414
assert!(log.record.trace_context.is_none());
420415

421416
// Validate attributes
417+
#[cfg(feature = "experimental_metadata_attributes")]
422418
let attributes: Vec<(Key, AnyValue)> = log
423419
.record
424420
.attributes
@@ -427,9 +423,7 @@ mod tests {
427423

428424
// Attributes can be polluted when we don't use this feature.
429425
#[cfg(feature = "experimental_metadata_attributes")]
430-
assert_eq!(attributes.len(), 6);
431-
432-
assert!(attributes.contains(&(Key::new("name"), "log event".into())));
426+
assert_eq!(attributes.len(), 5);
433427

434428
#[cfg(feature = "experimental_metadata_attributes")]
435429
{
@@ -516,6 +510,7 @@ mod tests {
516510
);
517511

518512
// validate attributes.
513+
#[cfg(feature = "experimental_metadata_attributes")]
519514
let attributes: Vec<(Key, AnyValue)> = log
520515
.record
521516
.attributes
@@ -524,9 +519,7 @@ mod tests {
524519

525520
// Attributes can be polluted when we don't use this feature.
526521
#[cfg(feature = "experimental_metadata_attributes")]
527-
assert_eq!(attributes.len(), 6);
528-
529-
assert!(attributes.contains(&(Key::new("name"), "log event".into())));
522+
assert_eq!(attributes.len(), 5);
530523

531524
#[cfg(feature = "experimental_metadata_attributes")]
532525
{

opentelemetry-http/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
## vNext
44

5+
## v0.13.0
6+
57
- **Breaking** Correct the misspelling of "webkpi" to "webpki" in features [#1842](https://github.com/open-telemetry/opentelemetry-rust/pull/1842)
68
- **Breaking** Remove support for the `isahc` HTTP client [#1924](https://github.com/open-telemetry/opentelemetry-rust/pull/1924)
9+
- Update to `http` v1 [#1674](https://github.com/open-telemetry/opentelemetry-rust/pull/1674)
10+
- Update `opentelemetry` dependency version to 0.24
711

812
## v0.12.0
913

0 commit comments

Comments
 (0)