Skip to content

Commit 126c7cf

Browse files
committed
initial prototype of EntityProvider
1 parent abfcb41 commit 126c7cf

File tree

19 files changed

+216
-90
lines changed

19 files changed

+216
-90
lines changed

api/incubator/src/test/java/io/opentelemetry/api/incubator/trace/ExtendedTraceApiUsageTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import io.opentelemetry.context.Context;
2121
import io.opentelemetry.context.propagation.ContextPropagators;
2222
import io.opentelemetry.context.propagation.TextMapPropagator;
23-
import io.opentelemetry.sdk.resources.Resource;
23+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
2424
import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
2525
import io.opentelemetry.sdk.trace.IdGenerator;
2626
import io.opentelemetry.sdk.trace.SdkTracerProvider;
@@ -44,7 +44,7 @@ void tracerEnabled() {
4444
SdkTracerProviderBuilder tracerProviderBuilder =
4545
SdkTracerProvider.builder()
4646
// Default resource used for demonstration purposes
47-
.setResource(Resource.getDefault())
47+
.setEntityProvider(SdkEntityProvider.getDefault())
4848
// In-memory exporter used for demonstration purposes
4949
.addSpanProcessor(SimpleSpanProcessor.create(exporter));
5050
// Disable tracerB
@@ -99,7 +99,7 @@ void setParentFrom() {
9999
SdkTracerProvider tracerProvider =
100100
SdkTracerProvider.builder()
101101
// Default resource used for demonstration purposes
102-
.setResource(Resource.getDefault())
102+
.setEntityProvider(SdkEntityProvider.getDefault())
103103
// SimpleSpanProcessor with InMemorySpanExporter used for demonstration purposes
104104
.addSpanProcessor(SimpleSpanProcessor.create(spanExporter))
105105
.build();
@@ -159,7 +159,7 @@ void startAndCallOrRun() {
159159
SdkTracerProvider tracerProvider =
160160
SdkTracerProvider.builder()
161161
// Default resource used for demonstration purposes
162-
.setResource(Resource.getDefault())
162+
.setEntityProvider(SdkEntityProvider.getDefault())
163163
// SimpleSpanProcessor with InMemorySpanExporter used for demonstration purposes
164164
.addSpanProcessor(SimpleSpanProcessor.create(spanExporter))
165165
.build();

exporters/otlp/all/src/testSpanPipeline/java/io/opentelemetry/exporter/otlp/trace/SpanPipelineOtlpBenchmark.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.exporter.otlp.trace;
77

8+
import static java.util.Collections.singletonList;
9+
810
import com.linecorp.armeria.server.ServerBuilder;
911
import com.linecorp.armeria.server.ServiceRequestContext;
1012
import com.linecorp.armeria.server.grpc.protocol.AbstractUnaryGrpcService;
@@ -15,6 +17,9 @@
1517
import io.opentelemetry.api.trace.Tracer;
1618
import io.opentelemetry.context.Scope;
1719
import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse;
20+
import io.opentelemetry.sdk.entities.Entity;
21+
import io.opentelemetry.sdk.entities.EntityProvider;
22+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
1823
import io.opentelemetry.sdk.resources.Resource;
1924
import io.opentelemetry.sdk.trace.SdkTracerProvider;
2025
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
@@ -75,9 +80,10 @@ protected CompletionStage<byte[]> handleMessage(
7580

7681
@BeforeEach
7782
public void setUp() {
83+
EntityProvider entityProvider = new SdkEntityProvider(singletonList(Entity.create(RESOURCE)));
7884
tracerProvider =
7985
SdkTracerProvider.builder()
80-
.setResource(RESOURCE)
86+
.setEntityProvider(entityProvider)
8187
.addSpanProcessor(
8288
BatchSpanProcessor.builder(
8389
OtlpGrpcSpanExporter.builder()

integration-tests/otlp/src/main/java/io/opentelemetry/integrationtest/OtlpExporterIntegrationTest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.integrationtest;
77

88
import static io.opentelemetry.api.common.Value.of;
9+
import static java.util.Collections.singletonList;
910
import static java.util.concurrent.CompletableFuture.completedFuture;
1011
import static org.assertj.core.api.Assertions.assertThat;
1112
import static org.awaitility.Awaitility.await;
@@ -62,6 +63,9 @@
6263
import io.opentelemetry.proto.trace.v1.ScopeSpans;
6364
import io.opentelemetry.proto.trace.v1.Span.Link;
6465
import io.opentelemetry.sdk.common.export.MemoryMode;
66+
import io.opentelemetry.sdk.entities.Entity;
67+
import io.opentelemetry.sdk.entities.EntityProvider;
68+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
6569
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
6670
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
6771
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
@@ -80,7 +84,6 @@
8084
import java.nio.charset.StandardCharsets;
8185
import java.time.Duration;
8286
import java.util.ArrayList;
83-
import java.util.Collections;
8487
import java.util.List;
8588
import java.util.concurrent.CompletionStage;
8689
import java.util.concurrent.TimeUnit;
@@ -291,10 +294,12 @@ void testOtlpHttpTraceExport_mtls() throws Exception {
291294
}
292295

293296
private static void testTraceExport(SpanExporter spanExporter) {
297+
298+
EntityProvider entityProvider = new SdkEntityProvider(singletonList(Entity.create(RESOURCE)));
294299
SdkTracerProvider tracerProvider =
295300
SdkTracerProvider.builder()
296301
.addSpanProcessor(SimpleSpanProcessor.create(spanExporter))
297-
.setResource(RESOURCE)
302+
.setEntityProvider(entityProvider)
298303
.build();
299304

300305
SpanContext linkContext =
@@ -344,7 +349,7 @@ private static void testTraceExport(SpanExporter spanExporter) {
344349
assertThat(protoSpan.getName()).isEqualTo("my span name");
345350
assertThat(protoSpan.getAttributesList())
346351
.isEqualTo(
347-
Collections.singletonList(
352+
singletonList(
348353
io.opentelemetry.proto.common.v1.KeyValue.newBuilder()
349354
.setKey("key")
350355
.setValue(AnyValue.newBuilder().setStringValue("value").build())
@@ -515,7 +520,7 @@ private static void testMetricExport(MetricExporter metricExporter) {
515520
assertThat(dataPoint.getAsInt()).isEqualTo(100);
516521
assertThat(dataPoint.getAttributesList())
517522
.isEqualTo(
518-
Collections.singletonList(
523+
singletonList(
519524
io.opentelemetry.proto.common.v1.KeyValue.newBuilder()
520525
.setKey("key")
521526
.setValue(AnyValue.newBuilder().setStringValue("value").build())
@@ -792,7 +797,7 @@ private static void testLogRecordExporter(LogRecordExporter logRecordExporter) {
792797
.build());
793798
assertThat(protoLog1.getAttributesList())
794799
.isEqualTo(
795-
Collections.singletonList(
800+
singletonList(
796801
io.opentelemetry.proto.common.v1.KeyValue.newBuilder()
797802
.setKey("key")
798803
.setValue(AnyValue.newBuilder().setStringValue("value").build())

sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.sdk.autoconfigure;
77

8+
import static java.util.Collections.singletonList;
89
import static java.util.Objects.requireNonNull;
910

1011
import io.opentelemetry.api.GlobalOpenTelemetry;
@@ -20,6 +21,9 @@
2021
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
2122
import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener;
2223
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
24+
import io.opentelemetry.sdk.entities.Entity;
25+
import io.opentelemetry.sdk.entities.EntityProvider;
26+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
2327
import io.opentelemetry.sdk.logs.LogRecordProcessor;
2428
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
2529
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
@@ -512,7 +516,8 @@ void configureSdk(
512516
closeables.add(meterProvider);
513517

514518
SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider.builder();
515-
tracerProviderBuilder.setResource(resource);
519+
EntityProvider entityProvider = new SdkEntityProvider(singletonList(Entity.create(resource)));
520+
tracerProviderBuilder.setEntityProvider(entityProvider);
516521
TracerProviderConfiguration.configureTracerProvider(
517522
tracerProviderBuilder,
518523
config,

sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.sdk.autoconfigure;
77

88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
9+
import static java.util.Collections.singletonList;
910
import static java.util.Collections.singletonMap;
1011
import static org.assertj.core.api.Assertions.assertThat;
1112
import static org.assertj.core.api.Assertions.assertThatCode;
@@ -43,6 +44,8 @@
4344
import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener;
4445
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
4546
import io.opentelemetry.sdk.common.CompletableResultCode;
47+
import io.opentelemetry.sdk.entities.Entity;
48+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
4649
import io.opentelemetry.sdk.logs.LogRecordProcessor;
4750
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
4851
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
@@ -504,7 +507,9 @@ void tracerProviderCustomizer() {
504507
AutoConfiguredOpenTelemetrySdk.builder()
505508
.addTracerProviderCustomizer(
506509
(tracerProviderBuilder, config) -> {
507-
tracerProviderBuilder.setResource(Resource.builder().put("cat", "meow").build());
510+
Entity entity = Entity.create(Resource.builder().put("cat", "meow").build());
511+
tracerProviderBuilder.setEntityProvider(
512+
new SdkEntityProvider(singletonList(entity)));
508513
return tracerProviderBuilder.addSpanProcessor(
509514
SimpleSpanProcessor.create(spanExporter));
510515
})

sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.sdk.autoconfigure;
77

88
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
9+
import static java.util.Collections.singletonList;
910
import static java.util.Collections.singletonMap;
1011
import static org.assertj.core.api.Assertions.assertThatCode;
1112
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -31,6 +32,8 @@
3132
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
3233
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
3334
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
35+
import io.opentelemetry.sdk.entities.Entity;
36+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
3437
import io.opentelemetry.sdk.resources.Resource;
3538
import io.opentelemetry.sdk.trace.SdkTracerProvider;
3639
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
@@ -120,8 +123,13 @@ void configFile_Valid() {
120123
OpenTelemetrySdk.builder()
121124
.setTracerProvider(
122125
SdkTracerProvider.builder()
123-
.setResource(
124-
Resource.getDefault().toBuilder().put("service.name", "test").build())
126+
.setEntityProvider(
127+
new SdkEntityProvider(
128+
singletonList(
129+
Entity.create(
130+
Resource.getDefault().toBuilder()
131+
.put("service.name", "test")
132+
.build()))))
125133
.addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create()))
126134
.build())
127135
.build();

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55

66
package io.opentelemetry.sdk.extension.incubator.fileconfig;
77

8+
import static java.util.Collections.singletonList;
9+
810
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
911
import io.opentelemetry.sdk.OpenTelemetrySdk;
1012
import io.opentelemetry.sdk.OpenTelemetrySdkBuilder;
13+
import io.opentelemetry.sdk.entities.Entity;
14+
import io.opentelemetry.sdk.entities.EntityProvider;
15+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
1116
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
1217
import io.opentelemetry.sdk.resources.Resource;
1318
import java.util.Objects;
@@ -62,14 +67,15 @@ public OpenTelemetrySdk create(
6267
}
6368

6469
if (model.getTracerProvider() != null) {
70+
EntityProvider entityProvider = new SdkEntityProvider(singletonList(Entity.create(resource)));
6571
builder.setTracerProvider(
6672
context.addCloseable(
6773
TracerProviderFactory.getInstance()
6874
.create(
6975
TracerProviderAndAttributeLimits.create(
7076
model.getAttributeLimits(), model.getTracerProvider()),
7177
context)
72-
.setResource(resource)
78+
.setEntityProvider(entityProvider)
7379
.build()));
7480
}
7581

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import io.opentelemetry.internal.testing.CleanupExtension;
2424
import io.opentelemetry.sdk.OpenTelemetrySdk;
2525
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
26+
import io.opentelemetry.sdk.entities.Entity;
27+
import io.opentelemetry.sdk.entities.EntityProvider;
28+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
2629
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AlwaysOnSamplerModel;
2730
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeNameValueModel;
2831
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel;
@@ -149,6 +152,8 @@ void create_Configured() {
149152
.put("shape", "square")
150153
.put("order", "second")
151154
.build();
155+
EntityProvider entityProvider =
156+
new SdkEntityProvider(Collections.singletonList(Entity.create(expectedResource)));
152157
OpenTelemetrySdk expectedSdk =
153158
OpenTelemetrySdk.builder()
154159
.setPropagators(
@@ -176,7 +181,7 @@ void create_Configured() {
176181
.build())
177182
.setTracerProvider(
178183
SdkTracerProvider.builder()
179-
.setResource(expectedResource)
184+
.setEntityProvider(entityProvider)
180185
.setSpanLimits(
181186
SpanLimits.builder()
182187
.setMaxNumberOfAttributes(1)

sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
import io.opentelemetry.context.propagation.TextMapPropagator;
2323
import io.opentelemetry.sdk.common.Clock;
2424
import io.opentelemetry.sdk.common.CompletableResultCode;
25+
import io.opentelemetry.sdk.entities.Entity;
26+
import io.opentelemetry.sdk.entities.EntityProvider;
27+
import io.opentelemetry.sdk.entities.SdkEntityProvider;
2528
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
2629
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
2730
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
@@ -40,6 +43,8 @@
4043
import io.opentelemetry.sdk.trace.export.SpanExporter;
4144
import io.opentelemetry.sdk.trace.samplers.Sampler;
4245
import java.time.Duration;
46+
import java.util.Collections;
47+
import java.util.List;
4348
import java.util.concurrent.TimeUnit;
4449
import org.junit.jupiter.api.AfterEach;
4550
import org.junit.jupiter.api.Test;
@@ -269,7 +274,7 @@ void fullOpenTelemetrySdkConfigurationDemo() {
269274
.addSpanProcessor(SimpleSpanProcessor.create(mock(SpanExporter.class)))
270275
.setClock(mock(Clock.class))
271276
.setIdGenerator(mock(IdGenerator.class))
272-
.setResource(Resource.empty())
277+
.setEntityProvider(SdkEntityProvider.empty())
273278
.setSpanLimits(SpanLimits.builder().setMaxNumberOfAttributes(512).build())
274279
.build())
275280
.setPropagators(ContextPropagators.create(mock(TextMapPropagator.class)))
@@ -379,11 +384,13 @@ void stringRepresentation() {
379384
when(propagator.toString()).thenReturn("MockTextMapPropagator{}");
380385
Resource resource =
381386
Resource.builder().put(AttributeKey.stringKey("service.name"), "otel-test").build();
387+
List<Entity> entities = Collections.singletonList(Entity.create(resource));
388+
EntityProvider entityProvider = new SdkEntityProvider(entities);
382389
OpenTelemetrySdk sdk =
383390
OpenTelemetrySdk.builder()
384391
.setTracerProvider(
385392
SdkTracerProvider.builder()
386-
.setResource(resource)
393+
.setEntityProvider(entityProvider)
387394
.addSpanProcessor(
388395
SimpleSpanProcessor.create(
389396
SpanExporter.composite(spanExporter, spanExporter)))
Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,31 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
16
package io.opentelemetry.sdk.entities;
27

38
import com.google.auto.value.AutoValue;
49
import io.opentelemetry.api.common.Attributes;
10+
import io.opentelemetry.sdk.resources.Resource;
511
import javax.annotation.concurrent.Immutable;
612

713
@Immutable
814
@AutoValue
9-
abstract public class Entity {
15+
public abstract class Entity {
1016

1117
public static Entity create(String id, String name, Attributes attributes) {
1218
return new AutoValue_Entity(id, name, attributes);
1319
}
1420

21+
public static Entity create(Resource resource) {
22+
// TODO: We didn't have an id/name, so we just use the hashCode() and this feels hacky
23+
return create(
24+
String.valueOf(resource.hashCode()),
25+
String.valueOf(resource.hashCode()),
26+
resource.getAttributes());
27+
}
28+
1529
public abstract String getId();
1630

1731
public abstract String getName();
@@ -21,5 +35,4 @@ public static Entity create(String id, String name, Attributes attributes) {
2135
public Entity withAttributes(Attributes newAttributes) {
2236
return new AutoValue_Entity(getId(), getName(), newAttributes);
2337
}
24-
2538
}

0 commit comments

Comments
 (0)