private boolean isTransactionSpanLimitReached(Transaction transaction) { return coreConfiguration.getTransactionMaxSpans() <= transaction.getSpanCount().getStarted().get(); }
public Span startSpan(AbstractSpan<?> parent, long epochMicros) { Span span; span = spanPool.createInstance(); final boolean dropped; Transaction transaction = currentTransaction(); if (transaction != null) { if (isTransactionSpanLimitReached(transaction)) { dropped = true; transaction.getSpanCount().getDropped().incrementAndGet(); } else { dropped = false; transaction.getSpanCount().getStarted().incrementAndGet(); } } else { dropped = false; } span.start(TraceContext.fromParent(), parent, epochMicros, dropped); return span; }
@Test void testEnableDropSpans() { when(tracerImpl.getConfig(CoreConfiguration.class).getTransactionMaxSpans()).thenReturn(1); Transaction transaction = tracerImpl.startTransaction(); try (Scope scope = transaction.activateInScope()) { Span span = tracerImpl.getActive().createSpan(); try (Scope spanScope = span.activateInScope()) { assertThat(span.isSampled()).isTrue(); span.end(); } Span span2 = tracerImpl.getActive().createSpan(); try (Scope spanScope = span2.activateInScope()) { assertThat(span2.isSampled()).isFalse(); span2.end(); } transaction.end(); } assertThat(reporter.getFirstTransaction().isSampled()).isTrue(); assertThat(reporter.getFirstTransaction().getSpanCount().getDropped().get()).isEqualTo(1); assertThat(reporter.getFirstTransaction().getSpanCount().getStarted().get()).isEqualTo(1); assertThat(reporter.getSpans()).hasSize(1); }
private void serializeTransaction(final Transaction transaction) { jw.writeByte(OBJECT_START); writeTimestamp(transaction.getTimestamp()); writeField("name", transaction.getName()); serializeTraceContext(transaction.getTraceContext(), false); writeField("type", transaction.getType()); writeField("duration", transaction.getDuration()); writeField("result", transaction.getResult()); serializeContext(transaction.getContext()); serializeSpanCount(transaction.getSpanCount()); writeLastField("sampled", transaction.isSampled()); jw.writeByte(OBJECT_END); }