Skip to content

Commit 149ffbd

Browse files
committed
Added server.* attributes
1 parent 0bfa4f4 commit 149ffbd

File tree

12 files changed

+88
-15
lines changed

12 files changed

+88
-15
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.opentelemetry.exporter.internal;
2+
3+
import io.opentelemetry.api.common.Attributes;
4+
import io.opentelemetry.api.common.AttributesBuilder;
5+
import io.opentelemetry.sdk.internal.SemConvAttributes;
6+
import java.net.URI;
7+
import java.net.URISyntaxException;
8+
9+
/**
10+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
11+
* any time.
12+
*/
13+
public class ServerAttributesUtil {
14+
15+
private ServerAttributesUtil() {}
16+
17+
public static Attributes extractServerAttributes(URI parsed) {
18+
AttributesBuilder builder = Attributes.builder();
19+
String host = parsed.getHost();
20+
if (host != null) {
21+
builder.put(SemConvAttributes.SERVER_ADDRESS, host);
22+
}
23+
int port = parsed.getPort();
24+
if (port == -1) {
25+
String scheme = parsed.getScheme();
26+
if ("https".equals(scheme)) {
27+
port = 443;
28+
} else if ("http".equals(scheme)) {
29+
port = 80;
30+
}
31+
}
32+
if (port != -1) {
33+
builder.put(SemConvAttributes.SERVER_PORT, port);
34+
}
35+
return builder.build();
36+
}
37+
38+
public static Attributes extractServerAttributes(String httpEndpoint) {
39+
try {
40+
URI parsed = new URI(httpEndpoint);
41+
return extractServerAttributes(parsed);
42+
} catch (URISyntaxException e) {
43+
return Attributes.empty();
44+
}
45+
}
46+
}

exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.exporter.internal.grpc.GrpcExporterUtil.GRPC_STATUS_UNAVAILABLE;
99
import static io.opentelemetry.exporter.internal.grpc.GrpcExporterUtil.GRPC_STATUS_UNIMPLEMENTED;
1010

11+
import io.opentelemetry.api.common.Attributes;
1112
import io.opentelemetry.api.metrics.MeterProvider;
1213
import io.opentelemetry.exporter.internal.ExporterMetrics;
1314
import io.opentelemetry.exporter.internal.ExporterMetricsAdapter;
@@ -49,17 +50,17 @@ public GrpcExporter(
4950
GrpcSender<T> grpcSender,
5051
HealthMetricLevel healthMetricLevel,
5152
ComponentId componentId,
52-
Supplier<MeterProvider> meterProviderSupplier) {
53+
Supplier<MeterProvider> meterProviderSupplier,
54+
Attributes healthMetricAttributes) {
5355
this.type = type.toString();
5456
this.grpcSender = grpcSender;
55-
// TODO: add a way of extracting the server.address and server.port attributes from GrpcSender
5657
this.exporterMetrics =
5758
new ExporterMetricsAdapter(
5859
healthMetricLevel,
5960
meterProviderSupplier,
6061
type,
6162
componentId,
62-
null,
63+
healthMetricAttributes,
6364
legacyExporterName,
6465
"grpc");
6566
}

exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.opentelemetry.api.metrics.MeterProvider;
1313
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
1414
import io.opentelemetry.exporter.internal.ExporterMetrics;
15+
import io.opentelemetry.exporter.internal.ServerAttributesUtil;
1516
import io.opentelemetry.exporter.internal.TlsConfigHelper;
1617
import io.opentelemetry.exporter.internal.compression.Compressor;
1718
import io.opentelemetry.exporter.internal.marshal.Marshaler;
@@ -248,7 +249,8 @@ public GrpcExporter<T> build() {
248249
grpcSender,
249250
healthMetricLevel,
250251
ComponentId.generateLazy(componentType),
251-
meterProviderSupplier);
252+
meterProviderSupplier,
253+
ServerAttributesUtil.extractServerAttributes(endpoint));
252254
}
253255

254256
public String toString(boolean includePrefixAndSuffix) {

exporters/common/src/main/java/io/opentelemetry/exporter/internal/http/HttpExporter.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.exporter.internal.http;
77

8+
import io.opentelemetry.api.common.Attributes;
89
import io.opentelemetry.api.metrics.MeterProvider;
910
import io.opentelemetry.exporter.internal.ExporterMetrics;
1011
import io.opentelemetry.exporter.internal.ExporterMetricsAdapter;
@@ -47,7 +48,8 @@ public HttpExporter(
4748
HttpSender httpSender,
4849
Supplier<MeterProvider> meterProviderSupplier,
4950
HealthMetricLevel healthMetricLevel,
50-
boolean exportAsJson) {
51+
boolean exportAsJson,
52+
Attributes healthMetricAttributes) {
5153
this.type = type.toString();
5254
this.httpSender = httpSender;
5355
// TODO: extract server.address and server.port here
@@ -57,7 +59,7 @@ public HttpExporter(
5759
meterProviderSupplier,
5860
type,
5961
componentId,
60-
null,
62+
healthMetricAttributes,
6163
legacyExporterName,
6264
exportAsJson ? "http-json" : "http");
6365
}

exporters/common/src/main/java/io/opentelemetry/exporter/internal/http/HttpExporterBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.opentelemetry.api.metrics.MeterProvider;
1111
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
1212
import io.opentelemetry.exporter.internal.ExporterMetrics;
13+
import io.opentelemetry.exporter.internal.ServerAttributesUtil;
1314
import io.opentelemetry.exporter.internal.TlsConfigHelper;
1415
import io.opentelemetry.exporter.internal.compression.Compressor;
1516
import io.opentelemetry.exporter.internal.marshal.Marshaler;
@@ -238,7 +239,8 @@ public HttpExporter<T> build() {
238239
httpSender,
239240
meterProviderSupplier,
240241
healthMetricLevel,
241-
exportAsJson);
242+
exportAsJson,
243+
ServerAttributesUtil.extractServerAttributes(endpoint));
242244
}
243245

244246
public String toString(boolean includePrefixAndSuffix) {

exporters/common/src/test/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ void testHealthMetrics(ExporterMetrics.Signal signal) {
8181
Attributes.builder()
8282
.put(SemConvAttributes.OTEL_COMPONENT_TYPE, "test_exporter")
8383
.put(SemConvAttributes.OTEL_COMPONENT_NAME, id.getComponentName())
84+
.put("foo", "bar")
8485
.build();
8586

8687
GrpcSender<Marshaler> mockSender = Mockito.mock(GrpcSender.class);
@@ -93,7 +94,8 @@ void testHealthMetrics(ExporterMetrics.Signal signal) {
9394
mockSender,
9495
HealthMetricLevel.ON,
9596
id,
96-
() -> meterProvider
97+
() -> meterProvider,
98+
Attributes.builder().put("foo", "bar").build()
9799
);
98100

99101
doAnswer(
@@ -221,7 +223,8 @@ void testHealthMetricsDisabled() {
221223
mockSender,
222224
HealthMetricLevel.OFF,
223225
id,
224-
() -> meterProvider
226+
() -> meterProvider,
227+
Attributes.empty()
225228
);
226229

227230
doAnswer(

exporters/common/src/test/java/io/opentelemetry/exporter/internal/http/HttpExporterTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ void testHealthMetrics(ExporterMetrics.Signal signal) {
7373
Attributes.builder()
7474
.put(SemConvAttributes.OTEL_COMPONENT_TYPE, "test_exporter")
7575
.put(SemConvAttributes.OTEL_COMPONENT_NAME, id.getComponentName())
76+
.put("foo", "bar")
7677
.build();
7778

7879
HttpSender mockSender = Mockito.mock(HttpSender.class);
@@ -86,7 +87,8 @@ void testHealthMetrics(ExporterMetrics.Signal signal) {
8687
mockSender,
8788
() -> meterProvider,
8889
HealthMetricLevel.ON,
89-
false);
90+
false,
91+
Attributes.builder().put("foo", "bar").build());
9092

9193
doAnswer(
9294
invoc -> {
@@ -213,7 +215,8 @@ void testHealthMetricsDisabled() {
213215
mockSender,
214216
() -> meterProvider,
215217
HealthMetricLevel.OFF,
216-
false);
218+
false,
219+
Attributes.empty());
217220

218221
doAnswer(
219222
invoc -> {

exporters/otlp/all/src/jmh/java/io/opentelemetry/exporter/otlp/trace/OltpExporterBenchmark.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.grpc.ManagedChannel;
1212
import io.grpc.ManagedChannelBuilder;
1313
import io.grpc.stub.StreamObserver;
14+
import io.opentelemetry.api.common.Attributes;
1415
import io.opentelemetry.api.metrics.MeterProvider;
1516
import io.opentelemetry.exporter.internal.ExporterMetrics;
1617
import io.opentelemetry.exporter.internal.grpc.GrpcExporter;
@@ -95,7 +96,8 @@ public void setUp() {
9596
null),
9697
HealthMetricLevel.OFF,
9798
ComponentId.generateLazy("upstream_grpc_exporter"),
98-
MeterProvider::noop);
99+
MeterProvider::noop,
100+
Attributes.empty());
99101

100102
okhttpGrpcSender =
101103
new GrpcExporter<>(
@@ -115,7 +117,8 @@ public void setUp() {
115117
null),
116118
HealthMetricLevel.OFF,
117119
ComponentId.generateLazy("okhttp_grpc_exporter"),
118-
MeterProvider::noop);
120+
MeterProvider::noop,
121+
Attributes.empty());
119122

120123
httpExporter =
121124
new HttpExporterBuilder<TraceRequestMarshaler>(

exporters/zipkin/src/main/java/io/opentelemetry/exporter/zipkin/ZipkinSpanExporter.java

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

66
package io.opentelemetry.exporter.zipkin;
77

8+
import io.opentelemetry.api.common.Attributes;
89
import io.opentelemetry.api.internal.InstrumentationUtil;
910
import io.opentelemetry.api.metrics.MeterProvider;
1011
import io.opentelemetry.exporter.internal.ExporterMetrics;
@@ -54,6 +55,7 @@ public final class ZipkinSpanExporter implements SpanExporter {
5455
BytesMessageSender sender,
5556
Supplier<MeterProvider> meterProviderSupplier,
5657
HealthMetricLevel healthMetricLevel,
58+
Attributes additonalHealthAttributes,
5759
OtelToZipkinSpanTransformer transformer) {
5860
this.builder = builder;
5961
this.encoder = encoder;
@@ -76,7 +78,7 @@ public final class ZipkinSpanExporter implements SpanExporter {
7678
meterProviderSupplier,
7779
ExporterMetrics.Signal.SPAN,
7880
ComponentId.generateLazy(componentType),
79-
null,
81+
additonalHealthAttributes,
8082
"zipkin",
8183
transportName);
8284
}

exporters/zipkin/src/main/java/io/opentelemetry/exporter/zipkin/ZipkinSpanExporterBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import io.opentelemetry.api.GlobalOpenTelemetry;
1212
import io.opentelemetry.api.metrics.MeterProvider;
13+
import io.opentelemetry.exporter.internal.ServerAttributesUtil;
1314
import io.opentelemetry.sdk.common.HealthMetricLevel;
1415
import java.net.InetAddress;
1516
import java.time.Duration;
@@ -234,6 +235,7 @@ public ZipkinSpanExporter build() {
234235
OtelToZipkinSpanTransformer transformer =
235236
OtelToZipkinSpanTransformer.create(localIpAddressSupplier);
236237
return new ZipkinSpanExporter(
237-
this, encoder, sender, meterProviderSupplier, healthMetricLevel, transformer);
238+
this, encoder, sender, meterProviderSupplier, healthMetricLevel, ServerAttributesUtil.extractServerAttributes(endpoint),
239+
transformer);
238240
}
239241
}

0 commit comments

Comments
 (0)