Skip to content

Commit 71e192b

Browse files
committed
Polish "Support Otlp Tracing's GRPC port from service connections"
See spring-projectsgh-41333
1 parent 44a5935 commit 71e192b

File tree

8 files changed

+83
-41
lines changed

8 files changed

+83
-41
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/otlp/OtlpProperties.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -99,20 +99,6 @@ public void setHeaders(Map<String, String> headers) {
9999
this.headers = headers;
100100
}
101101

102-
public enum Transport {
103-
104-
/**
105-
* HTTP transport.
106-
*/
107-
HTTP,
108-
109-
/**
110-
* gRPC transport.
111-
*/
112-
GRPC
113-
114-
}
115-
116102
public enum Compression {
117103

118104
/**

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/otlp/OtlpTracingConfigurations.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
2525

2626
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
27-
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpProperties.Transport;
2827
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2928
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3029
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -66,7 +65,7 @@ public String getUrl() {
6665
}
6766

6867
@Override
69-
public String getGrpcEndpoint() {
68+
public String getEndpoint(Transport transport) {
7069
return this.properties.getEndpoint();
7170
}
7271

@@ -86,7 +85,7 @@ static class Exporters {
8685
OtlpHttpSpanExporter otlpHttpSpanExporter(OtlpProperties properties,
8786
OtlpTracingConnectionDetails connectionDetails) {
8887
OtlpHttpSpanExporterBuilder builder = OtlpHttpSpanExporter.builder()
89-
.setEndpoint(resolveEndpoint(properties.getTransport(), connectionDetails))
88+
.setEndpoint(connectionDetails.getEndpoint(properties.getTransport()))
9089
.setTimeout(properties.getTimeout())
9190
.setCompression(properties.getCompression().name().toLowerCase());
9291
for (Entry<String, String> header : properties.getHeaders().entrySet()) {
@@ -100,7 +99,7 @@ OtlpHttpSpanExporter otlpHttpSpanExporter(OtlpProperties properties,
10099
OtlpGrpcSpanExporter otlpGrpcSpanExporter(OtlpProperties properties,
101100
OtlpTracingConnectionDetails connectionDetails) {
102101
OtlpGrpcSpanExporterBuilder builder = OtlpGrpcSpanExporter.builder()
103-
.setEndpoint(resolveEndpoint(properties.getTransport(), connectionDetails))
102+
.setEndpoint(connectionDetails.getEndpoint(properties.getTransport()))
104103
.setTimeout(properties.getTimeout())
105104
.setCompression(properties.getCompression().name().toLowerCase());
106105
for (Entry<String, String> header : properties.getHeaders().entrySet()) {
@@ -109,11 +108,6 @@ OtlpGrpcSpanExporter otlpGrpcSpanExporter(OtlpProperties properties,
109108
return builder.build();
110109
}
111110

112-
private static String resolveEndpoint(OtlpProperties.Transport transport,
113-
OtlpTracingConnectionDetails connectionDetails) {
114-
return (transport == Transport.HTTP) ? connectionDetails.getUrl() : connectionDetails.getGrpcEndpoint();
115-
}
116-
117111
}
118112

119113
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/otlp/OtlpTracingConnectionDetails.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,23 @@
2727
public interface OtlpTracingConnectionDetails extends ConnectionDetails {
2828

2929
/**
30-
* Address to where tracing will be published.
30+
* Address to which tracing will be published using an {@link Transport#HTTP HTTP
31+
* transport}.
3132
* @return the address to where tracing will be published
33+
* @deprecated since 3.4.0 for removal in 3.6.0 in favor of
34+
* {@link #getEndpoint(Transport)}
3235
*/
36+
@Deprecated(since = "3.4.0", forRemoval = true)
3337
String getUrl();
3438

35-
default String getGrpcEndpoint() {
36-
return "http://localhost:4317/v1/traces";
39+
/**
40+
* Endpoint to which tracing will be published for the given {@code transport}.
41+
* @param transport the transport
42+
* @return the endpoint to which tracing will be published
43+
* @since 3.4.0
44+
*/
45+
default String getEndpoint(Transport transport) {
46+
return getUrl();
3747
}
3848

3949
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2012-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.actuate.autoconfigure.tracing.otlp;
18+
19+
/**
20+
* The transport used when communicating with an OpenTelemetry service.
21+
*
22+
* @author Andy Wilkinson
23+
* @since 3.4.0
24+
*/
25+
public enum Transport {
26+
27+
/**
28+
* HTTP transport.
29+
*/
30+
HTTP,
31+
32+
/**
33+
* gRPC transport.
34+
*/
35+
GRPC
36+
37+
}

spring-boot-project/spring-boot-docker-compose/src/dockerTest/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.docker.compose.service.connection.otlp;
1818

1919
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails;
20+
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.Transport;
2021
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
2122
import org.springframework.boot.testsupport.container.TestImage;
2223

@@ -32,8 +33,11 @@ class OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests
3233

3334
@DockerComposeTest(composeFile = "otlp-compose.yaml", image = TestImage.OPENTELEMETRY)
3435
void runCreatesConnectionDetails(OtlpTracingConnectionDetails connectionDetails) {
35-
assertThat(connectionDetails.getGrpcEndpoint()).startsWith("http://").endsWith("/v1/traces");
36-
assertThat(connectionDetails.getUrl()).startsWith("http://").endsWith("/v1/traces");
36+
String grpcEndpoint = connectionDetails.getEndpoint(Transport.GRPC);
37+
String httpEndpoint = connectionDetails.getEndpoint(Transport.HTTP);
38+
assertThat(grpcEndpoint).startsWith("http://").endsWith("/v1/traces");
39+
assertThat(httpEndpoint).startsWith("http://").endsWith("/v1/traces");
40+
assertThat(grpcEndpoint).isNotEqualTo(httpEndpoint);
3741
}
3842

3943
}

spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactory.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.docker.compose.service.connection.otlp;
1818

1919
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails;
20+
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.Transport;
2021
import org.springframework.boot.docker.compose.core.RunningService;
2122
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
2223
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
@@ -51,23 +52,28 @@ private static final class OpenTelemetryTracingDockerComposeConnectionDetails ex
5152

5253
private final int grpcPort;
5354

54-
private final int httPort;
55+
private final int httpPort;
5556

5657
private OpenTelemetryTracingDockerComposeConnectionDetails(RunningService source) {
5758
super(source);
5859
this.host = source.host();
5960
this.grpcPort = source.ports().get(OTLP_GRPC_PORT);
60-
this.httPort = source.ports().get(OTLP_HTTP_PORT);
61+
this.httpPort = source.ports().get(OTLP_HTTP_PORT);
6162
}
6263

6364
@Override
65+
@Deprecated(since = "3.4.0", forRemoval = true)
6466
public String getUrl() {
65-
return "http://%s:%d/v1/traces".formatted(this.host, this.httPort);
67+
return getEndpoint(Transport.HTTP);
6668
}
6769

6870
@Override
69-
public String getGrpcEndpoint() {
70-
return "http://%s:%d/v1/traces".formatted(this.host, this.grpcPort);
71+
public String getEndpoint(Transport transport) {
72+
int port = switch (transport) {
73+
case HTTP -> this.httpPort;
74+
case GRPC -> this.grpcPort;
75+
};
76+
return "http://%s:%d/v1/traces".formatted(this.host, port);
7177
}
7278

7379
}

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/otlp/OpenTelemetryTracingContainerConnectionDetailsFactoryIntegrationTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.beans.factory.annotation.Autowired;
2525
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpAutoConfiguration;
2626
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails;
27+
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.Transport;
2728
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
2829
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
2930
import org.springframework.boot.testsupport.container.TestImage;
@@ -51,9 +52,9 @@ class OpenTelemetryTracingContainerConnectionDetailsFactoryIntegrationTests {
5152

5253
@Test
5354
void connectionCanBeMadeToOpenTelemetryContainer() {
54-
assertThat(this.connectionDetails.getGrpcEndpoint())
55+
assertThat(this.connectionDetails.getEndpoint(Transport.GRPC))
5556
.isEqualTo("http://" + container.getHost() + ":" + container.getMappedPort(4317) + "/v1/traces");
56-
assertThat(this.connectionDetails.getUrl())
57+
assertThat(this.connectionDetails.getEndpoint(Transport.HTTP))
5758
.isEqualTo("http://" + container.getHost() + ":" + container.getMappedPort(4318) + "/v1/traces");
5859
}
5960

spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/otlp/OpenTelemetryTracingContainerConnectionDetailsFactory.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.testcontainers.containers.GenericContainer;
2121

2222
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails;
23+
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.Transport;
2324
import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory;
2425
import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource;
2526
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
@@ -58,15 +59,18 @@ private OpenTelemetryTracingContainerConnectionDetails(ContainerConnectionSource
5859
}
5960

6061
@Override
62+
@Deprecated(since = "3.4.0", forRemoval = true)
6163
public String getUrl() {
62-
return "http://%s:%d/v1/traces".formatted(getContainer().getHost(),
63-
getContainer().getMappedPort(OTLP_HTTP_PORT));
64+
return getEndpoint(Transport.HTTP);
6465
}
6566

6667
@Override
67-
public String getGrpcEndpoint() {
68-
return "http://%s:%d/v1/traces".formatted(getContainer().getHost(),
69-
getContainer().getMappedPort(OTLP_GRPC_PORT));
68+
public String getEndpoint(Transport transport) {
69+
int port = switch (transport) {
70+
case GRPC -> OTLP_GRPC_PORT;
71+
case HTTP -> OTLP_HTTP_PORT;
72+
};
73+
return "http://%s:%d/v1/traces".formatted(getContainer().getHost(), getContainer().getMappedPort(port));
7074
}
7175

7276
}

0 commit comments

Comments
 (0)