use of com.splunk.opentelemetry.profiler.context.SpanContextualizer in project splunk-otel-java by signalfx.
the class TLABProcessorTest method tlabProcessTest.
private void tlabProcessTest(Long tlabSize) {
Instant now = Instant.now();
AtomicReference<LogData> seenLogData = new AtomicReference<>();
LogProcessor consumer = seenLogData::set;
String stackAsString = "\"mockingbird\" #606\n" + " java.lang.Thread.State: UNKNOWN\n" + "i am a serialized stack believe me";
StackSerializer serializer = mock(StackSerializer.class);
LogDataCommonAttributes commonAttrs = new LogDataCommonAttributes(new EventPeriods(x -> null));
Clock clock = new MockClock(now);
RecordedEvent event = createMockEvent(serializer, now, tlabSize);
Config config = mock(Config.class);
when(config.getBoolean(CONFIG_KEY_TLAB_ENABLED, DEFAULT_MEMORY_ENABLED)).thenReturn(true);
SpanContext spanContext = SpanContext.create(TraceId.fromLongs(123, 456), SpanId.fromLong(123), TraceFlags.getSampled(), TraceState.getDefault());
SpanContextualizer spanContextualizer = mock(SpanContextualizer.class);
when(spanContextualizer.link(THREAD_ID)).thenReturn(new SpanLinkage(spanContext, THREAD_ID));
TLABProcessor processor = TLABProcessor.builder(config).stackSerializer(serializer).logProcessor(consumer).commonAttributes(commonAttrs).resource(Resource.getDefault()).spanContextualizer(spanContextualizer).build();
processor.accept(event);
assertEquals(stackAsString, seenLogData.get().getBody().asString());
assertEquals(TimeUnit.SECONDS.toNanos(now.getEpochSecond()) + clock.nanoTime(), seenLogData.get().getEpochNanos());
assertEquals("otel.profiling", seenLogData.get().getAttributes().get(SOURCE_TYPE));
assertEquals("tee-lab", seenLogData.get().getAttributes().get(SOURCE_EVENT_NAME));
assertEquals(ONE_MB, seenLogData.get().getAttributes().get(ALLOCATION_SIZE_KEY));
assertEquals(spanContext, seenLogData.get().getSpanContext());
}
use of com.splunk.opentelemetry.profiler.context.SpanContextualizer in project splunk-otel-java by signalfx.
the class TLABProcessorTest method testSampling.
@Test
void testSampling() {
int samplerInterval = 5;
AtomicReference<LogData> seenLogData = new AtomicReference<>();
LogProcessor consumer = seenLogData::set;
StackSerializer serializer = mock(StackSerializer.class);
LogDataCommonAttributes commonAttrs = new LogDataCommonAttributes(new EventPeriods(x -> null));
SpanContextualizer spanContextualizer = mock(SpanContextualizer.class);
when(spanContextualizer.link(anyLong())).thenReturn(SpanLinkage.NONE);
Config config = mock(Config.class);
when(config.getBoolean(CONFIG_KEY_TLAB_ENABLED, DEFAULT_MEMORY_ENABLED)).thenReturn(true);
when(config.getInt(CONFIG_KEY_MEMORY_SAMPLER_INTERVAL, DEFAULT_MEMORY_SAMPLING_INTERVAL)).thenReturn(samplerInterval);
TLABProcessor processor = TLABProcessor.builder(config).stackSerializer(serializer).logProcessor(consumer).commonAttributes(commonAttrs).resource(Resource.getDefault()).spanContextualizer(spanContextualizer).build();
RecordedEvent event = createMockEvent(serializer, Instant.now(), null);
for (int i = 0; i < samplerInterval + 2; i++) {
processor.accept(event);
if (i % samplerInterval == 0) {
assertEquals("otel.profiling", seenLogData.get().getAttributes().get(SOURCE_TYPE));
assertEquals("tee-lab", seenLogData.get().getAttributes().get(SOURCE_EVENT_NAME));
assertEquals("Systematic sampler", seenLogData.get().getAttributes().get(SAMPLER_NAME_KEY));
assertEquals(Long.valueOf(samplerInterval), seenLogData.get().getAttributes().get(SAMPLER_INTERVAL_KEY));
} else {
assertNull(seenLogData.get());
}
seenLogData.set(null);
}
}
use of com.splunk.opentelemetry.profiler.context.SpanContextualizer in project splunk-otel-java by signalfx.
the class ThreadDumpProcessorTest method testFilterStacksWithoutSpans.
@Test
void testFilterStacksWithoutSpans() {
SpanContextualizer contextualizer = new SpanContextualizer();
sampleThreadsFromDump.forEach(it -> contextualizer.updateContext(threadContextStartEvent(it.threadId)));
String threadDump = readDumpFromResource("thread-dump1.txt");
List<StackToSpanLinkage> results = collectResults(contextualizer, threadDump, true);
assertEquals(sampleThreadsFromDump.size(), results.size());
sampleThreadsFromDump.forEach(sample -> assertThat(results).anyMatch(stack -> stack.getRawStack().contains(sample.threadName)));
}
use of com.splunk.opentelemetry.profiler.context.SpanContextualizer in project splunk-otel-java by signalfx.
the class ThreadDumpProcessorTest method testProcessEvent.
@Test
void testProcessEvent() {
SpanContextualizer contextualizer = new SpanContextualizer();
long idOfThreadRunningTheSpan = 3L;
SpanContext expectedContext = SpanContext.create(traceId, spanId, TraceFlags.fromByte(traceFlags), TraceState.getDefault());
contextualizer.updateContext(threadContextStartEvent(idOfThreadRunningTheSpan));
String threadDump = readDumpFromResource("thread-dump2.txt");
List<StackToSpanLinkage> results = collectResults(contextualizer, threadDump, false);
assertEquals(3, results.size());
assertFalse(results.get(0).hasSpanInfo());
assertTrue(results.get(0).getRawStack().contains("at java.lang.ref.Reference$ReferenceHandler"));
assertTrue(results.get(1).hasSpanInfo());
assertEquals(expectedContext, results.get(1).getSpanContext());
assertEquals(idOfThreadRunningTheSpan, results.get(1).getSpanStartThread());
assertTrue(results.get(1).getRawStack().contains("AwesomeThinger.overHereDoingSpanThings"));
assertFalse(results.get(2).hasSpanInfo());
assertTrue(results.get(2).getRawStack().contains("0x0000000625152778"));
}
use of com.splunk.opentelemetry.profiler.context.SpanContextualizer in project splunk-otel-java by signalfx.
the class ThreadDumpProcessorTest method testFilterInternalStacks.
@Test
void testFilterInternalStacks() {
SpanContextualizer contextualizer = new SpanContextualizer();
String threadDump = readDumpFromResource("thread-dump1.txt");
List<StackToSpanLinkage> results = collectResults(contextualizer, threadDump, false);
assertEquals(28, results.size());
Stream.of(StackTraceFilter.UNWANTED_PREFIXES).forEach(prefix -> {
assertThat(results).noneMatch(stack -> stack.getRawStack().contains(prefix));
});
}
Aggregations