Create a MANDATORY Resource instance containing mandatory attributes. Merge that into the default resource. (#2366)
* Assign a fallback service name to resources when building the signal Provider instances. * Add a MANDATORY resource that will contain all mandatory attributes. * some cleanups of leftover stuff * make the MANDATORY resource instance private * updates from ResourceAttributes changes * be sure to set the service name in the jaeger tests
This commit is contained in:
parent
7cfcc28f05
commit
1f84ec099b
|
@ -8,11 +8,14 @@ package io.opentelemetry.exporter.jaeger.thrift;
|
|||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
|
||||
import io.opentelemetry.sdk.trace.export.SpanExporter;
|
||||
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
|
||||
import java.time.Duration;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
|
@ -64,6 +67,11 @@ class JaegerThriftIntegrationTest {
|
|||
.setTracerProvider(
|
||||
SdkTracerProvider.builder()
|
||||
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
|
||||
.setResource(
|
||||
Resource.getDefault()
|
||||
.merge(
|
||||
Resource.create(
|
||||
Attributes.of(ResourceAttributes.SERVICE_NAME, SERVICE_NAME))))
|
||||
.build())
|
||||
.build();
|
||||
}
|
||||
|
|
|
@ -10,11 +10,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||
import io.grpc.ManagedChannel;
|
||||
import io.grpc.ManagedChannelBuilder;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
|
||||
import io.opentelemetry.sdk.trace.export.SpanExporter;
|
||||
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
|
||||
import java.time.Duration;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
|
@ -68,6 +71,11 @@ class JaegerIntegrationTest {
|
|||
.setTracerProvider(
|
||||
SdkTracerProvider.builder()
|
||||
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
|
||||
.setResource(
|
||||
Resource.getDefault()
|
||||
.merge(
|
||||
Resource.create(
|
||||
Attributes.of(ResourceAttributes.SERVICE_NAME, SERVICE_NAME))))
|
||||
.build())
|
||||
.build();
|
||||
}
|
||||
|
|
|
@ -8,11 +8,14 @@ package io.opentelemetry;
|
|||
import io.grpc.ManagedChannel;
|
||||
import io.grpc.ManagedChannelBuilder;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter;
|
||||
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
|
||||
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
|
||||
import java.time.Duration;
|
||||
|
||||
public class SendTraceToJaeger {
|
||||
|
@ -42,6 +45,12 @@ public class SendTraceToJaeger {
|
|||
.setTracerProvider(
|
||||
SdkTracerProvider.builder()
|
||||
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
|
||||
.setResource(
|
||||
Resource.getDefault()
|
||||
.merge(
|
||||
Resource.create(
|
||||
Attributes.of(
|
||||
ResourceAttributes.SERVICE_NAME, "integration test"))))
|
||||
.build())
|
||||
.buildAndRegisterGlobal();
|
||||
}
|
||||
|
|
|
@ -144,7 +144,7 @@ class OpenTelemetrySdkTest {
|
|||
.addSpanProcessor(SimpleSpanProcessor.create(mock(SpanExporter.class)))
|
||||
.setClock(mock(Clock.class))
|
||||
.setIdGenerator(mock(IdGenerator.class))
|
||||
.setResource(mock(Resource.class))
|
||||
.setResource(Resource.getEmpty())
|
||||
.setTraceConfig(newConfig)
|
||||
.build());
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
package io.opentelemetry.sdk.resources;
|
||||
|
||||
import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.SERVICE_NAME;
|
||||
import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.TELEMETRY_SDK_LANGUAGE;
|
||||
import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.TELEMETRY_SDK_NAME;
|
||||
import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.TELEMETRY_SDK_VERSION;
|
||||
|
@ -52,9 +53,15 @@ public abstract class Resource {
|
|||
private static final String ERROR_MESSAGE_INVALID_VALUE =
|
||||
" should be a ASCII string with a length not exceed " + MAX_LENGTH + " characters.";
|
||||
private static final Resource EMPTY = create(Attributes.empty());
|
||||
|
||||
private static final Resource TELEMETRY_SDK;
|
||||
|
||||
/**
|
||||
* The MANDATORY Resource instance contains the mandatory attributes that must be used if they are
|
||||
* not provided by the Resource that is given to an SDK signal provider.
|
||||
*/
|
||||
private static final Resource MANDATORY =
|
||||
create(Attributes.of(SERVICE_NAME, "unknown_service:java"));
|
||||
|
||||
static {
|
||||
TELEMETRY_SDK =
|
||||
create(
|
||||
|
@ -65,7 +72,8 @@ public abstract class Resource {
|
|||
.build());
|
||||
}
|
||||
|
||||
private static final Resource DEFAULT = TELEMETRY_SDK.merge(readResourceFromProviders());
|
||||
private static final Resource DEFAULT =
|
||||
MANDATORY.merge(TELEMETRY_SDK.merge(readResourceFromProviders()));
|
||||
|
||||
@Nullable
|
||||
private static String readVersion() {
|
||||
|
|
|
@ -8,6 +8,7 @@ package io.opentelemetry.sdk.metrics;
|
|||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import io.opentelemetry.api.metrics.GlobalMetricsProvider;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class SdkMeterProviderBuilderTest {
|
||||
|
@ -21,4 +22,13 @@ class SdkMeterProviderBuilderTest {
|
|||
GlobalMetricsProvider.set(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void defaultResource() {
|
||||
SdkMeterProvider meterProvider = SdkMeterProvider.builder().build();
|
||||
|
||||
assertThat(meterProvider)
|
||||
.extracting("sharedState")
|
||||
.hasFieldOrPropertyWithValue("resource", Resource.getDefault());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ class SdkMeterRegistryTest {
|
|||
assertThat(
|
||||
SdkMeterProvider.builder()
|
||||
.setClock(mock(Clock.class))
|
||||
.setResource(mock(Resource.class))
|
||||
.setResource(Resource.getEmpty())
|
||||
.build())
|
||||
.isNotNull();
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.Tracer;
|
||||
import io.opentelemetry.sdk.common.Clock;
|
||||
|
@ -17,6 +18,7 @@ import io.opentelemetry.sdk.common.CompletableResultCode;
|
|||
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
|
||||
import java.util.function.Supplier;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
@ -42,15 +44,39 @@ class SdkTracerProviderTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
void builder_HappyPath() {
|
||||
assertThat(
|
||||
SdkTracerProvider.builder()
|
||||
.setClock(mock(Clock.class))
|
||||
.setResource(mock(Resource.class))
|
||||
.setIdGenerator(mock(IdGenerator.class))
|
||||
.setTraceConfig(mock(TraceConfig.class))
|
||||
.build())
|
||||
.isNotNull();
|
||||
void builder_defaultResource() {
|
||||
Resource resourceWithDefaults = Resource.getDefault();
|
||||
|
||||
SdkTracerProvider tracerProvider =
|
||||
SdkTracerProvider.builder()
|
||||
.setClock(mock(Clock.class))
|
||||
.setIdGenerator(mock(IdGenerator.class))
|
||||
.setTraceConfig(mock(TraceConfig.class))
|
||||
.build();
|
||||
|
||||
assertThat(tracerProvider).isNotNull();
|
||||
assertThat(tracerProvider)
|
||||
.extracting("sharedState")
|
||||
.hasFieldOrPropertyWithValue("resource", resourceWithDefaults);
|
||||
}
|
||||
|
||||
@Test
|
||||
void builder_serviceNameProvided() {
|
||||
Resource resource =
|
||||
Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, "mySpecialService"));
|
||||
|
||||
SdkTracerProvider tracerProvider =
|
||||
SdkTracerProvider.builder()
|
||||
.setClock(mock(Clock.class))
|
||||
.setResource(resource)
|
||||
.setIdGenerator(mock(IdGenerator.class))
|
||||
.setTraceConfig(mock(TraceConfig.class))
|
||||
.build();
|
||||
|
||||
assertThat(tracerProvider).isNotNull();
|
||||
assertThat(tracerProvider)
|
||||
.extracting("sharedState")
|
||||
.hasFieldOrPropertyWithValue("resource", resource);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue