Skip to content

Commit 5828fec

Browse files
committed
Update span enrichment to check processor.event to check if a trace is an elastic transaction
1 parent ca04b63 commit 5828fec

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

enrichments/internal/elastic/span.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,15 @@ func isTraceRoot(span ptrace.Span) bool {
746746

747747
func isElasticTransaction(span ptrace.Span) bool {
748748
flags := tracepb.SpanFlags(span.Flags())
749+
750+
// Events may have already been defined as an elastic transaction.
751+
// check the processor.event value to avoid incorrectly classifying
752+
// a span.
753+
processorEvent, _ := span.Attributes().Get(elasticattr.ProcessorEvent)
754+
749755
switch {
756+
case processorEvent.Str() == "transaction":
757+
return true
750758
case isTraceRoot(span):
751759
return true
752760
case (flags & tracepb.SpanFlags_SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) == 0:

enrichments/internal/elastic/span_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,31 @@ func TestElasticTransactionEnrich(t *testing.T) {
229229
elasticattr.TransactionType: "request",
230230
},
231231
},
232+
{
233+
name: "http_status_ok_processor_event_set",
234+
input: func() ptrace.Span {
235+
span := getElasticTxn()
236+
span.SetName("testtxn")
237+
span.Attributes().PutInt(string(semconv25.HTTPStatusCodeKey), http.StatusOK)
238+
span.Attributes().PutStr(elasticattr.ProcessorEvent, "transaction")
239+
return span
240+
}(),
241+
config: config.Enabled().Transaction,
242+
enrichedAttrs: map[string]any{
243+
elasticattr.TimestampUs: startTs.AsTime().UnixMicro(),
244+
elasticattr.TransactionSampled: true,
245+
elasticattr.TransactionRoot: true,
246+
elasticattr.TransactionID: "0100000000000000",
247+
elasticattr.TransactionName: "testtxn",
248+
elasticattr.ProcessorEvent: "transaction",
249+
elasticattr.TransactionRepresentativeCount: float64(1),
250+
elasticattr.TransactionDurationUs: expectedDuration.Microseconds(),
251+
elasticattr.EventOutcome: "success",
252+
elasticattr.SuccessCount: int64(1),
253+
elasticattr.TransactionResult: "HTTP 2xx",
254+
elasticattr.TransactionType: "request",
255+
},
256+
},
232257
{
233258
name: "http_status_1xx",
234259
input: func() ptrace.Span {
@@ -2146,7 +2171,18 @@ func TestIsElasticTransaction(t *testing.T) {
21462171
}(),
21472172
isTxn: false,
21482173
},
2174+
{
2175+
name: "elastic transaction type is already defined",
2176+
input: func() ptrace.Span {
2177+
span := ptrace.NewSpan()
2178+
span.Attributes().PutStr(elasticattr.ProcessorEvent, "transaction")
2179+
return span
2180+
}(),
2181+
isTxn: true,
2182+
},
21492183
} {
2150-
assert.Equal(t, tc.isTxn, isElasticTransaction(tc.input))
2184+
t.Run(tc.name, func(t *testing.T) {
2185+
assert.Equal(t, tc.isTxn, isElasticTransaction(tc.input))
2186+
})
21512187
}
21522188
}

0 commit comments

Comments
 (0)