You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2023/04/17 20:14:54 UTC
[camel-quarkus] branch main updated: Test OpenTelemetry extension integration with opentelemetry-jdbc
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new de9e01ec3d Test OpenTelemetry extension integration with opentelemetry-jdbc
de9e01ec3d is described below
commit de9e01ec3dd7cd41e47a615674bbb169c140341f
Author: James Netherton <ja...@gmail.com>
AuthorDate: Mon Apr 17 13:54:10 2023 +0100
Test OpenTelemetry extension integration with opentelemetry-jdbc
Fixes #4789
---
integration-tests/opentelemetry/pom.xml | 23 ++++++++++
...enTelemetryResource.java => JdbcQueryBean.java} | 50 +++++++++++-----------
.../opentelemetry/it/OpenTelemetryResource.java | 7 +++
.../it/OpenTelemetryRouteBuilder.java | 3 ++
.../src/main/resources/application.properties | 1 +
.../opentelemetry/it/OpenTelemetryTest.java | 31 ++++++++++++++
6 files changed, 91 insertions(+), 24 deletions(-)
diff --git a/integration-tests/opentelemetry/pom.xml b/integration-tests/opentelemetry/pom.xml
index 643d7c3c90..61723f8db3 100644
--- a/integration-tests/opentelemetry/pom.xml
+++ b/integration-tests/opentelemetry/pom.xml
@@ -59,10 +59,22 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-agroal</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-jdbc-postgresql</artifactId>
+ </dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-testing</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.opentelemetry.instrumentation</groupId>
+ <artifactId>opentelemetry-jdbc</artifactId>
+ </dependency>
<!-- test dependencies -->
<dependency>
@@ -186,6 +198,17 @@
</dependency>
</dependencies>
</profile>
+ <profile>
+ <id>skip-testcontainers-tests</id>
+ <activation>
+ <property>
+ <name>skip-testcontainers-tests</name>
+ </property>
+ </activation>
+ <properties>
+ <skipTests>true</skipTests>
+ </properties>
+ </profile>
</profiles>
</project>
diff --git a/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryResource.java b/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/JdbcQueryBean.java
similarity index 50%
copy from integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryResource.java
copy to integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/JdbcQueryBean.java
index 519a6bbcaa..ead2d1db0d 100644
--- a/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryResource.java
+++ b/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/JdbcQueryBean.java
@@ -16,33 +16,35 @@
*/
package org.apache.camel.quarkus.component.opentelemetry.it;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.PathParam;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
-import org.apache.camel.ProducerTemplate;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
-@Path("/opentelemetry")
-@ApplicationScoped
-public class OpenTelemetryResource {
+import io.agroal.api.AgroalDataSource;
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
+@Singleton
+@Named("jdbcQueryBean")
+@RegisterForReflection(fields = false)
+public class JdbcQueryBean {
@Inject
- ProducerTemplate producerTemplate;
-
- @Path("/trace")
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String traceRoute() {
- return producerTemplate.requestBody("direct:start", null, String.class);
- }
+ AgroalDataSource dataSource;
- @Path("/greet/{name}")
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String traceRoute(@PathParam("name") String name) {
- return producerTemplate.requestBody("direct:greet", name, String.class);
+ public long getNowTimestamp() {
+ try (Connection connection = dataSource.getConnection()) {
+ try (Statement statement = connection.createStatement()) {
+ ResultSet resultSet = statement.executeQuery("SELECT EXTRACT(EPOCH FROM NOW());");
+ if (resultSet.next()) {
+ return resultSet.getLong(1);
+ }
+ return 0;
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
}
}
diff --git a/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryResource.java b/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryResource.java
index 519a6bbcaa..8540e55039 100644
--- a/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryResource.java
+++ b/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryResource.java
@@ -45,4 +45,11 @@ public class OpenTelemetryResource {
public String traceRoute(@PathParam("name") String name) {
return producerTemplate.requestBody("direct:greet", name, String.class);
}
+
+ @Path("/jdbc/query")
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public long jdbcQuery() {
+ return producerTemplate.requestBody("direct:jdbcQuery", null, Long.class);
+ }
}
diff --git a/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryRouteBuilder.java b/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryRouteBuilder.java
index 3c3f7e662b..b414a0df31 100644
--- a/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryRouteBuilder.java
+++ b/integration-tests/opentelemetry/src/main/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryRouteBuilder.java
@@ -38,5 +38,8 @@ public class OpenTelemetryRouteBuilder extends RouteBuilder {
from("timer:filtered?repeatCount=5&delay=-1")
.setBody().constant("Route filtered from tracing");
+
+ from("direct:jdbcQuery")
+ .to("bean:jdbcQueryBean");
}
}
diff --git a/integration-tests/opentelemetry/src/main/resources/application.properties b/integration-tests/opentelemetry/src/main/resources/application.properties
index b227fdc725..7be84ab144 100644
--- a/integration-tests/opentelemetry/src/main/resources/application.properties
+++ b/integration-tests/opentelemetry/src/main/resources/application.properties
@@ -22,3 +22,4 @@
quarkus.camel.opentelemetry.exclude-patterns = timer:filtered*
quarkus.otel.bsp.schedule.delay=1
quarkus.otel.bsp.export.timeout=5s
+quarkus.datasource.jdbc.telemetry=true
diff --git a/integration-tests/opentelemetry/src/test/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryTest.java b/integration-tests/opentelemetry/src/test/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryTest.java
index 36913640a7..ce36394475 100644
--- a/integration-tests/opentelemetry/src/test/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryTest.java
+++ b/integration-tests/opentelemetry/src/test/java/org/apache/camel/quarkus/component/opentelemetry/it/OpenTelemetryTest.java
@@ -101,6 +101,37 @@ class OpenTelemetryTest {
assertEquals(spans.get(1).get("parentId"), spans.get(2).get("spanId"));
}
+ @Test
+ public void testTracedJdbcQuery() {
+ String timestamp = RestAssured.get("/opentelemetry/jdbc/query")
+ .then()
+ .statusCode(200)
+ .extract()
+ .body()
+ .asString();
+
+ assertTrue(Long.parseLong(timestamp) > 0);
+
+ // Verify the span hierarchy is JAX-RS Service -> Direct Endpoint -> Bean Endpoint -> Bean method -> JDBC query
+ await().atMost(30, TimeUnit.SECONDS).pollDelay(50, TimeUnit.MILLISECONDS).until(() -> getSpans().size() == 5);
+ List<Map<String, String>> spans = getSpans();
+ assertEquals(5, spans.size());
+ assertEquals(spans.get(0).get("parentId"), spans.get(1).get("parentId"));
+ assertEquals(spans.get(0).get("code.function"), "getConnection");
+
+ assertEquals(spans.get(1).get("parentId"), spans.get(2).get("spanId"));
+ assertEquals(spans.get(1).get("db.operation"), "SELECT");
+
+ assertEquals(spans.get(2).get("parentId"), spans.get(3).get("spanId"));
+ assertEquals(spans.get(2).get("camel.uri"), "bean://jdbcQueryBean");
+
+ assertEquals(spans.get(3).get("parentId"), spans.get(4).get("spanId"));
+ assertEquals(spans.get(3).get("camel.uri"), "direct://jdbcQuery");
+
+ assertEquals(spans.get(4).get("parentId"), "0000000000000000");
+ assertEquals(spans.get(4).get("code.function"), "jdbcQuery");
+ }
+
private List<Map<String, String>> getSpans() {
return RestAssured.given()
.get("/opentelemetry/exporter/spans")