Let LogDataBuilder take a SpanContext directly. (#3942)

* Let LogDataBuilder take a SpanContext directly.

* rename to setContext() based on PR review, and simplify test code.

* Update sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogDataBuilder.java

Co-authored-by: Anuraag Agrawal <anuraaga@gmail.com>
This commit is contained in:
jason plumb 2021-12-03 17:57:22 -08:00 committed by GitHub
parent 74fb36b6cb
commit 04239495ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 79 additions and 65 deletions

View File

@ -12,11 +12,9 @@ import static org.assertj.core.api.Assertions.assertThat;
import io.github.netmikey.logunit.api.LogCapturer;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.logs.data.LogData;
import io.opentelemetry.sdk.logs.data.LogDataBuilder;
@ -44,15 +42,12 @@ class OtlpJsonLoggingLogExporterTest {
.setSeverityText("INFO")
.setEpoch(1631533710L, TimeUnit.MILLISECONDS)
.setAttributes(Attributes.of(stringKey("animal"), "cat", longKey("lives"), 9L))
.setContext(
Context.root()
.with(
Span.wrap(
SpanContext.create(
"12345678876543211234567887654322",
"8765432112345876",
TraceFlags.getDefault(),
TraceState.getDefault()))))
.setSpanContext(
SpanContext.create(
"12345678876543211234567887654322",
"8765432112345876",
TraceFlags.getDefault(),
TraceState.getDefault()))
.build();
private static final LogData LOG2 =
@ -63,15 +58,12 @@ class OtlpJsonLoggingLogExporterTest {
.setSeverityText("INFO")
.setEpoch(1631533710L, TimeUnit.MILLISECONDS)
.setAttributes(Attributes.of(booleanKey("important"), true))
.setContext(
Context.root()
.with(
Span.wrap(
SpanContext.create(
"12345678876543211234567887654322",
"8765432112345875",
TraceFlags.getDefault(),
TraceState.getDefault()))))
.setSpanContext(
SpanContext.create(
"12345678876543211234567887654322",
"8765432112345875",
TraceFlags.getDefault(),
TraceState.getDefault()))
.build();
@RegisterExtension

View File

@ -11,11 +11,9 @@ import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.logs.data.LogData;
@ -59,15 +57,12 @@ class SystemOutLogExporterTest {
.setBody("message")
.setSeverity(Severity.ERROR3)
.setEpoch(timestamp, TimeUnit.MILLISECONDS)
.setContext(
Context.root()
.with(
Span.wrap(
SpanContext.create(
"00000000000000010000000000000002",
"0000000000000003",
TraceFlags.getDefault(),
TraceState.getDefault()))))
.setSpanContext(
SpanContext.create(
"00000000000000010000000000000002",
"0000000000000003",
TraceFlags.getDefault(),
TraceState.getDefault()))
.build();
}
}

View File

@ -14,13 +14,11 @@ import com.google.protobuf.util.JsonFormat;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.internal.OtelEncodingUtils;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.exporter.otlp.internal.Marshaler;
import io.opentelemetry.proto.common.v1.AnyValue;
import io.opentelemetry.proto.common.v1.InstrumentationLibrary;
@ -63,15 +61,9 @@ class LogsRequestMarshalerTest {
.setBody(BODY)
.setSeverity(Severity.INFO)
.setSeverityText("INFO")
.setContext(
Context.root()
.with(
Span.wrap(
SpanContext.create(
TRACE_ID,
SPAN_ID,
TraceFlags.getDefault(),
TraceState.getDefault()))))
.setSpanContext(
SpanContext.create(
TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault()))
.setAttributes(Attributes.of(AttributeKey.booleanKey("key"), true))
.setEpoch(12345, TimeUnit.NANOSECONDS)
.build()));
@ -103,15 +95,9 @@ class LogsRequestMarshalerTest {
.setBody(BODY)
.setSeverity(Severity.INFO)
.setSeverityText("INFO")
.setContext(
Context.root()
.with(
Span.wrap(
SpanContext.create(
TRACE_ID,
SPAN_ID,
TraceFlags.getDefault(),
TraceState.getDefault()))))
.setSpanContext(
SpanContext.create(
TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault()))
.setAttributes(Attributes.of(AttributeKey.booleanKey("key"), true))
.setEpoch(12345, TimeUnit.NANOSECONDS)
.build()));

View File

@ -25,7 +25,6 @@ import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogExporter;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
@ -386,15 +385,12 @@ abstract class OtlpExporterIntegrationTest {
.setSeverity(Severity.DEBUG)
.setSeverityText("DEBUG")
.setEpoch(Instant.now())
.setContext(
Context.root()
.with(
Span.wrap(
SpanContext.create(
IdGenerator.random().generateTraceId(),
IdGenerator.random().generateSpanId(),
TraceFlags.getDefault(),
TraceState.getDefault()))))
.setSpanContext(
SpanContext.create(
IdGenerator.random().generateTraceId(),
IdGenerator.random().generateSpanId(),
TraceFlags.getDefault(),
TraceState.getDefault()))
.build();
logExporter.export(Collections.singletonList(logData));

View File

@ -62,9 +62,14 @@ public final class LogDataBuilder {
return this;
}
/** Set the context. */
/** Sets the context. */
public LogDataBuilder setContext(Context context) {
this.spanContext = Span.fromContext(context).getSpanContext();
return setSpanContext(Span.fromContext(context).getSpanContext());
}
/** Sets the span context. */
public LogDataBuilder setSpanContext(SpanContext spanContext) {
this.spanContext = spanContext == null ? SpanContext.getInvalid() : spanContext;
return this;
}

View File

@ -6,9 +6,16 @@
package io.opentelemetry.sdk.logs.data;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.common.Clock;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.resources.Resource;
@ -16,10 +23,11 @@ import org.junit.jupiter.api.Test;
class LogDataBuilderTest {
private final Resource resource = Resource.getDefault();
private final InstrumentationLibraryInfo libraryInfo = InstrumentationLibraryInfo.empty();
@Test
void canSetClock() {
Resource resource = Resource.getDefault();
InstrumentationLibraryInfo libraryInfo = InstrumentationLibraryInfo.empty();
Clock clock = mock(Clock.class);
when(clock.now()).thenReturn(12L);
LogDataBuilder builder = LogDataBuilder.create(resource, libraryInfo, clock);
@ -27,4 +35,36 @@ class LogDataBuilderTest {
LogData result = builder.build();
assertEquals(12L, result.getEpochNanos());
}
@Test
void canSetSpanContext() {
LogDataBuilder builder = LogDataBuilder.create(resource, libraryInfo);
SpanContext spanContext = mock(SpanContext.class);
LogData result = builder.setSpanContext(spanContext).build();
assertSame(spanContext, result.getSpanContext());
}
@Test
void setSpanContext_nullSafe() {
LogDataBuilder builder = LogDataBuilder.create(resource, libraryInfo);
LogData result = builder.setSpanContext(null).build();
assertSame(SpanContext.getInvalid(), result.getSpanContext());
}
@Test
void canSetSpanContextFromContext() {
String traceId = "33333333333333333333333333333333";
String spanId = "7777777777777777";
SpanContext spanContext =
SpanContext.create(traceId, spanId, TraceFlags.getSampled(), TraceState.getDefault());
Span span = Span.wrap(spanContext);
Context context = mock(Context.class);
when(context.get(any())).thenReturn(span);
LogDataBuilder builder = LogDataBuilder.create(resource, libraryInfo);
LogData result = builder.setContext(context).build();
assertSame(spanContext, result.getSpanContext());
}
}