Skip to content

Commit faeb2b3

Browse files
committed
Supportability metrics for dropped events
1 parent d7aeb16 commit faeb2b3

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

newrelic/api/time_trace.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ def _add_span_link_event(self, span_id, trace_id, linked_span_id, linked_trace_i
226226
return
227227

228228
if len(self.span_link_events) >= 100:
229+
self.transaction._record_supportability("Supportability/SpanEvent/Links/Dropped")
229230
_logger.debug(
230231
"Maximum number of SpanLink events already added. Dropping SpanLink event: linkedSpanId=%r, linkedTraceId=%r",
231232
linked_span_id,
@@ -258,6 +259,7 @@ def _add_span_event_event(self, name, span_id, trace_id, timestamp=None, attribu
258259
return
259260

260261
if len(self.span_event_events) >= 100:
262+
self.transaction._record_supportability("Supportability/SpanEvent/Events/Dropped")
261263
_logger.debug(
262264
"Maximum number of SpanEvent events already added. Dropping SpanEvent event: name=%r, spanId=%r, traceId=%r",
263265
name,

tests/hybridagent_opentelemetry/test_spanevent_spanlinks.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from opentelemetry.trace import Link, SpanContext, TraceState
1717
from testing_support.fixtures import dt_enabled
1818
from testing_support.validators.validate_spanlink_spanevent_events import validate_spanlink_or_spanevent_events
19+
from testing_support.validators.validate_transaction_metrics import validate_transaction_metrics
1920

2021
from newrelic.api.background_task import background_task
2122

@@ -162,3 +163,60 @@ def _test():
162163
otel_span.add_event("otelevent", attributes={"key99": "value99", "universe": 42})
163164

164165
_test()
166+
167+
168+
@dt_enabled
169+
@validate_spanlink_or_spanevent_events(
170+
count=100,
171+
exact_intrinsics={"name": "otelevent", "type": "SpanEvent"},
172+
expected_intrinsics=["timestamp", "span.id", "trace.id", "name"],
173+
exact_users={"key1": "value1", "key2": 42},
174+
)
175+
@validate_transaction_metrics(
176+
"test_spanevent_spanlinks:test_spanevent_events_over_limit.<locals>._test",
177+
rollup_metrics=[
178+
("Supportability/SpanEvent/Events/Dropped", 3),
179+
],
180+
background_task=True,
181+
)
182+
def test_spanevent_events_over_limit(tracer):
183+
@background_task()
184+
def _test():
185+
with tracer.start_as_current_span("otelspan") as otel_span:
186+
for _ in range(103):
187+
otel_span.add_event("otelevent", attributes={"key1": "value1", "key2": 42})
188+
189+
_test()
190+
191+
192+
@dt_enabled
193+
@validate_spanlink_or_spanevent_events(
194+
count=100,
195+
exact_intrinsics={
196+
"type": "SpanLink",
197+
},
198+
expected_intrinsics=["timestamp", "id", "trace.id", "linkedSpanId", "linkedTraceId"],
199+
exact_users={"key1": "value1", "key2": 42},
200+
)
201+
@validate_transaction_metrics(
202+
"test_spanevent_spanlinks:test_spanlink_events_over_limit.<locals>._test",
203+
rollup_metrics=[
204+
("Supportability/SpanEvent/Links/Dropped", 3),
205+
],
206+
background_task=True,
207+
)
208+
def test_spanlink_events_over_limit(tracer):
209+
@background_task()
210+
def _test():
211+
with tracer.start_as_current_span("otelspan") as otel_span:
212+
for incrementer in range(103):
213+
linked_span_context = SpanContext(
214+
trace_id=0x1234567890ABCDEF1234567890ABCDEF + incrementer,
215+
span_id=0x1234567890ABCDEF + incrementer,
216+
is_remote=True,
217+
trace_flags=0x01,
218+
trace_state=TraceState(),
219+
)
220+
otel_span.add_link(linked_span_context, attributes={"key1": "value1", "key2": 42})
221+
222+
_test()

0 commit comments

Comments
 (0)