Skip to content

Commit d61db96

Browse files
authored
oops I forgot otel attributes for transactions (#2657)
1 parent d0ef229 commit d61db96

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import co.elastic.apm.agent.impl.metadata.Service;
4848
import co.elastic.apm.agent.impl.metadata.SystemInfo;
4949
import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration;
50+
import co.elastic.apm.agent.impl.transaction.AbstractSpan;
5051
import co.elastic.apm.agent.impl.transaction.Composite;
5152
import co.elastic.apm.agent.impl.transaction.DroppedSpanStats;
5253
import co.elastic.apm.agent.impl.transaction.Faas;
@@ -671,6 +672,7 @@ private void serializeTransaction(final Transaction transaction) {
671672
if (transaction.isSampled()) {
672673
serializeDroppedSpanStats(transaction.getDroppedSpanStats());
673674
}
675+
serializeOTel(transaction);
674676
double sampleRate = traceContext.getSampleRate();
675677
if (!Double.isNaN(sampleRate)) {
676678
writeField("sample_rate", sampleRate);
@@ -724,7 +726,7 @@ private void serializeSpan(final Span span) {
724726
jw.writeByte(OBJECT_END);
725727
}
726728

727-
private void serializeOTel(Span span) {
729+
private void serializeOTel(AbstractSpan<?> span) {
728730
OTelSpanKind kind = span.getOtelKind();
729731
Map<String, Object> attributes = span.getOtelAttributes();
730732
boolean hasAttributes = !attributes.isEmpty();

apm-agent-core/src/test/java/co/elastic/apm/agent/report/serialize/DslJsonSerializerTest.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import co.elastic.apm.agent.impl.sampling.ConstantSampler;
4646
import co.elastic.apm.agent.impl.sampling.Sampler;
4747
import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration;
48+
import co.elastic.apm.agent.impl.transaction.AbstractSpan;
4849
import co.elastic.apm.agent.impl.transaction.Id;
4950
import co.elastic.apm.agent.impl.transaction.OTelSpanKind;
5051
import co.elastic.apm.agent.impl.transaction.Span;
@@ -77,6 +78,7 @@
7778
import java.util.Map;
7879
import java.util.Objects;
7980
import java.util.concurrent.Future;
81+
import java.util.function.Function;
8082

8183
import static org.assertj.core.api.Assertions.assertThat;
8284
import static org.assertj.core.api.SoftAssertions.assertSoftly;
@@ -1345,30 +1347,39 @@ void multiValueHeaders(boolean supportsMulti) {
13451347

13461348
@Test
13471349
void testOTelSpanSerialization() {
1348-
Span span = new Span(MockTracer.create()).withName("span name");
1349-
assertThat(span.getOtelKind())
1350+
Span span = new Span(MockTracer.create()).withName("otel span");
1351+
testOTelSpanSerialization(span, s -> readJsonString(serializer.toJsonString(s)));
1352+
1353+
Transaction transaction = new Transaction(MockTracer.create()).withName("otel span");
1354+
testOTelSpanSerialization(transaction, t -> readJsonString(serializer.toJsonString(t)));
1355+
}
1356+
1357+
private <T extends AbstractSpan<T>> void testOTelSpanSerialization(T context, Function<T, JsonNode> toJson) {
1358+
1359+
assertThat(context.getOtelKind())
13501360
.describedAs("otel span kind should not be set by default")
13511361
.isNull();
13521362

1353-
JsonNode spanJson = readJsonString(serializer.toJsonString(span));
1354-
assertThat(spanJson.get("name").asText()).isEqualTo("span name");
1363+
JsonNode spanJson = toJson.apply(context );
1364+
1365+
assertThat(spanJson.get("name").asText()).isEqualTo("otel span");
13551366
assertThat(spanJson.get("otel")).isNull();
13561367

13571368
for (OTelSpanKind kind : OTelSpanKind.values()) {
1358-
span.withOtelKind(kind);
1359-
spanJson = readJsonString(serializer.toJsonString(span));
1369+
context.withOtelKind(kind);
1370+
spanJson = toJson.apply(context);
13601371

13611372
JsonNode otelJson = spanJson.get("otel");
13621373
assertThat(otelJson).isNotNull();
13631374
assertThat(otelJson.get("span_kind").asText()).isEqualTo(kind.name());
13641375
}
13651376

13661377
// with custom otel attributes
1367-
span.getOtelAttributes().put("attribute.string", "hello");
1368-
span.getOtelAttributes().put("attribute.long", 123L);
1369-
span.getOtelAttributes().put("attribute.boolean", false);
1370-
span.getOtelAttributes().put("attribute.float", 0.42f);
1371-
spanJson = readJsonString(serializer.toJsonString(span));
1378+
context.getOtelAttributes().put("attribute.string", "hello");
1379+
context.getOtelAttributes().put("attribute.long", 123L);
1380+
context.getOtelAttributes().put("attribute.boolean", false);
1381+
context.getOtelAttributes().put("attribute.float", 0.42f);
1382+
spanJson = toJson.apply(context);
13721383
JsonNode otelJson = spanJson.get("otel");
13731384
assertThat(otelJson).isNotNull();
13741385
JsonNode otelAttributes = otelJson.get("attributes");

0 commit comments

Comments
 (0)