Skip to content

Commit d262712

Browse files
authored
Add transaction.span_count.started (#198)
implements elastic/apm-server#1241
1 parent 1857f55 commit d262712

File tree

7 files changed

+42
-72
lines changed

7 files changed

+42
-72
lines changed

apm-agent-core/src/main/java/co/elastic/apm/impl/ElasticApmTracer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,17 @@ private Span createRealSpan(Transaction transaction, @Nullable Span parentSpan,
198198
if (isTransactionSpanLimitReached(transaction)) {
199199
// TODO only drop leaf spans
200200
dropped = true;
201-
transaction.getSpanCount().getDropped().increment();
201+
transaction.getSpanCount().getDropped().incrementAndGet();
202202
} else {
203203
dropped = false;
204+
transaction.getSpanCount().getStarted().incrementAndGet();
204205
}
205-
transaction.getSpanCount().increment();
206206
span.start(transaction, parentSpan, nanoTime, dropped);
207207
return span;
208208
}
209209

210210
private boolean isTransactionSpanLimitReached(Transaction transaction) {
211-
return coreConfiguration.getTransactionMaxSpans() <= transaction.getSpanCount().getTotal();
211+
return coreConfiguration.getTransactionMaxSpans() <= transaction.getSpanCount().getStarted().get();
212212
}
213213

214214
public void captureException(@Nullable Throwable e) {

apm-agent-core/src/main/java/co/elastic/apm/impl/transaction/Dropped.java

Lines changed: 0 additions & 52 deletions
This file was deleted.

apm-agent-core/src/main/java/co/elastic/apm/impl/transaction/SpanCount.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,20 @@
2626

2727
public class SpanCount implements Recyclable {
2828

29-
private final Dropped dropped = new Dropped();
30-
private final AtomicInteger total = new AtomicInteger(0);
29+
private final AtomicInteger dropped = new AtomicInteger(0);
30+
private final AtomicInteger started = new AtomicInteger(0);
3131

32-
public Dropped getDropped() {
32+
public AtomicInteger getDropped() {
3333
return dropped;
3434
}
3535

36-
public void increment() {
37-
total.incrementAndGet();
38-
}
39-
40-
public int getTotal() {
41-
return total.get();
36+
public AtomicInteger getStarted() {
37+
return started;
4238
}
4339

4440
@Override
4541
public void resetState() {
46-
dropped.resetState();
47-
total.set(0);
42+
dropped.set(0);
43+
started.set(0);
4844
}
4945
}

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

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,11 @@ private void serializeTransaction(final Transaction transaction) {
431431
writeField("duration", transaction.getDuration());
432432
writeField("result", transaction.getResult());
433433
serializeContext(transaction.getContext());
434-
serializeSpanCount(transaction.getSpanCount());
434+
if (distributedTracing) {
435+
serializeSpanCountV2(transaction.getSpanCount());
436+
} else {
437+
serializeSpanCountV1(transaction.getSpanCount());
438+
}
435439
serializeSpans(transaction.getSpans());
436440
// TODO marks
437441
writeLastField("sampled", transaction.isSampled());
@@ -574,18 +578,27 @@ private void serializeSpanContext(SpanContext context) {
574578
jw.writeByte(COMMA);
575579
}
576580

577-
private void serializeSpanCount(final SpanCount spanCount) {
581+
private void serializeSpanCountV1(final SpanCount spanCount) {
578582
writeFieldName("span_count");
579583
jw.writeByte(OBJECT_START);
580584
writeFieldName("dropped");
581585
jw.writeByte(OBJECT_START);
582586
writeFieldName("total");
583-
NumberConverter.serialize(spanCount.getDropped().getTotal(), jw);
587+
NumberConverter.serialize(spanCount.getDropped().get(), jw);
584588
jw.writeByte(OBJECT_END);
585589
jw.writeByte(OBJECT_END);
586590
jw.writeByte(COMMA);
587591
}
588592

593+
private void serializeSpanCountV2(final SpanCount spanCount) {
594+
writeFieldName("span_count");
595+
jw.writeByte(OBJECT_START);
596+
writeField("dropped", spanCount.getDropped().get());
597+
writeLastField("started", spanCount.getStarted().get());
598+
jw.writeByte(OBJECT_END);
599+
jw.writeByte(COMMA);
600+
}
601+
589602
private void serializeContext(final TransactionContext context) {
590603
writeFieldName("context");
591604
jw.writeByte(OBJECT_START);
@@ -820,6 +833,17 @@ private void writeField(final String fieldName, final long value) {
820833
jw.writeByte(COMMA);
821834
}
822835

836+
private void writeField(final String fieldName, final int value) {
837+
writeFieldName(fieldName);
838+
NumberConverter.serialize(value, jw);
839+
jw.writeByte(COMMA);
840+
}
841+
842+
private void writeLastField(final String fieldName, final int value) {
843+
writeFieldName(fieldName);
844+
NumberConverter.serialize(value, jw);
845+
}
846+
823847
private void writeField(final String fieldName, final boolean value) {
824848
writeFieldName(fieldName);
825849
BoolConverter.serialize(value, jw);

apm-agent-core/src/main/resources/schema/transactions/transaction.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
"type": ["object", "null"],
8686
"properties": {
8787
"dropped": {
88-
"type": ["object", "null"],
88+
"type": ["object", "integer", "null"],
8989
"properties": {
9090
"total": {
9191
"type": ["integer","null"],

apm-agent-core/src/test/java/co/elastic/apm/impl/ElasticApmTracerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ void testEnableDropSpans() {
196196
transaction.end();
197197
}
198198
assertThat(reporter.getFirstTransaction().isSampled()).isTrue();
199-
assertThat(reporter.getFirstTransaction().getSpanCount().getDropped().getTotal()).isEqualTo(1);
200-
assertThat(reporter.getFirstTransaction().getSpanCount().getTotal()).isEqualTo(2);
199+
assertThat(reporter.getFirstTransaction().getSpanCount().getDropped().get()).isEqualTo(1);
200+
assertThat(reporter.getFirstTransaction().getSpanCount().getStarted().get()).isEqualTo(1);
201201
assertThat(reporter.getSpans()).hasSize(1);
202202
}
203203

apm-agent-core/src/test/java/co/elastic/apm/impl/payload/TransactionPayloadJsonSchemaTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,15 @@ private void validate(TransactionPayload payload) throws IOException {
118118
DslJsonSerializer serializer = new DslJsonSerializer(coreConfiguration.isDistributedTracingEnabled(), mock(StacktraceConfiguration.class));
119119

120120
final String content = serializer.toJsonString(payload);
121+
System.out.println(content);
121122
Set<ValidationMessage> errors = schema.validate(objectMapper.readTree(content));
122123
assertThat(errors).isEmpty();
123124

124125
when(coreConfiguration.isDistributedTracingEnabled()).thenReturn(true);
125126
serializer = new DslJsonSerializer(coreConfiguration.isDistributedTracingEnabled(), mock(StacktraceConfiguration.class));
126127
transformForDistributedTracing(payload);
127128
final String contentInDistributedTracingFormat = serializer.toJsonString(payload);
129+
System.out.println(contentInDistributedTracingFormat);
128130
Set<ValidationMessage> distributedTracingFormatErrors = schema.validate(objectMapper.readTree(contentInDistributedTracingFormat));
129131
assertThat(distributedTracingFormatErrors).isEmpty();
130132
}

0 commit comments

Comments
 (0)