Skip to content

Commit f084e8c

Browse files
committed
enhancement: honor span limits when collecting events
1 parent 101dc89 commit f084e8c

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/layer.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,6 +1027,20 @@ where
10271027
let mut otel_data = span.extensions_mut().remove::<OtelData>();
10281028
let span_builder = otel_data.as_mut().map(|data| &mut data.builder);
10291029

1030+
let limits = self.tracer.span_limits();
1031+
1032+
if span_builder
1033+
.as_ref()
1034+
.and_then(|span_builder| span_builder.events.as_ref().map(|events| events.len()))
1035+
.zip(limits)
1036+
.map_or(false, |(current_length, limits)| {
1037+
current_length >= limits.max_events_per_span as usize
1038+
})
1039+
{
1040+
// We have reached the configured limit for events so there is no point in storing any more.
1041+
return;
1042+
}
1043+
10301044
let mut otel_event = otel::Event::new(
10311045
String::new(),
10321046
crate::time::now(),

src/tracer.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ pub trait PreSampledTracer {
4747

4848
/// Generate a new span id.
4949
fn new_span_id(&self) -> otel::SpanId;
50+
51+
/// Gets the current span limits.
52+
fn span_limits(&self) -> Option<opentelemetry_sdk::trace::SpanLimits> {
53+
None
54+
}
5055
}
5156

5257
impl PreSampledTracer for noop::NoopTracer {
@@ -111,6 +116,11 @@ impl PreSampledTracer for SdkTracer {
111116
.map(|provider| provider.config().id_generator.new_span_id())
112117
.unwrap_or(otel::SpanId::INVALID)
113118
}
119+
120+
fn span_limits(&self) -> Option<opentelemetry_sdk::trace::SpanLimits> {
121+
self.provider()
122+
.map(|provider| provider.config().span_limits)
123+
}
114124
}
115125

116126
fn current_trace_state(

0 commit comments

Comments
 (0)