use of io.opentelemetry.api.trace.SpanContext in project splunk-otel-java by signalfx.
the class LogDataCreatorTest method testCreate.
@Test
void testCreate() {
Instant time = Instant.now();
String stack = "the.stack";
SpanContext spanContext = SpanContext.create("deadbeefdeadbeefdeadbeefdeadbeef", "0123012301230123", TraceFlags.getSampled(), TraceState.getDefault());
Context context = Context.root().with(Span.wrap(spanContext));
long threadId = 987L;
String eventName = "GoodEventHere";
EventPeriods periods = mock(EventPeriods.class);
when(periods.getDuration(eventName)).thenReturn(Duration.ofMillis(606));
SpanLinkage linkage = new SpanLinkage(spanContext, threadId);
Resource resource = Resource.getDefault();
Attributes attributes = Attributes.of(SOURCE_EVENT_NAME, eventName, SOURCE_EVENT_PERIOD, 606L, SOURCE_TYPE, "otel.profiling");
LogData expected = LogDataBuilder.create(resource, INSTRUMENTATION_LIBRARY_INFO).setContext(context).setBody(stack).setEpoch(time).setAttributes(attributes).build();
StackToSpanLinkage linkedSpan = new StackToSpanLinkage(time, "the.stack", eventName, linkage);
LogDataCreator creator = new LogDataCreator(new LogDataCommonAttributes(periods), Resource.getDefault());
LogData result = creator.apply(linkedSpan);
assertEquals(expected, result);
}
use of io.opentelemetry.api.trace.SpanContext 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 io.opentelemetry.api.trace.SpanContext 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 io.opentelemetry.api.trace.SpanContext in project splunk-otel-java by signalfx.
the class JfrContextStorage method generateEvent.
private void generateEvent(Span span) {
SpanContext context = span.getSpanContext();
ContextAttached event = newEvent.apply(context);
event.begin();
if (event.shouldCommit()) {
event.commit();
}
}
use of io.opentelemetry.api.trace.SpanContext in project opentelemetry-java by open-telemetry.
the class SdkSpanTest method testAsSpanData.
@Test
void testAsSpanData() {
String name = "GreatSpan";
SpanKind kind = SpanKind.SERVER;
String traceId = this.traceId;
String spanId = this.spanId;
String parentSpanId = this.parentSpanId;
SpanLimits spanLimits = SpanLimits.getDefault();
SpanProcessor spanProcessor = NoopSpanProcessor.getInstance();
TestClock clock = TestClock.create();
Resource resource = this.resource;
Attributes attributes = TestUtils.generateRandomAttributes();
AttributesMap attributesWithCapacity = new AttributesMap(32, Integer.MAX_VALUE);
attributes.forEach((key, value) -> attributesWithCapacity.put((AttributeKey) key, value));
Attributes event1Attributes = TestUtils.generateRandomAttributes();
Attributes event2Attributes = TestUtils.generateRandomAttributes();
SpanContext context = SpanContext.create(traceId, spanId, TraceFlags.getDefault(), TraceState.getDefault());
LinkData link1 = LinkData.create(context, TestUtils.generateRandomAttributes());
SdkSpan readableSpan = SdkSpan.startSpan(context, name, instrumentationLibraryInfo, kind, parentSpanId != null ? Span.wrap(SpanContext.create(traceId, parentSpanId, TraceFlags.getDefault(), TraceState.getDefault())) : Span.getInvalid(), Context.root(), spanLimits, spanProcessor, clock, resource, attributesWithCapacity, Collections.singletonList(link1), 1, 0);
long startEpochNanos = clock.now();
clock.advance(Duration.ofMillis(4));
long firstEventEpochNanos = clock.now();
readableSpan.addEvent("event1", event1Attributes);
clock.advance(Duration.ofMillis(6));
long secondEventTimeNanos = clock.now();
readableSpan.addEvent("event2", event2Attributes);
clock.advance(Duration.ofMillis(100));
readableSpan.end();
long endEpochNanos = clock.now();
List<EventData> events = Arrays.asList(EventData.create(firstEventEpochNanos, "event1", event1Attributes, event1Attributes.size()), EventData.create(secondEventTimeNanos, "event2", event2Attributes, event2Attributes.size()));
SpanData result = readableSpan.toSpanData();
verifySpanData(result, attributesWithCapacity, events, Collections.singletonList(link1), name, startEpochNanos, endEpochNanos, StatusData.unset(), /* hasEnded= */
true);
assertThat(result.getTotalRecordedLinks()).isEqualTo(1);
assertThat(result.getSpanContext().isSampled()).isEqualTo(false);
}
Aggregations