Skip to content

Commit 534df04

Browse files
committed
Refactoring context passing
1 parent 8a20c86 commit 534df04

File tree

2 files changed

+34
-30
lines changed

2 files changed

+34
-30
lines changed

sentry-tracing/src/converters.rs

+21-18
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,22 @@ fn extract_event_data(event: &tracing_core::Event) -> (Option<String>, FieldVisi
5454

5555
fn extract_event_data_with_context<S>(
5656
event: &tracing_core::Event,
57-
ctx: Option<(SpanPropagation, Context<S>)>,
57+
ctx: Context<S>,
58+
propagation: Option<SpanPropagation>,
5859
) -> (Option<String>, FieldVisitor)
5960
where
6061
S: Subscriber + for<'a> LookupSpan<'a>,
6162
{
6263
let (message, mut visitor) = extract_event_data(event);
6364

64-
// Add the context fields of every parent span.
65-
let current_span = ctx.as_ref().and_then(|(propagation, ctx)| {
65+
// Add the context fields of every parent span, if propagation is enabled
66+
let propagation_span = propagation.and_then(|propagation| {
6667
event
6768
.parent()
68-
.and_then(|id| ctx.span(id).map(|span| (*propagation, span)))
69-
.or_else(|| ctx.lookup_current().map(|span| (*propagation, span)))
69+
.and_then(|id| ctx.span(id).map(|span| (propagation, span)))
70+
.or_else(|| ctx.lookup_current().map(|span| (propagation, span)))
7071
});
71-
if let Some((propagation, span)) = current_span {
72+
if let Some((propagation, span)) = propagation_span {
7273
for span in span.scope() {
7374
let name = span.name();
7475
let ext = span.extensions();
@@ -172,19 +173,19 @@ impl Visit for FieldVisitor {
172173
/// Creates a [`Breadcrumb`] from a given [`tracing_core::Event`]
173174
pub fn breadcrumb_from_event<'context, S>(
174175
event: &tracing_core::Event,
175-
ctx: impl Into<Option<(SpanPropagation, Context<'context, S>)>>,
176+
ctx: Context<'context, S>,
177+
mut propagation: Option<SpanPropagation>,
176178
) -> Breadcrumb
177179
where
178180
S: Subscriber + for<'a> LookupSpan<'a>,
179181
{
180-
let ctx = match ctx.into() {
181-
Some((propagation, ctx)) if propagation.is_attrs_enabled() => {
182-
Some((SpanPropagation::Attributes, ctx))
182+
if let Some(propagation) = propagation.as_mut() {
183+
if propagation.is_attrs_enabled() {
184+
//Breadcrumb has no tags, so propagate only attributes
185+
*propagation = SpanPropagation::Attributes;
183186
}
184-
//Breadcrumb has no tags, so propagate only attributes
185-
_ => None,
186-
};
187-
let (message, visitor) = extract_event_data_with_context(event, ctx);
187+
}
188+
let (message, visitor) = extract_event_data_with_context(event, ctx, propagation);
188189
Breadcrumb {
189190
category: Some(event.metadata().target().to_owned()),
190191
ty: "log".into(),
@@ -255,12 +256,13 @@ fn contexts_from_event(
255256
/// Creates an [`Event`] from a given [`tracing_core::Event`]
256257
pub fn event_from_event<'context, S>(
257258
event: &tracing_core::Event,
258-
ctx: impl Into<Option<(SpanPropagation, Context<'context, S>)>>,
259+
ctx: Context<'context, S>,
260+
propagation: Option<SpanPropagation>,
259261
) -> Event<'static>
260262
where
261263
S: Subscriber + for<'a> LookupSpan<'a>,
262264
{
263-
let (message, mut visitor) = extract_event_data_with_context(event, ctx.into());
265+
let (message, mut visitor) = extract_event_data_with_context(event, ctx, propagation);
264266

265267
Event {
266268
logger: Some(event.metadata().target().to_owned()),
@@ -275,7 +277,8 @@ where
275277
/// Creates an exception [`Event`] from a given [`tracing_core::Event`]
276278
pub fn exception_from_event<'context, S>(
277279
event: &tracing_core::Event,
278-
ctx: impl Into<Option<(SpanPropagation, Context<'context, S>)>>,
280+
ctx: Context<'context, S>,
281+
propagation: Option<SpanPropagation>,
279282
) -> Event<'static>
280283
where
281284
S: Subscriber + for<'a> LookupSpan<'a>,
@@ -285,7 +288,7 @@ where
285288
// information for this. However, it may contain a serialized error which we can parse to emit
286289
// an exception record.
287290
#[allow(unused_mut)]
288-
let (mut message, visitor) = extract_event_data_with_context(event, ctx.into());
291+
let (mut message, visitor) = extract_event_data_with_context(event, ctx, propagation);
289292
let FieldVisitor {
290293
mut exceptions,
291294
mut json_values,

sentry-tracing/src/layer.rs

+13-12
Original file line numberDiff line numberDiff line change
@@ -215,19 +215,20 @@ where
215215
fn on_event(&self, event: &Event, ctx: Context<'_, S>) {
216216
let item = match &self.event_mapper {
217217
Some(mapper) => mapper(event, ctx),
218-
None => {
219-
let span_ctx = self.span_propagation.map(|propagation| (propagation, ctx));
220-
match (self.event_filter)(event.metadata()) {
221-
EventFilter::Ignore => EventMapping::Ignore,
222-
EventFilter::Breadcrumb => {
223-
EventMapping::Breadcrumb(breadcrumb_from_event(event, span_ctx))
224-
}
225-
EventFilter::Event => EventMapping::Event(event_from_event(event, span_ctx)),
226-
EventFilter::Exception => {
227-
EventMapping::Event(exception_from_event(event, span_ctx))
228-
}
218+
None => match (self.event_filter)(event.metadata()) {
219+
EventFilter::Ignore => EventMapping::Ignore,
220+
EventFilter::Breadcrumb => EventMapping::Breadcrumb(breadcrumb_from_event(
221+
event,
222+
ctx,
223+
self.span_propagation,
224+
)),
225+
EventFilter::Event => {
226+
EventMapping::Event(event_from_event(event, ctx, self.span_propagation))
229227
}
230-
}
228+
EventFilter::Exception => {
229+
EventMapping::Event(exception_from_event(event, ctx, self.span_propagation))
230+
}
231+
},
231232
};
232233

233234
match item {

0 commit comments

Comments
 (0)