Skip to content

Commit 2b46784

Browse files
authored
Run events in span scope (#838)
1 parent 077f902 commit 2b46784

File tree

5 files changed

+37
-21
lines changed

5 files changed

+37
-21
lines changed

rama-http/src/layer/trace/make_span.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::header::USER_AGENT;
33
use crate::opentelemetry::version_as_protocol_version;
44
use rama_core::telemetry::tracing::{self, Level, Span};
55
use rama_net::http::RequestContext;
6+
use rama_utils::str::arcstr::{ArcStr, arcstr};
67

78
use super::DEFAULT_MESSAGE_LEVEL;
89

@@ -39,6 +40,7 @@ where
3940
pub struct DefaultMakeSpan {
4041
level: Level,
4142
include_headers: bool,
43+
otel_name: ArcStr,
4244
}
4345

4446
impl DefaultMakeSpan {
@@ -48,6 +50,7 @@ impl DefaultMakeSpan {
4850
Self {
4951
level: DEFAULT_MESSAGE_LEVEL,
5052
include_headers: false,
53+
otel_name: arcstr!("request"),
5154
}
5255
}
5356

@@ -67,13 +70,20 @@ impl DefaultMakeSpan {
6770
/// Include request headers on the [`Span`].
6871
///
6972
/// By default headers are not included.
70-
///
71-
/// [`Span`]: tracing::Span
73+
7274
pub fn include_headers(mut self, include_headers: bool) -> Self {
7375
self.include_headers = include_headers;
7476
self
7577
}
7678
}
79+
80+
rama_utils::macros::generate_set_and_with! {
81+
/// Set the otel.name field of this [`Span`].
82+
pub fn name(mut self, otel_name: ArcStr) -> Self {
83+
self.otel_name = otel_name;
84+
self
85+
}
86+
}
7787
}
7888

7989
impl Default for DefaultMakeSpan {
@@ -114,6 +124,7 @@ impl<B> MakeSpan<B> for DefaultMakeSpan {
114124
tracing::span!(
115125
$level,
116126
"request",
127+
otel.name = self.otel_name.as_str(),
117128
http.request.method = %request.method(),
118129
url.full = %request.uri(),
119130
url.domain = found_domain_str,
@@ -130,6 +141,7 @@ impl<B> MakeSpan<B> for DefaultMakeSpan {
130141
tracing::span!(
131142
$level,
132143
"request",
144+
otel.name = self.otel_name.as_str(),
133145
http.request.method = %request.method(),
134146
url.full = %request.uri(),
135147
url.domain = found_domain_str,

rama-http/src/layer/trace/on_eos.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ impl DefaultOnEos {
9090
}
9191

9292
impl OnEos for DefaultOnEos {
93-
fn on_eos(self, trailers: Option<&HeaderMap>, stream_duration: Duration, _span: &Span) {
93+
fn on_eos(self, trailers: Option<&HeaderMap>, stream_duration: Duration, span: &Span) {
9494
let stream_duration = Latency {
9595
unit: self.latency_unit,
9696
duration: stream_duration,
@@ -108,6 +108,6 @@ impl OnEos for DefaultOnEos {
108108
}
109109
});
110110

111-
event_dynamic_lvl!(self.level, %stream_duration, status, "end of stream");
111+
span.in_scope(|| event_dynamic_lvl!(self.level, %stream_duration, status, "end of stream"));
112112
}
113113
}

rama-http/src/layer/trace/on_failure.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,18 @@ impl<FailureClass> OnFailure<FailureClass> for DefaultOnFailure
9090
where
9191
FailureClass: fmt::Display,
9292
{
93-
fn on_failure(&self, failure_classification: FailureClass, latency: Duration, _: &Span) {
93+
fn on_failure(&self, failure_classification: FailureClass, latency: Duration, span: &Span) {
9494
let latency = Latency {
9595
unit: self.latency_unit,
9696
duration: latency,
9797
};
98-
event_dynamic_lvl!(
99-
self.level,
100-
classification = %failure_classification,
101-
%latency,
102-
"response failed"
103-
);
98+
span.in_scope(|| {
99+
event_dynamic_lvl!(
100+
self.level,
101+
classification = %failure_classification,
102+
%latency,
103+
"response failed"
104+
)
105+
});
104106
}
105107
}

rama-http/src/layer/trace/on_request.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ impl DefaultOnRequest {
7878
}
7979

8080
impl<B> OnRequest<B> for DefaultOnRequest {
81-
fn on_request(&self, _: &Request<B>, _: &Span) {
82-
event_dynamic_lvl!(self.level, "started processing request");
81+
fn on_request(&self, _: &Request<B>, span: &Span) {
82+
span.in_scope(|| event_dynamic_lvl!(self.level, "started processing request"));
8383
}
8484
}

rama-http/src/layer/trace/on_response.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ impl DefaultOnResponse {
108108
}
109109

110110
impl<B> OnResponse<B> for DefaultOnResponse {
111-
fn on_response(self, response: &Response<B>, latency: Duration, _: &Span) {
111+
fn on_response(self, response: &Response<B>, latency: Duration, span: &Span) {
112112
let latency = Latency {
113113
unit: self.latency_unit,
114114
duration: latency,
@@ -117,13 +117,15 @@ impl<B> OnResponse<B> for DefaultOnResponse {
117117
.include_headers
118118
.then(|| tracing::field::debug(response.headers()));
119119

120-
event_dynamic_lvl!(
121-
self.level,
122-
%latency,
123-
status = status(response),
124-
response_headers,
125-
"finished processing request"
126-
);
120+
span.in_scope(|| {
121+
event_dynamic_lvl!(
122+
self.level,
123+
%latency,
124+
status = status(response),
125+
response_headers,
126+
"finished processing request"
127+
);
128+
})
127129
}
128130
}
129131

0 commit comments

Comments
 (0)