File tree 2 files changed +24
-0
lines changed
2 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -1022,6 +1022,20 @@ where
1022
1022
let mut otel_data = span. extensions_mut ( ) . remove :: < OtelData > ( ) ;
1023
1023
let span_builder = otel_data. as_mut ( ) . map ( |data| & mut data. builder ) ;
1024
1024
1025
+ let limits = self . tracer . span_limits ( ) ;
1026
+
1027
+ if span_builder
1028
+ . as_ref ( )
1029
+ . and_then ( |span_builder| span_builder. events . as_ref ( ) . map ( |events| events. len ( ) ) )
1030
+ . zip ( limits)
1031
+ . map_or ( false , |( current_length, limits) | {
1032
+ current_length >= limits. max_events_per_span as usize
1033
+ } )
1034
+ {
1035
+ // We have reached the configured limit for events so there is no point in storing any more.
1036
+ return ;
1037
+ }
1038
+
1025
1039
let mut otel_event = otel:: Event :: new (
1026
1040
String :: new ( ) ,
1027
1041
crate :: time:: now ( ) ,
Original file line number Diff line number Diff line change @@ -47,6 +47,11 @@ pub trait PreSampledTracer {
47
47
48
48
/// Generate a new span id.
49
49
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
+ }
50
55
}
51
56
52
57
impl PreSampledTracer for noop:: NoopTracer {
@@ -111,6 +116,11 @@ impl PreSampledTracer for SdkTracer {
111
116
. map ( |provider| provider. config ( ) . id_generator . new_span_id ( ) )
112
117
. unwrap_or ( otel:: SpanId :: INVALID )
113
118
}
119
+
120
+ fn span_limits ( & self ) -> Option < opentelemetry_sdk:: trace:: SpanLimits > {
121
+ self . provider ( )
122
+ . map ( |provider| provider. config ( ) . span_limits )
123
+ }
114
124
}
115
125
116
126
fn current_trace_state (
You can’t perform that action at this time.
0 commit comments