diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/build.gradle b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/build.gradle index 222285d1b8e..0a8136a7ea0 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/build.gradle +++ b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/build.gradle @@ -8,11 +8,6 @@ muzzle { versions = '[3.9.0,4)' assertInverse = true } - fail { - group = 'io.vertx' - module = 'vertx-pg-client' - versions = '[,]' - } } addTestSuiteForDir('latestDepTest', 'test') @@ -28,6 +23,7 @@ dependencies { compileOnly group: 'io.vertx', name: 'vertx-mysql-client', version: '3.9.0' testImplementation group: 'io.vertx', name: 'vertx-mysql-client', version: '3.9.0' + testRuntimeOnly project(':dd-java-agent:instrumentation:vertx-sql-client-3.9') // This is needed for the test container to start testImplementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.23' diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/CursorReadAdvice.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/CursorReadAdvice.java deleted file mode 100644 index a02e7f8fb3f..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/CursorReadAdvice.java +++ /dev/null @@ -1,56 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.captureSpan; -import static datadog.trace.instrumentation.vertx_sql_client.VertxSqlClientDecorator.DECORATE; - -import datadog.trace.api.Pair; -import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; -import io.vertx.mysqlclient.MySQLConnection; -import io.vertx.sqlclient.PreparedStatement; -import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.RowSet; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.implementation.bytecode.assign.Assigner; - -public class CursorReadAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) - public static AgentScope beforeRead( - @Advice.Argument(value = 1, readOnly = false) Handler>> handler, - @Advice.FieldValue(value = "ps", typing = Assigner.Typing.DYNAMIC) - final PreparedStatement ps) { - if (handler instanceof QueryResultHandlerWrapper) { - return null; - } - final AgentSpan parentSpan = activeSpan(); - final AgentScope.Continuation parentContinuation = - null == parentSpan ? null : captureSpan(parentSpan); - final AgentSpan clientSpan = - DECORATE.startAndDecorateSpanForStatement( - ps, InstrumentationContext.get(PreparedStatement.class, Pair.class), true); - if (null == clientSpan) { - return null; - } - handler = new QueryResultHandlerWrapper<>(handler, clientSpan, parentContinuation); - - return activateSpan(clientSpan, true); - } - - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void afterRead( - @Advice.Thrown final Throwable throwable, @Advice.Enter final AgentScope clientScope) { - if (null != clientScope) { - clientScope.close(); - } - } - - // Limit ourselves to 3.9.x and MySQL by checking for this method that was removed in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.close(); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PrepareHandlerWrapper.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PrepareHandlerWrapper.java deleted file mode 100644 index 4d604798271..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PrepareHandlerWrapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import datadog.trace.api.Pair; -import datadog.trace.bootstrap.ContextStore; -import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; -import datadog.trace.bootstrap.instrumentation.jdbc.DBQueryInfo; -import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; -import io.vertx.sqlclient.PreparedStatement; - -public class PrepareHandlerWrapper implements Handler> { - private final Handler> handler; - private final ContextStore contextStore; - private final Pair queryInfo; - - public PrepareHandlerWrapper( - Handler> handler, - ContextStore contextStore, - Pair queryInfo) { - this.handler = handler; - this.contextStore = contextStore; - this.queryInfo = queryInfo; - } - - @Override - public void handle(AsyncResult event) { - if (event.succeeded()) { - contextStore.put(event.result(), queryInfo); - } - handler.handle(event); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedQueryInstrumentation.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedQueryInstrumentation.java deleted file mode 100644 index ca678b659d2..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedQueryInstrumentation.java +++ /dev/null @@ -1,72 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; -import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static java.util.Collections.singletonMap; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.isVirtual; -import static net.bytebuddy.matcher.ElementMatchers.returns; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; - -import com.google.auto.service.AutoService; -import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.agent.tooling.InstrumenterModule; -import java.util.Map; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.matcher.ElementMatcher; - -@AutoService(InstrumenterModule.class) -public class PreparedQueryInstrumentation extends InstrumenterModule.Tracing - implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice { - public PreparedQueryInstrumentation() { - super("vertx", "vertx-sql-client"); - } - - @Override - public Map contextStore() { - return singletonMap("io.vertx.sqlclient.Query", "datadog.trace.api.Pair"); - } - - @Override - public String[] helperClassNames() { - return new String[] { - packageName + ".QueryResultHandlerWrapper", packageName + ".VertxSqlClientDecorator", - }; - } - - @Override - public String hierarchyMarkerType() { - return "io.vertx.sqlclient.PreparedQuery"; - } - - @Override - public ElementMatcher hierarchyMatcher() { - return implementsInterface(named(hierarchyMarkerType())); - } - - @Override - public void methodAdvice(MethodTransformer transformer) { - transformer.applyAdvice( - isMethod() - .and(isPublic()) - .and(named("execute")) - .and(takesArguments(2)) - .and(takesArgument(1, named("io.vertx.core.Handler"))), - packageName + ".QueryAdvice$Execute"); - transformer.applyAdvice( - isMethod() - .and(isPublic()) - .and(named("executeBatch")) - .and(takesArguments(2)) - .and(takesArgument(1, named("io.vertx.core.Handler"))), - packageName + ".QueryAdvice$Execute"); - transformer.applyAdvice( - isMethod() - .and(isVirtual()) - .and(named("copy")) - .and(returns(named("io.vertx.sqlclient.impl.QueryBase"))), - packageName + ".QueryAdvice$Copy"); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedStatementQueryAdvice.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedStatementQueryAdvice.java deleted file mode 100644 index 54bf71c87a1..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedStatementQueryAdvice.java +++ /dev/null @@ -1,22 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import datadog.trace.api.Pair; -import datadog.trace.bootstrap.InstrumentationContext; -import io.vertx.mysqlclient.MySQLConnection; -import io.vertx.sqlclient.PreparedStatement; -import io.vertx.sqlclient.Query; -import net.bytebuddy.asm.Advice; - -public class PreparedStatementQueryAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void afterQuery( - @Advice.This final PreparedStatement zis, @Advice.Return final Query query) { - InstrumentationContext.get(Query.class, Pair.class) - .put(query, InstrumentationContext.get(PreparedStatement.class, Pair.class).get(zis)); - } - - // Limit ourselves to 3.9.x and MySQL by checking for this method that was removed in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.close(); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryAdvice.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryAdvice.java deleted file mode 100644 index 2edacf9a25d..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryAdvice.java +++ /dev/null @@ -1,82 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.captureSpan; -import static datadog.trace.instrumentation.vertx_sql_client.VertxSqlClientDecorator.DECORATE; - -import datadog.trace.api.Pair; -import datadog.trace.bootstrap.ContextStore; -import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.api.AgentScope; -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; -import io.vertx.mysqlclient.MySQLConnection; -import io.vertx.sqlclient.Query; -import io.vertx.sqlclient.SqlResult; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.implementation.bytecode.assign.Assigner; - -public class QueryAdvice { - public static class Copy { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void afterCopy( - @Advice.This final Query zis, @Advice.Return final Query ret) { - ContextStore contextStore = InstrumentationContext.get(Query.class, Pair.class); - contextStore.put(ret, contextStore.get(zis)); - } - - // Limit ourselves to 3.9.x and MySQL by checking for this method that was removed in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.close(); - } - } - - public static class Execute { - @Advice.OnMethodEnter(suppress = Throwable.class) - public static > AgentScope beforeExecute( - @Advice.This final Query zis, - @Advice.Argument( - value = 0, - readOnly = false, - optional = true, - typing = Assigner.Typing.DYNAMIC) - Object maybeHandler, - @Advice.Argument(value = 1, readOnly = false, optional = true) - Handler> handler) { - final boolean prepared = !(maybeHandler instanceof Handler); - - final AgentSpan parentSpan = activeSpan(); - final AgentScope.Continuation parentContinuation = - null == parentSpan ? null : captureSpan(parentSpan); - final AgentSpan clientSpan = - DECORATE.startAndDecorateSpanForStatement( - zis, InstrumentationContext.get(Query.class, Pair.class), prepared); - if (null == clientSpan) { - return null; - } - if (prepared) { - handler = new QueryResultHandlerWrapper<>(handler, clientSpan, parentContinuation); - } else { - maybeHandler = - new QueryResultHandlerWrapper<>( - (Handler>) maybeHandler, clientSpan, parentContinuation); - } - return activateSpan(clientSpan); - } - - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void afterExecute( - @Advice.Thrown final Throwable throwable, @Advice.Enter final AgentScope clientScope) { - if (null != clientScope) { - clientScope.close(); - } - } - - // Limit ourselves to 3.9.x and MySQL by checking for this method that was removed in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.close(); - } - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryImplInstrumentation.java deleted file mode 100644 index d04c2afbda2..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryImplInstrumentation.java +++ /dev/null @@ -1,57 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static java.util.Collections.singletonMap; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.isVirtual; -import static net.bytebuddy.matcher.ElementMatchers.returns; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; - -import com.google.auto.service.AutoService; -import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.agent.tooling.InstrumenterModule; -import java.util.Map; - -@AutoService(InstrumenterModule.class) -public class QueryImplInstrumentation extends InstrumenterModule.Tracing - implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { - public QueryImplInstrumentation() { - super("vertx", "vertx-sql-client"); - } - - @Override - public Map contextStore() { - return singletonMap("io.vertx.sqlclient.Query", "datadog.trace.api.Pair"); - } - - @Override - public String[] helperClassNames() { - return new String[] { - packageName + ".QueryResultHandlerWrapper", packageName + ".VertxSqlClientDecorator", - }; - } - - @Override - public String instrumentedType() { - return "io.vertx.sqlclient.impl.SqlClientBase$QueryImpl"; - } - - @Override - public void methodAdvice(MethodTransformer transformer) { - transformer.applyAdvice( - isMethod() - .and(isPublic()) - .and(named("execute")) - .and(takesArguments(1)) - .and(takesArgument(0, named("io.vertx.core.Handler"))), - packageName + ".QueryAdvice$Execute"); - transformer.applyAdvice( - isMethod() - .and(isVirtual()) - .and(named("copy")) - .and(returns(named("io.vertx.sqlclient.impl.QueryBase"))), - packageName + ".QueryAdvice$Copy"); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlClientBaseAdvice.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlClientBaseAdvice.java deleted file mode 100644 index 91d9136a189..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlClientBaseAdvice.java +++ /dev/null @@ -1,50 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import datadog.trace.api.Pair; -import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; -import datadog.trace.bootstrap.instrumentation.jdbc.DBQueryInfo; -import io.vertx.mysqlclient.MySQLConnection; -import io.vertx.sqlclient.Query; -import io.vertx.sqlclient.SqlClient; -import net.bytebuddy.asm.Advice; - -public class SqlClientBaseAdvice { - public static class NormalQuery { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void afterQuery( - @Advice.This final SqlClient zis, - @Advice.Argument(0) final String sql, - @Advice.Return final Query query) { - Pair info = - Pair.of( - InstrumentationContext.get(SqlClient.class, DBInfo.class).get(zis), - DBQueryInfo.ofStatement(sql)); - InstrumentationContext.get(Query.class, Pair.class).put(query, info); - } - - // Limit ourselves to 3.9.x and MySQL by checking for this method that was removed in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.close(); - } - } - - public static class PreparedQuery { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void afterPreparedQuery( - @Advice.This final SqlClient zis, - @Advice.Argument(0) final String sql, - @Advice.Return final Query query) { - Pair info = - Pair.of( - InstrumentationContext.get(SqlClient.class, DBInfo.class).get(zis), - DBQueryInfo.ofPreparedStatement(sql)); - InstrumentationContext.get(Query.class, Pair.class).put(query, info); - } - - // Limit ourselves to 3.9.x and MySQL by checking for this method that was removed in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.close(); - } - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlClientBaseInstrumentation.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlClientBaseInstrumentation.java deleted file mode 100644 index b60abb64a93..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlClientBaseInstrumentation.java +++ /dev/null @@ -1,53 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; - -import com.google.auto.service.AutoService; -import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; -import java.util.HashMap; -import java.util.Map; - -@AutoService(InstrumenterModule.class) -public class SqlClientBaseInstrumentation extends InstrumenterModule.Tracing - implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { - public SqlClientBaseInstrumentation() { - super("vertx", "vertx-sql-client"); - } - - @Override - public Map contextStore() { - Map contextStores = new HashMap<>(); - contextStores.put("io.vertx.sqlclient.SqlClient", DBInfo.class.getName()); - contextStores.put("io.vertx.sqlclient.Query", "datadog.trace.api.Pair"); - return contextStores; - } - - @Override - public String instrumentedType() { - return "io.vertx.sqlclient.impl.SqlClientBase"; - } - - @Override - public void methodAdvice(MethodTransformer transformer) { - transformer.applyAdvice( - isMethod() - .and(isPublic()) - .and(named("query")) - .and(takesArguments(1)) - .and(takesArgument(0, named("java.lang.String"))), - packageName + ".SqlClientBaseAdvice$NormalQuery"); - transformer.applyAdvice( - isMethod() - .and(isPublic()) - .and(named("preparedQuery")) - .and(takesArguments(1)) - .and(takesArgument(0, named("java.lang.String"))), - packageName + ".SqlClientBaseAdvice$PreparedQuery"); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlConnectionBaseInstrumentation.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlConnectionBaseInstrumentation.java deleted file mode 100644 index 1704d06b688..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlConnectionBaseInstrumentation.java +++ /dev/null @@ -1,54 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; - -import com.google.auto.service.AutoService; -import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; -import java.util.HashMap; -import java.util.Map; - -@AutoService(InstrumenterModule.class) -public class SqlConnectionBaseInstrumentation extends InstrumenterModule.Tracing - implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { - public SqlConnectionBaseInstrumentation() { - super("vertx", "vertx-sql-client"); - } - - @Override - public Map contextStore() { - Map contextStores = new HashMap<>(); - contextStores.put("io.vertx.sqlclient.SqlClient", DBInfo.class.getName()); - contextStores.put("io.vertx.sqlclient.PreparedStatement", "datadog.trace.api.Pair"); - return contextStores; - } - - @Override - public String[] helperClassNames() { - return new String[] { - packageName + ".PrepareHandlerWrapper", - }; - } - - @Override - public String instrumentedType() { - return "io.vertx.sqlclient.impl.SqlConnectionBase"; - } - - @Override - public void methodAdvice(MethodTransformer transformer) { - transformer.applyAdvice( - isMethod() - .and(isPublic()) - .and(named("prepare")) - .and(takesArguments(2)) - .and(takesArgument(0, named("java.lang.String"))) - .and(takesArgument(1, named("io.vertx.core.Handler"))), - packageName + ".SqlConnectionBasePrepareAdvice"); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlConnectionBasePrepareAdvice.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlConnectionBasePrepareAdvice.java deleted file mode 100644 index 9fdc0cdf7dc..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/SqlConnectionBasePrepareAdvice.java +++ /dev/null @@ -1,35 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import datadog.trace.api.Pair; -import datadog.trace.bootstrap.InstrumentationContext; -import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; -import datadog.trace.bootstrap.instrumentation.jdbc.DBQueryInfo; -import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; -import io.vertx.mysqlclient.MySQLConnection; -import io.vertx.sqlclient.PreparedStatement; -import io.vertx.sqlclient.SqlClient; -import net.bytebuddy.asm.Advice; - -public class SqlConnectionBasePrepareAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) - public static void beforePrepare( - @Advice.This final SqlClient zis, - @Advice.Argument(0) final String sql, - @Advice.Argument(value = 1, readOnly = false) - Handler> handler) { - Pair info = - Pair.of( - InstrumentationContext.get(SqlClient.class, DBInfo.class).get(zis), - DBQueryInfo.ofStatement(sql)); - - handler = - new PrepareHandlerWrapper( - handler, InstrumentationContext.get(PreparedStatement.class, Pair.class), info); - } - - // Limit ourselves to 3.9.x and MySQL by checking for this method that was removed in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.close(); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/VertxSqlClientDecorator.java b/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/VertxSqlClientDecorator.java deleted file mode 100644 index d93c9604eaa..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/VertxSqlClientDecorator.java +++ /dev/null @@ -1,116 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client; - -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; -import static datadog.trace.bootstrap.instrumentation.api.Tags.DB_OPERATION; - -import datadog.trace.api.Pair; -import datadog.trace.api.naming.SpanNaming; -import datadog.trace.bootstrap.ContextStore; -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; -import datadog.trace.bootstrap.instrumentation.api.Tags; -import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; -import datadog.trace.bootstrap.instrumentation.decorator.DatabaseClientDecorator; -import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; -import datadog.trace.bootstrap.instrumentation.jdbc.DBQueryInfo; - -public class VertxSqlClientDecorator extends DatabaseClientDecorator { - - public static final VertxSqlClientDecorator DECORATE = new VertxSqlClientDecorator(); - - private static final CharSequence VERTX_SQL = UTF8BytesString.create("vertx-sql"); - private static final CharSequence DATABASE_QUERY = UTF8BytesString.create("database.query"); - private static final UTF8BytesString DB_QUERY = UTF8BytesString.create("DB Query"); - private static final UTF8BytesString VERTX_STATEMENT = - UTF8BytesString.create("vertx-sql-statement"); - private static final UTF8BytesString VERTX_PREPARED_STATEMENT = - UTF8BytesString.create("vertx-sql-prepared_statement"); - private static final String DEFAULT_SERVICE_NAME = - SpanNaming.instance().namingSchema().database().service("vertx-sql"); - - @Override - protected String[] instrumentationNames() { - return new String[] {"vertx", "vertx-sql-client"}; - } - - @Override - protected String service() { - return DEFAULT_SERVICE_NAME; // Overridden by onConnection - } - - @Override - protected CharSequence component() { - return VERTX_SQL; // Overridden by onStatement and onPreparedStatement - } - - @Override - protected CharSequence spanType() { - return InternalSpanTypes.SQL; - } - - @Override - protected String dbType() { - return "vertx-sql"; - } - - @Override - protected String dbUser(final DBInfo info) { - return info.getUser(); - } - - @Override - protected String dbInstance(final DBInfo info) { - if (info.getInstance() != null) { - return info.getInstance(); - } else { - return info.getDb(); - } - } - - @Override - protected String dbHostname(final DBInfo info) { - return info.getHost(); - } - - public AgentSpan startAndDecorateSpanForStatement( - T query, ContextStore contextStore, boolean prepared) { - CharSequence component = prepared ? VERTX_PREPARED_STATEMENT : VERTX_STATEMENT; - AgentSpan span = startSpan(DATABASE_QUERY); - if (null == span) { - return null; - } - afterStart(span); - - DBInfo dbInfo = null; - DBQueryInfo dbQueryInfo = null; - Pair queryInfo = contextStore.get(query); - if (queryInfo != null) { - dbInfo = queryInfo.getLeft(); - dbQueryInfo = queryInfo.getRight(); - } - - if (dbInfo != null) { - processDatabaseType(span, dbInfo.getType()); - } - super.onConnection(span, dbInfo); - - if (null != dbQueryInfo) { - span.setResourceName(dbQueryInfo.getSql()); - span.setTag(DB_OPERATION, dbQueryInfo.getOperation()); - } else { - span.setResourceName(DB_QUERY); - } - span.setTag(Tags.COMPONENT, component); - - return span; - } - - @Override - protected void postProcessServiceAndOperationName( - AgentSpan span, DatabaseClientDecorator.NamingEntry namingEntry) { - if (namingEntry.getService() != null) { - span.setServiceName(namingEntry.getService()); - } - span.setOperationName(namingEntry.getOperation()); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/build.gradle b/dd-java-agent/instrumentation/vertx-mysql-client-4.0/build.gradle index ec8c516a81f..2d7f37a0c7a 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx-mysql-client-4.0/build.gradle @@ -24,11 +24,14 @@ dependencies { testImplementation group: 'io.vertx', name: 'vertx-mysql-client', version: '4.0.0' + testRuntimeOnly project(':dd-java-agent:instrumentation:vertx-sql-client-3.9') + testRuntimeOnly project(':dd-java-agent:instrumentation:vertx-mysql-client-4.4.2') + // This is needed for the test container to start testImplementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.23' testImplementation group: 'org.testcontainers', name: 'mysql', version: libs.versions.testcontainers.get() - latestDepTestImplementation group: 'io.vertx', name: 'vertx-mysql-client', version: '4.0.+' + latestDepTestImplementation group: 'io.vertx', name: 'vertx-mysql-client', version: '4.+' } tasks.withType(Test).configureEach { diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/CursorImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/CursorImplInstrumentation.java deleted file mode 100644 index 9348c80989b..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/CursorImplInstrumentation.java +++ /dev/null @@ -1,47 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; - -import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static java.util.Collections.singletonMap; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; - -import com.google.auto.service.AutoService; -import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.agent.tooling.InstrumenterModule; -import java.util.Map; - -@AutoService(InstrumenterModule.class) -public class CursorImplInstrumentation extends InstrumenterModule.Tracing - implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { - public CursorImplInstrumentation() { - super("vertx", "vertx-sql-client"); - } - - @Override - public Map contextStore() { - return singletonMap("io.vertx.sqlclient.PreparedStatement", "datadog.trace.api.Pair"); - } - - @Override - public String[] helperClassNames() { - return new String[] { - packageName + ".QueryResultHandlerWrapper", packageName + ".VertxSqlClientDecorator", - }; - } - - @Override - public String instrumentedType() { - return "io.vertx.sqlclient.impl.CursorImpl"; - } - - @Override - public void methodAdvice(MethodTransformer transformer) { - transformer.applyAdvice( - isMethod() - .and(isPublic()) - .and(named("read")) - .and(takesArgument(1, named("io.vertx.core.Handler"))), - packageName + ".CursorReadAdvice"); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedStatementImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedStatementImplInstrumentation.java deleted file mode 100644 index 5baad44c748..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedStatementImplInstrumentation.java +++ /dev/null @@ -1,40 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; - -import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; - -import com.google.auto.service.AutoService; -import datadog.trace.agent.tooling.Instrumenter; -import datadog.trace.agent.tooling.InstrumenterModule; -import java.util.HashMap; -import java.util.Map; - -@AutoService(InstrumenterModule.class) -public class PreparedStatementImplInstrumentation extends InstrumenterModule.Tracing - implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { - public PreparedStatementImplInstrumentation() { - super("vertx", "vertx-sql-client"); - } - - @Override - public Map contextStore() { - Map contextStores = new HashMap<>(); - contextStores.put("io.vertx.sqlclient.PreparedStatement", "datadog.trace.api.Pair"); - contextStores.put("io.vertx.sqlclient.Query", "datadog.trace.api.Pair"); - return contextStores; - } - - @Override - public String instrumentedType() { - return "io.vertx.sqlclient.impl.PreparedStatementImpl"; - } - - @Override - public void methodAdvice(MethodTransformer transformer) { - transformer.applyAdvice( - isMethod().and(isPublic()).and(named("query")).and(takesNoArguments()), - packageName + ".PreparedStatementQueryAdvice"); - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryResultHandlerWrapper.java b/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryResultHandlerWrapper.java deleted file mode 100644 index e0d77a5a613..00000000000 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryResultHandlerWrapper.java +++ /dev/null @@ -1,41 +0,0 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; - -import datadog.trace.bootstrap.instrumentation.api.AgentScope; -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; -import io.vertx.sqlclient.SqlResult; - -public class QueryResultHandlerWrapper> - implements Handler> { - private final Handler> handler; - private final AgentSpan clientSpan; - private final AgentScope.Continuation parentContinuation; - - public QueryResultHandlerWrapper( - final Handler> handler, - final AgentSpan clientSpan, - final AgentScope.Continuation parentContinuation) { - this.handler = handler; - this.clientSpan = clientSpan; - this.parentContinuation = parentContinuation; - } - - @Override - public void handle(final AsyncResult event) { - AgentScope scope = null; - try { - if (null != clientSpan) { - clientSpan.finish(); - } - if (null != parentContinuation) { - scope = parentContinuation.activate(); - } - handler.handle(event); - } finally { - if (null != scope) { - scope.close(); - } - } - } -} diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.4.2/build.gradle b/dd-java-agent/instrumentation/vertx-mysql-client-4.4.2/build.gradle index e3f4e36b71d..199c43a6828 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.4.2/build.gradle +++ b/dd-java-agent/instrumentation/vertx-mysql-client-4.4.2/build.gradle @@ -21,14 +21,6 @@ latestDepTest { dependencies { compileOnly group: 'io.vertx', name: 'vertx-mysql-client', version: '4.4.2' - - testImplementation group: 'io.vertx', name: 'vertx-mysql-client', version: '4.4.2' - - // This is needed for the test container to start - testImplementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.23' - testImplementation group: 'org.testcontainers', name: 'mysql', version: libs.versions.testcontainers.get() - - latestDepTestImplementation group: 'io.vertx', name: 'vertx-mysql-client', version: '4.4.4' } tasks.withType(Test).configureEach { diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/build.gradle b/dd-java-agent/instrumentation/vertx-pg-client-4.0/build.gradle new file mode 100644 index 00000000000..cfa4eba8fa5 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/build.gradle @@ -0,0 +1,45 @@ + +apply from: "$rootDir/gradle/java.gradle" + +muzzle { + pass { + group = 'io.vertx' + module = 'vertx-pg-client' + // 4.1.1 is the first version where PgConnectionFactory is public + // see https://github.com/eclipse-vertx/vertx-sql-client/pull/986 + versions = '[4.1.1,5)' + assertInverse = true + } +} + +addTestSuiteForDir('latestDepTest', 'test') +addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') + +apply from: "$rootDir/gradle/configure_tests.gradle" + +latestDepTest { + finalizedBy 'latestDepForkedTest' +} + +dependencies { + compileOnly group: 'io.vertx', name: 'vertx-pg-client', version: '4.1.1' + + testImplementation group: 'io.vertx', name: 'vertx-pg-client', version: '4.1.1' + testRuntimeOnly project(':dd-java-agent:instrumentation:vertx-sql-client-3.9') + testRuntimeOnly project(':dd-java-agent:instrumentation:vertx-pg-client-4.4.2') + // to test possible interferences + testRuntimeOnly project(':dd-java-agent:instrumentation:vertx-mysql-client-4.4.2') + testRuntimeOnly project(':dd-java-agent:instrumentation:vertx-mysql-client-4.0') + + + // This is needed for the test container to start + testImplementation group: 'com.ongres.scram', name: 'client', version: '2.1' + testImplementation group: 'org.postgresql', name: 'postgresql', version: '42.7.4' + testImplementation group: 'org.testcontainers', name: 'postgresql', version: libs.versions.testcontainers.get() + + latestDepTestImplementation group: 'io.vertx', name: 'vertx-pg-client', version: '4.+' +} + +tasks.withType(Test).configureEach { + usesService(testcontainersLimit) +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/gradle.lockfile b/dd-java-agent/instrumentation/vertx-pg-client-4.0/gradle.lockfile new file mode 100644 index 00000000000..1291bfdbe1d --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/gradle.lockfile @@ -0,0 +1,209 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +cafe.cryptography:curve25519-elisabeth:0.1.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +cafe.cryptography:ed25519-elisabeth:0.1.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +ch.qos.logback:logback-classic:1.2.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +ch.qos.logback:logback-core:1.2.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.beust:jcommander:1.78=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +com.blogspot.mydailyjava:weak-lock-free:0.17=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq.okhttp3:okhttp:3.12.15=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq.okio:okio:1.17.6=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq:java-dogstatsd-client:4.4.3=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.datadoghq:sketches-java:0.8.3=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.10.3=testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.11.4=compileClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.github.docker-java:docker-java-api:3.4.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.github.docker-java:docker-java-transport-zerodep:3.4.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.github.docker-java:docker-java-transport:3.4.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.github.javaparser:javaparser-core:3.25.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.github.jnr:jffi:1.3.13=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-a64asm:1.0.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-constants:0.10.4=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-enxio:0.32.17=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-ffi:2.2.16=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-posix:3.1.19=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-unixsocket:0.38.22=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-x86asm:1.0.2=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.spotbugs:spotbugs-annotations:4.2.0=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.github.spotbugs:spotbugs-annotations:4.7.3=spotbugs +com.github.spotbugs:spotbugs:4.7.3=spotbugs +com.github.stefanbirkner:system-rules:1.19.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.auto.service:auto-service-annotations:1.0-rc7=annotationProcessor,compileClasspath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,testAnnotationProcessor,testCompileClasspath +com.google.auto.service:auto-service:1.0-rc7=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.auto:auto-common:0.10=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,compileClasspath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.9.1=spotbugs +com.google.errorprone:error_prone_annotations:2.2.0=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.guava:failureaccess:1.0.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.guava:guava:20.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:27.0.1-jre=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.j2objc:j2objc-annotations:1.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.re2j:re2j:1.7=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.ongres.scram:client:2.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.ongres.scram:common:2.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.ongres.stringprep:saslprep:1.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.ongres.stringprep:stringprep:1.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.moshi:moshi:1.11.0=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.okhttp3:okhttp:3.12.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.okio:okio:1.17.5=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.thoughtworks.qdox:qdox:1.12.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +commons-codec:commons-codec:1.15=spotbugs +commons-fileupload:commons-fileupload:1.5=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +commons-io:commons-io:2.11.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +de.thetaphi:forbiddenapis:3.8=compileClasspath +info.picocli:picocli:4.6.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +io.netty:netty-buffer:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-codec-dns:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-codec-http2:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-codec-http:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-codec-socks:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-codec:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-common:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-handler-proxy:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-handler:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-resolver-dns:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-resolver:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.118.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.sqreen:libsqreen:12.0.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +io.vertx:vertx-core:4.1.1=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.vertx:vertx-core:4.5.13=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-pg-client:4.1.1=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.vertx:vertx-pg-client:4.5.13=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-sql-client:4.1.1=compileClasspath,testCompileClasspath,testRuntimeClasspath +io.vertx:vertx-sql-client:4.5.13=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +jaxen:jaxen:1.2.0=spotbugs +jline:jline:2.14.6=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +junit:junit-dep:4.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +junit:junit:4.13.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.18=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.18=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.java.dev.jna:jna-platform:5.8.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +net.java.dev.jna:jna:5.13.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +net.java.dev.jna:jna:5.8.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +net.jcip:jcip-annotations:1.0=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs,testCompileClasspath,testRuntimeClasspath +net.sf.saxon:Saxon-HE:11.4=spotbugs +org.apache.ant:ant-antlr:1.10.12=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.apache.ant:ant-antlr:1.9.15=codenarc +org.apache.ant:ant-junit:1.10.12=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.apache.ant:ant-junit:1.9.15=codenarc +org.apache.ant:ant-launcher:1.10.12=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.apache.ant:ant:1.10.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.apache.bcel:bcel:6.5.0=spotbugs +org.apache.commons:commons-compress:1.24.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.apache.commons:commons-lang3:3.12.0=spotbugs +org.apache.commons:commons-text:1.10.0=spotbugs +org.apache.httpcomponents.client5:httpclient5:5.1.3=spotbugs +org.apache.httpcomponents.core5:httpcore5-h2:5.1.3=spotbugs +org.apache.httpcomponents.core5:httpcore5:5.1.3=spotbugs +org.apache.logging.log4j:log4j-api:2.19.0=spotbugs +org.apache.logging.log4j:log4j-core:2.19.0=spotbugs +org.apiguardian:apiguardian-api:1.1.2=latestDepForkedTestCompileClasspath,latestDepTestCompileClasspath,testCompileClasspath +org.checkerframework:checker-qual:2.5.2=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +org.checkerframework:checker-qual:3.42.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-all:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-ant:2.5.14=codenarc +org.codehaus.groovy:groovy-ant:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-astbuilder:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-cli-picocli:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-console:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-datetime:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-docgenerator:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-groovydoc:2.5.14=codenarc +org.codehaus.groovy:groovy-groovydoc:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-groovysh:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-jmx:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-json:2.5.14=codenarc +org.codehaus.groovy:groovy-json:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-jsr223:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-macro:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-nio:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-servlet:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-sql:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-swing:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-templates:2.5.14=codenarc +org.codehaus.groovy:groovy-templates:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-test-junit5:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-test:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-testng:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-xml:2.5.14=codenarc +org.codehaus.groovy:groovy-xml:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy:2.5.14=codenarc +org.codehaus.groovy:groovy:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.17=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +org.codenarc:CodeNarc:2.2.0=codenarc +org.dom4j:dom4j:2.1.3=spotbugs +org.eclipse.jetty:jetty-http:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-io:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-server:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-util:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.gmetrics:GMetrics:1.1=codenarc +org.hamcrest:hamcrest-core:1.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hamcrest:hamcrest:2.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.jctools:jctools-core:3.3.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.jetbrains:annotations:17.0.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-launcher:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-runner:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-suite-api:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-suite-commons:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit:junit-bom:5.9.1=spotbugs +org.junit:junit-bom:5.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.opentest4j:opentest4j:1.2.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.ow2.asm:asm-analysis:9.2=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-analysis:9.4=spotbugs +org.ow2.asm:asm-commons:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm-commons:9.4=spotbugs +org.ow2.asm:asm-commons:9.7.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-tree:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm-tree:9.4=spotbugs +org.ow2.asm:asm-tree:9.7.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-util:9.2=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-util:9.4=spotbugs +org.ow2.asm:asm:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm:9.4=spotbugs +org.ow2.asm:asm:9.7.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.postgresql:postgresql:42.7.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.rnorth.duct-tape:duct-tape:1.0.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:jcl-over-slf4j:1.7.30=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:jul-to-slf4j:1.7.30=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:log4j-over-slf4j:1.7.30=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:1.7.30=compileClasspath,instrumentPluginClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath +org.slf4j:slf4j-api:1.7.36=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.0=spotbugs,spotbugsSlf4j +org.slf4j:slf4j-simple:2.0.0=spotbugsSlf4j +org.spockframework:spock-core:2.2-groovy-3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.spockframework:spock-junit4:2.2-groovy-3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.testcontainers:database-commons:1.20.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.testcontainers:jdbc:1.20.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.testcontainers:postgresql:1.20.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.testcontainers:testcontainers:1.20.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.testng:testng:7.5=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.webjars:jquery:3.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.xmlresolver:xmlresolver:4.4.3=spotbugs +xml-apis:xml-apis:1.4.01=spotbugs +empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionFactoryConstructorAdvice.java b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionFactoryConstructorAdvice.java new file mode 100644 index 00000000000..017b394a8d9 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionFactoryConstructorAdvice.java @@ -0,0 +1,25 @@ +package datadog.trace.instrumentation.vertx_pg_client_4; + +import datadog.trace.bootstrap.InstrumentationContext; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import io.vertx.pgclient.PgConnectOptions; +import io.vertx.pgclient.impl.PgConnectionFactory; +import net.bytebuddy.asm.Advice; + +public class PgConnectionFactoryConstructorAdvice { + @Advice.OnMethodExit(suppress = Throwable.class) + public static void afterConstructor( + @Advice.This final PgConnectionFactory zis, + @Advice.Argument(1) final PgConnectOptions options) { + DBInfo.Builder builder = DBInfo.DEFAULT.toBuilder(); + DBInfo info = + builder + .host(options.getHost()) + .port(options.getPort()) + .db(options.getDatabase()) + .user(options.getUser()) + .type("postgresql") + .build(); + InstrumentationContext.get(PgConnectionFactory.class, DBInfo.class).put(zis, info); + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionFactoryInstrumentation.java b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionFactoryInstrumentation.java new file mode 100644 index 00000000000..644859ecc1d --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionFactoryInstrumentation.java @@ -0,0 +1,38 @@ +package datadog.trace.instrumentation.vertx_pg_client_4; + +import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static java.util.Collections.singletonMap; +import static net.bytebuddy.matcher.ElementMatchers.*; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import java.util.Map; + +@AutoService(InstrumenterModule.class) +public class PgConnectionFactoryInstrumentation extends InstrumenterModule.Tracing + implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { + public PgConnectionFactoryInstrumentation() { + super("vertx", "vertx-sql-client"); + } + + @Override + public Map contextStore() { + return singletonMap("io.vertx.pgclient.impl.PgConnectionFactory", DBInfo.class.getName()); + } + + @Override + public String instrumentedType() { + return "io.vertx.pgclient.impl.PgConnectionFactory"; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice( + isConstructor() + .and(takesArguments(2)) + .and(takesArgument(1, named("io.vertx.pgclient.PgConnectOptions"))), + packageName + ".PgConnectionFactoryConstructorAdvice"); + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionImplConstructorAdvice.java b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionImplConstructorAdvice.java new file mode 100644 index 00000000000..eda970aaf08 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionImplConstructorAdvice.java @@ -0,0 +1,16 @@ +package datadog.trace.instrumentation.vertx_pg_client_4; + +import datadog.trace.bootstrap.InstrumentationContext; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import io.vertx.pgclient.impl.PgConnectionFactory; +import io.vertx.sqlclient.SqlClient; +import net.bytebuddy.asm.Advice; + +public class PgConnectionImplConstructorAdvice { + @Advice.OnMethodExit(suppress = Throwable.class) + public static void afterConstructor( + @Advice.This final SqlClient zis, @Advice.Argument(0) final PgConnectionFactory factory) { + InstrumentationContext.get(SqlClient.class, DBInfo.class) + .put(zis, InstrumentationContext.get(PgConnectionFactory.class, DBInfo.class).get(factory)); + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionImplInstrumentation.java new file mode 100644 index 00000000000..dc97d7111af --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgConnectionImplInstrumentation.java @@ -0,0 +1,40 @@ +package datadog.trace.instrumentation.vertx_pg_client_4; + +import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.isConstructor; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import java.util.HashMap; +import java.util.Map; + +@AutoService(InstrumenterModule.class) +public class PgConnectionImplInstrumentation extends InstrumenterModule.Tracing + implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { + public PgConnectionImplInstrumentation() { + super("vertx", "vertx-sql-client"); + } + + @Override + public Map contextStore() { + Map contextStores = new HashMap<>(); + contextStores.put("io.vertx.pgclient.impl.PgConnectionFactory", DBInfo.class.getName()); + contextStores.put("io.vertx.sqlclient.SqlClient", DBInfo.class.getName()); + return contextStores; + } + + @Override + public String instrumentedType() { + return "io.vertx.pgclient.impl.PgConnectionImpl"; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice( + isConstructor().and(takesArgument(0, named("io.vertx.pgclient.impl.PgConnectionFactory"))), + packageName + ".PgConnectionImplConstructorAdvice"); + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgPoolImplAdvice.java b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgPoolImplAdvice.java new file mode 100644 index 00000000000..ac24692250d --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgPoolImplAdvice.java @@ -0,0 +1,31 @@ +package datadog.trace.instrumentation.vertx_pg_client_4; + +import datadog.trace.bootstrap.InstrumentationContext; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import io.vertx.core.Context; +import io.vertx.pgclient.PgConnectOptions; +import io.vertx.pgclient.impl.PgConnectionFactory; +import io.vertx.sqlclient.SqlClient; +import net.bytebuddy.asm.Advice; + +public class PgPoolImplAdvice { + + @Advice.OnMethodExit(suppress = Throwable.class) + public static void afterCreate( + @Advice.Return final SqlClient zis, @Advice.Argument(2) PgConnectOptions options) { + DBInfo.Builder builder = DBInfo.DEFAULT.toBuilder(); + DBInfo info = + builder + .host(options.getHost()) + .port(options.getPort()) + .db(options.getDatabase()) + .user(options.getUser()) + .type("postgresql") + .build(); + InstrumentationContext.get(SqlClient.class, DBInfo.class).put(zis, info); + } + + private static void muzzleCheck(PgConnectionFactory f) { + f.connect((Context) null); + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgPoolImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgPoolImplInstrumentation.java new file mode 100644 index 00000000000..7a52a87807f --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4/PgPoolImplInstrumentation.java @@ -0,0 +1,41 @@ +package datadog.trace.instrumentation.vertx_pg_client_4; + +import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static java.util.Collections.singletonMap; +import static net.bytebuddy.matcher.ElementMatchers.*; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import java.util.Map; + +@AutoService(InstrumenterModule.class) +public class PgPoolImplInstrumentation extends InstrumenterModule.Tracing + implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { + public PgPoolImplInstrumentation() { + super("vertx", "vertx-sql-client"); + } + + @Override + public Map contextStore() { + return singletonMap("io.vertx.sqlclient.SqlClient", DBInfo.class.getName()); + } + + @Override + public String instrumentedType() { + return "io.vertx.pgclient.impl.PgPoolImpl"; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice( + isStatic() + .and(isPublic()) + .and(isMethod()) + .and(named("create")) + .and(takesArguments(4)) + .and(takesArgument(2, named("io.vertx.pgclient.PgConnectOptions"))), + packageName + ".PgPoolImplAdvice"); + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/groovy/VertxPostgresSqlClientForkedTest.groovy b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/groovy/VertxPostgresSqlClientForkedTest.groovy new file mode 100644 index 00000000000..beb8baf354d --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/groovy/VertxPostgresSqlClientForkedTest.groovy @@ -0,0 +1,146 @@ +import TestDatabases.TestDBInfo +import datadog.trace.agent.test.AgentTestRunner +import datadog.trace.agent.test.asserts.TraceAssert +import datadog.trace.bootstrap.instrumentation.api.Tags +import datadog.trace.core.DDSpan +import io.vertx.core.AsyncResult +import io.vertx.core.Vertx +import io.vertx.core.VertxOptions +import io.vertx.pgclient.PgConnectOptions +import io.vertx.pgclient.PgPool +import io.vertx.sqlclient.* +import spock.lang.AutoCleanup +import spock.lang.Shared + +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit + +import static datadog.trace.agent.test.utils.TraceUtils.basicSpan +import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace + +class VertxPostgresSqlClientForkedTest extends AgentTestRunner { + @AutoCleanup + @Shared + def dbs = TestDatabases.initialise("postgres") + + @AutoCleanup + @Shared + def vertx = Vertx.vertx(new VertxOptions()) + + def "test #type without parent"() { + when: + AsyncResult> asyncResult = executeQueryWithHandler(query) + + then: + asyncResult.succeeded() + + when: + def result = asyncResult.result() + + then: + result.size() == 1 + result[0].getString(0) == '7' + assertTraces(2) { + trace(1) { + checkDBSpan(it, null, 'SELECT $1', "SELECT", dbs.DBInfos.postgresql, prepared) + } + trace(1) { + basicSpan(it, "handler") + } + } + + cleanup: + pool.close() + + where: + type | pool | query | prepared + 'prepared statement' | pool() | prepare(connection(pool), 'SELECT $1').query() | true + } + + Pool pool() { + def connectOptions = PgConnectOptions.fromUri(dbs.DBInfos.postgresql.uri) + def poolOptions = new PoolOptions().setMaxSize(2) + return PgPool.pool(vertx, connectOptions, poolOptions) + } + + def AsyncResult> executeQueryWithHandler(Query> query) { + def latch = new CountDownLatch(1) + AsyncResult> result = null + + if (query instanceof PreparedQuery) { + query.execute(Tuple.of("7")) { rowSetAR -> + runUnderTrace("handler") { + result = rowSetAR + } + latch.countDown() + } + } else { + query.execute { rowSetAR -> + runUnderTrace("handler") { + result = rowSetAR + } + latch.countDown() + } + } + assert latch.await(10, TimeUnit.SECONDS) + return result + } + + AsyncResult> queryCursorWithHandler(Cursor cursor) { + def latch = new CountDownLatch(1) + AsyncResult> result = null + cursor.read(0) { rowSetAR -> + runUnderTrace("handler") { + result = rowSetAR + } + latch.countDown() + } + assert latch.await(10, TimeUnit.SECONDS) + return result + } + + SqlConnection connection(Pool pool) { + def latch = new CountDownLatch(1) + SqlConnection result = null + pool.getConnection({ connectionAR -> + result = connectionAR.result() + latch.countDown() + }) + assert latch.await(10, TimeUnit.SECONDS) + return result + } + + PreparedStatement prepare(SqlConnection connection, String sql) { + def latch = new CountDownLatch(1) + PreparedStatement result = null + connection.prepare(sql, { statementAR -> + result = statementAR.result() + latch.countDown() + }) + assert latch.await(10, TimeUnit.SECONDS) + return result + } + + void checkDBSpan(TraceAssert ta, DDSpan parent, String resource, String operation, TestDBInfo info, boolean prepared = false) { + ta.span(ta.nextSpanId()) { + if (parent != null) { + childOf(parent) + } + operationName info ? "${info.type}.query" : "database.query" + resourceName resource + spanType "sql" + tags { + "$Tags.COMPONENT" prepared ? "vertx-sql-prepared_statement" : "vertx-sql-statement" + "$Tags.SPAN_KIND" Tags.SPAN_KIND_CLIENT + "$Tags.DB_OPERATION" operation + if (info) { + "$Tags.DB_TYPE" info.type + "$Tags.DB_INSTANCE" info.dbName + "$Tags.DB_USER" info.user + "$Tags.PEER_HOSTNAME" info.host + } + defaultTags() + } + } + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/java/TestDatabases.java b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/java/TestDatabases.java new file mode 100644 index 00000000000..1e31905cf79 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/java/TestDatabases.java @@ -0,0 +1,99 @@ +import datadog.trace.agent.test.utils.PortUtils; +import java.io.Closeable; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import org.testcontainers.containers.PostgreSQLContainer; + +public class TestDatabases implements Closeable { + + private final PostgreSQLContainer pgsql; + private final Map dbInfos; + + private TestDatabases(String dbName) { + Map infos = new HashMap<>(); + pgsql = + new PostgreSQLContainer("postgres:16-alpine") + .withDatabaseName(dbName) + .withUsername("postgres") + .withPassword("postgres"); + pgsql.start(); + TestDBInfo info = + new TestDBInfo( + pgsql.getUsername(), + pgsql.getPassword(), + pgsql.getHost(), + pgsql.getMappedPort(PostgreSQLContainer.POSTGRESQL_PORT), + "postgresql", + dbName); + PortUtils.waitForPortToOpen(info.host, info.port, 5, TimeUnit.SECONDS); + infos.put("postgresql", info); + dbInfos = Collections.unmodifiableMap(infos); + } + + public static TestDatabases initialise(String dbName) { + return new TestDatabases(dbName); + } + + @Override + public void close() throws IOException { + if (null != pgsql) { + pgsql.close(); + } + } + + public Map getDBInfos() { + return dbInfos; + } + + public static class TestDBInfo { + private final String user; + private final String password; + private final String host; + private final Integer port; + private final String type; + private final String dbName; + private final String uri; + + public TestDBInfo( + String user, String password, String host, Integer port, String type, String dbName) { + this.user = user; + this.password = password; + this.host = host; + this.port = port; + this.type = type; + this.dbName = dbName; + this.uri = type + "://" + user + ":" + password + "@" + host + ":" + port + "/" + dbName; + } + + public String getUser() { + return user; + } + + public String getPassword() { + return password; + } + + public String getHost() { + return host; + } + + public String getPort() { + return port.toString(); + } + + public String getType() { + return type; + } + + public String getDbName() { + return dbName; + } + + public String getUri() { + return uri; + } + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/build.gradle b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/build.gradle new file mode 100644 index 00000000000..fa167b7090d --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/build.gradle @@ -0,0 +1,27 @@ +apply from: "$rootDir/gradle/java.gradle" + +muzzle { + pass { + group = 'io.vertx' + module = 'vertx-pg-client' + versions = '[4.4.2,4.6.0)' + assertInverse = true + } +} + +addTestSuiteForDir('latestDepTest', 'test') +addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') + +apply from: "$rootDir/gradle/configure_tests.gradle" + +latestDepTest { + finalizedBy 'latestDepForkedTest' +} + +dependencies { + compileOnly group: 'io.vertx', name: 'vertx-pg-client', version: '4.4.2' +} + +tasks.withType(Test).configureEach { + usesService(testcontainersLimit) +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/gradle.lockfile b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/gradle.lockfile new file mode 100644 index 00000000000..0ad400aa74c --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/gradle.lockfile @@ -0,0 +1,175 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +cafe.cryptography:curve25519-elisabeth:0.1.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +cafe.cryptography:ed25519-elisabeth:0.1.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +ch.qos.logback:logback-classic:1.2.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +ch.qos.logback:logback-core:1.2.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +ch.randelshofer:fastdoubleparser:0.8.0=compileClasspath +com.beust:jcommander:1.78=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +com.blogspot.mydailyjava:weak-lock-free:0.17=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq.okhttp3:okhttp:3.12.15=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq.okio:okio:1.17.6=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq:java-dogstatsd-client:4.4.3=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.datadoghq:sketches-java:0.8.3=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.0=compileClasspath +com.fasterxml.jackson:jackson-bom:2.15.0=compileClasspath +com.github.javaparser:javaparser-core:3.25.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.github.jnr:jffi:1.3.13=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-a64asm:1.0.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-constants:0.10.4=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-enxio:0.32.17=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-ffi:2.2.16=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-posix:3.1.19=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-unixsocket:0.38.22=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-x86asm:1.0.2=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.spotbugs:spotbugs-annotations:4.2.0=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.github.spotbugs:spotbugs-annotations:4.7.3=spotbugs +com.github.spotbugs:spotbugs:4.7.3=spotbugs +com.github.stefanbirkner:system-rules:1.19.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.auto.service:auto-service-annotations:1.0-rc7=annotationProcessor,compileClasspath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,testAnnotationProcessor,testCompileClasspath +com.google.auto.service:auto-service:1.0-rc7=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.auto:auto-common:0.10=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,compileClasspath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.9.1=spotbugs +com.google.errorprone:error_prone_annotations:2.2.0=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.guava:failureaccess:1.0.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.guava:guava:20.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:27.0.1-jre=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.j2objc:j2objc-annotations:1.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +com.google.re2j:re2j:1.7=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.squareup.moshi:moshi:1.11.0=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.okhttp3:okhttp:3.12.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.okio:okio:1.17.5=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.thoughtworks.qdox:qdox:1.12.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +commons-codec:commons-codec:1.15=spotbugs +commons-fileupload:commons-fileupload:1.5=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +commons-io:commons-io:2.11.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +de.thetaphi:forbiddenapis:3.8=compileClasspath +info.picocli:picocli:4.6.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +io.netty:netty-buffer:4.1.92.Final=compileClasspath +io.netty:netty-codec-dns:4.1.92.Final=compileClasspath +io.netty:netty-codec-http2:4.1.92.Final=compileClasspath +io.netty:netty-codec-http:4.1.92.Final=compileClasspath +io.netty:netty-codec-socks:4.1.92.Final=compileClasspath +io.netty:netty-codec:4.1.92.Final=compileClasspath +io.netty:netty-common:4.1.92.Final=compileClasspath +io.netty:netty-handler-proxy:4.1.92.Final=compileClasspath +io.netty:netty-handler:4.1.92.Final=compileClasspath +io.netty:netty-resolver-dns:4.1.92.Final=compileClasspath +io.netty:netty-resolver:4.1.92.Final=compileClasspath +io.netty:netty-transport-native-unix-common:4.1.92.Final=compileClasspath +io.netty:netty-transport:4.1.92.Final=compileClasspath +io.sqreen:libsqreen:12.0.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +io.vertx:vertx-core:4.4.2=compileClasspath +io.vertx:vertx-pg-client:4.4.2=compileClasspath +io.vertx:vertx-sql-client:4.4.2=compileClasspath +javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +jaxen:jaxen:1.2.0=spotbugs +jline:jline:2.14.6=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +junit:junit-dep:4.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +junit:junit:4.13.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.18=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.18=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.java.dev.jna:jna-platform:5.8.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +net.java.dev.jna:jna:5.8.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +net.jcip:jcip-annotations:1.0=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs,testCompileClasspath,testRuntimeClasspath +net.sf.saxon:Saxon-HE:11.4=spotbugs +org.apache.ant:ant-antlr:1.10.12=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.apache.ant:ant-antlr:1.9.15=codenarc +org.apache.ant:ant-junit:1.10.12=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.apache.ant:ant-junit:1.9.15=codenarc +org.apache.ant:ant-launcher:1.10.12=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.apache.ant:ant:1.10.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.apache.bcel:bcel:6.5.0=spotbugs +org.apache.commons:commons-lang3:3.12.0=spotbugs +org.apache.commons:commons-text:1.10.0=spotbugs +org.apache.httpcomponents.client5:httpclient5:5.1.3=spotbugs +org.apache.httpcomponents.core5:httpcore5-h2:5.1.3=spotbugs +org.apache.httpcomponents.core5:httpcore5:5.1.3=spotbugs +org.apache.logging.log4j:log4j-api:2.19.0=spotbugs +org.apache.logging.log4j:log4j-core:2.19.0=spotbugs +org.apiguardian:apiguardian-api:1.1.2=latestDepForkedTestCompileClasspath,latestDepTestCompileClasspath,testCompileClasspath +org.checkerframework:checker-qual:2.5.2=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +org.codehaus.groovy:groovy-all:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-ant:2.5.14=codenarc +org.codehaus.groovy:groovy-ant:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-astbuilder:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-cli-picocli:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-console:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-datetime:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-docgenerator:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-groovydoc:2.5.14=codenarc +org.codehaus.groovy:groovy-groovydoc:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-groovysh:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-jmx:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-json:2.5.14=codenarc +org.codehaus.groovy:groovy-json:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-jsr223:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-macro:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-nio:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-servlet:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-sql:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-swing:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-templates:2.5.14=codenarc +org.codehaus.groovy:groovy-templates:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-test-junit5:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-test:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-testng:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-xml:2.5.14=codenarc +org.codehaus.groovy:groovy-xml:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy:2.5.14=codenarc +org.codehaus.groovy:groovy:3.0.17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.17=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor +org.codenarc:CodeNarc:2.2.0=codenarc +org.dom4j:dom4j:2.1.3=spotbugs +org.eclipse.jetty:jetty-http:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-io:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-server:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-util:9.4.56.v20240826=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.gmetrics:GMetrics:1.1=codenarc +org.hamcrest:hamcrest-core:1.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hamcrest:hamcrest:2.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.jctools:jctools-core:3.3.0=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-launcher:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-runner:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-suite-api:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-suite-commons:1.9.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit:junit-bom:5.9.1=spotbugs +org.junit:junit-bom:5.9.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.opentest4j:opentest4j:1.2.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.ow2.asm:asm-analysis:9.2=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-analysis:9.4=spotbugs +org.ow2.asm:asm-commons:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm-commons:9.4=spotbugs +org.ow2.asm:asm-commons:9.7.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-tree:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm-tree:9.4=spotbugs +org.ow2.asm:asm-tree:9.7.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-util:9.2=instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-util:9.4=spotbugs +org.ow2.asm:asm:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm:9.4=spotbugs +org.ow2.asm:asm:9.7.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.slf4j:jcl-over-slf4j:1.7.30=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:jul-to-slf4j:1.7.30=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:log4j-over-slf4j:1.7.30=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:1.7.30=compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepTestCompileClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath +org.slf4j:slf4j-api:1.7.32=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.0=spotbugs,spotbugsSlf4j +org.slf4j:slf4j-simple:2.0.0=spotbugsSlf4j +org.spockframework:spock-core:2.2-groovy-3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.spockframework:spock-junit4:2.2-groovy-3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.testng:testng:7.5=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.webjars:jquery:3.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.xmlresolver:xmlresolver:4.4.3=spotbugs +xml-apis:xml-apis:1.4.01=spotbugs +empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgConnectionFactoryConstructorAdvice.java b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgConnectionFactoryConstructorAdvice.java new file mode 100644 index 00000000000..9e0f9d03f88 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgConnectionFactoryConstructorAdvice.java @@ -0,0 +1,31 @@ +package datadog.trace.instrumentation.vertx_pg_client_4_4_2; + +import datadog.trace.bootstrap.InstrumentationContext; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import io.vertx.core.Future; +import io.vertx.pgclient.impl.PgConnectionFactory; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.impl.SingletonSupplier; +import java.util.function.Supplier; +import net.bytebuddy.asm.Advice; + +public class PgConnectionFactoryConstructorAdvice { + @Advice.OnMethodExit(suppress = Throwable.class) + public static void afterConstructor( + @Advice.This final PgConnectionFactory factory, + @Advice.Argument(1) final Supplier> databases) { + if (databases instanceof SingletonSupplier) { + SqlConnectOptions options = (SqlConnectOptions) ((SingletonSupplier) databases).unwrap(); + DBInfo.Builder builder = DBInfo.DEFAULT.toBuilder(); + DBInfo info = + builder + .host(options.getHost()) + .port(options.getPort()) + .db(options.getDatabase()) + .user(options.getUser()) + .type("postgresql") + .build(); + InstrumentationContext.get(PgConnectionFactory.class, DBInfo.class).put(factory, info); + } + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgConnectionFactoryInstrumentation.java b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgConnectionFactoryInstrumentation.java new file mode 100644 index 00000000000..5e8ac3371de --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgConnectionFactoryInstrumentation.java @@ -0,0 +1,40 @@ +package datadog.trace.instrumentation.vertx_pg_client_4_4_2; + +import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static java.util.Collections.singletonMap; +import static net.bytebuddy.matcher.ElementMatchers.isConstructor; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import static net.bytebuddy.matcher.ElementMatchers.takesArguments; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import java.util.Map; + +@AutoService(InstrumenterModule.class) +public class PgConnectionFactoryInstrumentation extends InstrumenterModule.Tracing + implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { + public PgConnectionFactoryInstrumentation() { + super("vertx", "vertx-sql-client"); + } + + @Override + public Map contextStore() { + return singletonMap("io.vertx.pgclient.impl.PgConnectionFactory", DBInfo.class.getName()); + } + + @Override + public String instrumentedType() { + return "io.vertx.pgclient.impl.PgConnectionFactory"; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice( + isConstructor() + .and(takesArguments(2)) + .and(takesArgument(1, named("java.util.function.Supplier"))), + packageName + ".PgConnectionFactoryConstructorAdvice"); + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgDriverAdvice.java b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgDriverAdvice.java new file mode 100644 index 00000000000..f55cf047f28 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgDriverAdvice.java @@ -0,0 +1,33 @@ +package datadog.trace.instrumentation.vertx_pg_client_4_4_2; + +import datadog.trace.bootstrap.InstrumentationContext; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import io.vertx.core.Future; +import io.vertx.sqlclient.SqlClient; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.impl.SingletonSupplier; +import java.util.function.Supplier; +import net.bytebuddy.asm.Advice; + +public class PgDriverAdvice { + + @Advice.OnMethodExit(suppress = Throwable.class) + public static void afterNewPoolImpl( + @Advice.Return final SqlClient zis, + @Advice.Argument(1) final Supplier> databases) { + + if (databases instanceof SingletonSupplier) { + SqlConnectOptions options = (SqlConnectOptions) ((SingletonSupplier) databases).unwrap(); + DBInfo.Builder builder = DBInfo.DEFAULT.toBuilder(); + DBInfo info = + builder + .host(options.getHost()) + .port(options.getPort()) + .db(options.getDatabase()) + .user(options.getUser()) + .type("postgresql") + .build(); + InstrumentationContext.get(SqlClient.class, DBInfo.class).put(zis, info); + } + } +} diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgDriverInstrumentation.java b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgDriverInstrumentation.java new file mode 100644 index 00000000000..f6856b85572 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.4.2/src/main/java/datadog/trace/instrumentation/vertx_pg_client_4_4_2/PgDriverInstrumentation.java @@ -0,0 +1,41 @@ +package datadog.trace.instrumentation.vertx_pg_client_4_4_2; + +import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static java.util.Collections.singletonMap; +import static net.bytebuddy.matcher.ElementMatchers.isPrivate; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import static net.bytebuddy.matcher.ElementMatchers.takesArguments; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; +import java.util.Map; + +@AutoService(InstrumenterModule.class) +public class PgDriverInstrumentation extends InstrumenterModule.Tracing + implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { + + public PgDriverInstrumentation() { + super("vertx", "vertx-sql-client"); + } + + @Override + public Map contextStore() { + return singletonMap("io.vertx.sqlclient.SqlClient", DBInfo.class.getName()); + } + + @Override + public String instrumentedType() { + return "io.vertx.pgclient.spi.PgDriver"; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice( + isPrivate() + .and(named("newPoolImpl")) + .and(takesArguments(4).and(takesArgument(1, named("java.util.function.Supplier")))), + packageName + ".PgDriverAdvice"); + } +} diff --git a/dd-java-agent/instrumentation/vertx-sql-client-3.9/build.gradle b/dd-java-agent/instrumentation/vertx-sql-client-3.9/build.gradle new file mode 100644 index 00000000000..b0da108ffc6 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/build.gradle @@ -0,0 +1,13 @@ +apply from: "$rootDir/gradle/java.gradle" + +muzzle { + pass { + group = "io.vertx" + module = "vertx-sql-client" + versions = "[3.9.0,)" + } +} + +dependencies { + compileOnly group: 'io.vertx', name: 'vertx-sql-client', version: '3.9.0' +} diff --git a/dd-java-agent/instrumentation/vertx-sql-client-3.9/gradle.lockfile b/dd-java-agent/instrumentation/vertx-sql-client-3.9/gradle.lockfile new file mode 100644 index 00000000000..ed3f80fa51a --- /dev/null +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/gradle.lockfile @@ -0,0 +1,173 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +cafe.cryptography:curve25519-elisabeth:0.1.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +cafe.cryptography:ed25519-elisabeth:0.1.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +ch.qos.logback:logback-classic:1.2.3=testCompileClasspath,testRuntimeClasspath +ch.qos.logback:logback-core:1.2.3=testCompileClasspath,testRuntimeClasspath +com.beust:jcommander:1.78=testRuntimeClasspath +com.blogspot.mydailyjava:weak-lock-free:0.17=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq.okhttp3:okhttp:3.12.15=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq.okio:okio:1.17.6=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,instrumentPluginClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq:java-dogstatsd-client:4.4.3=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.datadoghq:sketches-java:0.8.3=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.10.2=compileClasspath +com.fasterxml.jackson.core:jackson-core:2.10.2=compileClasspath +com.fasterxml.jackson.core:jackson-databind:2.10.2=compileClasspath +com.github.javaparser:javaparser-core:3.25.1=testCompileClasspath,testRuntimeClasspath +com.github.jnr:jffi:1.3.13=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-a64asm:1.0.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-constants:0.10.4=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-enxio:0.32.17=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-ffi:2.2.16=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-posix:3.1.19=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-unixsocket:0.38.22=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.jnr:jnr-x86asm:1.0.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.github.spotbugs:spotbugs-annotations:4.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath +com.github.spotbugs:spotbugs-annotations:4.7.3=spotbugs +com.github.spotbugs:spotbugs:4.7.3=spotbugs +com.github.stefanbirkner:system-rules:1.19.0=testCompileClasspath,testRuntimeClasspath +com.google.auto.service:auto-service-annotations:1.0-rc7=annotationProcessor,compileClasspath,testAnnotationProcessor,testCompileClasspath +com.google.auto.service:auto-service:1.0-rc7=annotationProcessor,testAnnotationProcessor +com.google.auto:auto-common:0.10=annotationProcessor,testAnnotationProcessor +com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,compileClasspath,spotbugs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.9.1=spotbugs +com.google.errorprone:error_prone_annotations:2.2.0=annotationProcessor,testAnnotationProcessor +com.google.guava:failureaccess:1.0.1=annotationProcessor,testAnnotationProcessor +com.google.guava:guava:20.0=testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:27.0.1-jre=annotationProcessor,testAnnotationProcessor +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,testAnnotationProcessor +com.google.j2objc:j2objc-annotations:1.1=annotationProcessor,testAnnotationProcessor +com.google.re2j:re2j:1.7=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.squareup.moshi:moshi:1.11.0=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.squareup.okhttp3:logging-interceptor:3.12.12=testCompileClasspath,testRuntimeClasspath +com.squareup.okhttp3:okhttp:3.12.12=testCompileClasspath,testRuntimeClasspath +com.squareup.okio:okio:1.17.5=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.thoughtworks.qdox:qdox:1.12.1=testRuntimeClasspath +commons-codec:commons-codec:1.15=spotbugs +commons-fileupload:commons-fileupload:1.5=testCompileClasspath,testRuntimeClasspath +commons-io:commons-io:2.11.0=testCompileClasspath,testRuntimeClasspath +de.thetaphi:forbiddenapis:3.8=compileClasspath +info.picocli:picocli:4.6.3=testRuntimeClasspath +io.netty:netty-buffer:4.1.48.Final=compileClasspath +io.netty:netty-codec-dns:4.1.48.Final=compileClasspath +io.netty:netty-codec-http2:4.1.48.Final=compileClasspath +io.netty:netty-codec-http:4.1.48.Final=compileClasspath +io.netty:netty-codec-socks:4.1.48.Final=compileClasspath +io.netty:netty-codec:4.1.48.Final=compileClasspath +io.netty:netty-common:4.1.48.Final=compileClasspath +io.netty:netty-handler-proxy:4.1.48.Final=compileClasspath +io.netty:netty-handler:4.1.48.Final=compileClasspath +io.netty:netty-resolver-dns:4.1.48.Final=compileClasspath +io.netty:netty-resolver:4.1.48.Final=compileClasspath +io.netty:netty-transport:4.1.48.Final=compileClasspath +io.sqreen:libsqreen:12.0.0=testRuntimeClasspath +io.vertx:vertx-core:3.9.0=compileClasspath +io.vertx:vertx-sql-client:3.9.0=compileClasspath +javax.servlet:javax.servlet-api:3.1.0=testCompileClasspath,testRuntimeClasspath +jaxen:jaxen:1.2.0=spotbugs +jline:jline:2.14.6=testRuntimeClasspath +junit:junit-dep:4.11=testCompileClasspath,testRuntimeClasspath +junit:junit:4.13.2=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.18=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.18=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.java.dev.jna:jna-platform:5.8.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +net.java.dev.jna:jna:5.8.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +net.jcip:jcip-annotations:1.0=compileClasspath,spotbugs,testCompileClasspath,testRuntimeClasspath +net.sf.saxon:Saxon-HE:11.4=spotbugs +org.apache.ant:ant-antlr:1.10.12=testRuntimeClasspath +org.apache.ant:ant-antlr:1.9.15=codenarc +org.apache.ant:ant-junit:1.10.12=testRuntimeClasspath +org.apache.ant:ant-junit:1.9.15=codenarc +org.apache.ant:ant-launcher:1.10.12=testRuntimeClasspath +org.apache.ant:ant:1.10.12=testCompileClasspath,testRuntimeClasspath +org.apache.bcel:bcel:6.5.0=spotbugs +org.apache.commons:commons-lang3:3.12.0=spotbugs +org.apache.commons:commons-text:1.10.0=spotbugs +org.apache.httpcomponents.client5:httpclient5:5.1.3=spotbugs +org.apache.httpcomponents.core5:httpcore5-h2:5.1.3=spotbugs +org.apache.httpcomponents.core5:httpcore5:5.1.3=spotbugs +org.apache.logging.log4j:log4j-api:2.19.0=spotbugs +org.apache.logging.log4j:log4j-core:2.19.0=spotbugs +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:2.5.2=annotationProcessor,testAnnotationProcessor +org.codehaus.groovy:groovy-all:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-ant:2.5.14=codenarc +org.codehaus.groovy:groovy-ant:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-astbuilder:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-cli-picocli:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-console:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-datetime:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-docgenerator:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-groovydoc:2.5.14=codenarc +org.codehaus.groovy:groovy-groovydoc:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-groovysh:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-jmx:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-json:2.5.14=codenarc +org.codehaus.groovy:groovy-json:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-jsr223:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-macro:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-nio:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-servlet:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-sql:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-swing:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-templates:2.5.14=codenarc +org.codehaus.groovy:groovy-templates:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-test-junit5:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-test:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-testng:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy-xml:2.5.14=codenarc +org.codehaus.groovy:groovy-xml:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.groovy:groovy:2.5.14=codenarc +org.codehaus.groovy:groovy:3.0.17=testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.17=annotationProcessor,testAnnotationProcessor +org.codenarc:CodeNarc:2.2.0=codenarc +org.dom4j:dom4j:2.1.3=spotbugs +org.eclipse.jetty:jetty-http:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-io:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-server:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-util:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath +org.gmetrics:GMetrics:1.1=codenarc +org.hamcrest:hamcrest-core:1.3=testCompileClasspath,testRuntimeClasspath +org.hamcrest:hamcrest:2.2=testCompileClasspath,testRuntimeClasspath +org.jctools:jctools-core:3.3.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.9.2=testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.9.2=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.9.2=testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.9.2=testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-launcher:1.9.2=testRuntimeClasspath +org.junit.platform:junit-platform-runner:1.9.2=testRuntimeClasspath +org.junit.platform:junit-platform-suite-api:1.9.2=testRuntimeClasspath +org.junit.platform:junit-platform-suite-commons:1.9.2=testRuntimeClasspath +org.junit:junit-bom:5.9.1=spotbugs +org.junit:junit-bom:5.9.2=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath +org.opentest4j:opentest4j:1.2.0=testCompileClasspath,testRuntimeClasspath +org.ow2.asm:asm-analysis:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-analysis:9.4=spotbugs +org.ow2.asm:asm-commons:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm-commons:9.4=spotbugs +org.ow2.asm:asm-commons:9.7.1=testRuntimeClasspath +org.ow2.asm:asm-tree:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm-tree:9.4=spotbugs +org.ow2.asm:asm-tree:9.7.1=testRuntimeClasspath +org.ow2.asm:asm-util:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +org.ow2.asm:asm-util:9.4=spotbugs +org.ow2.asm:asm:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath +org.ow2.asm:asm:9.4=spotbugs +org.ow2.asm:asm:9.7.1=testRuntimeClasspath +org.slf4j:jcl-over-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath +org.slf4j:jul-to-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath +org.slf4j:log4j-over-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:1.7.30=compileClasspath,instrumentPluginClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath +org.slf4j:slf4j-api:1.7.32=testRuntimeClasspath +org.slf4j:slf4j-api:2.0.0=spotbugs,spotbugsSlf4j +org.slf4j:slf4j-simple:2.0.0=spotbugsSlf4j +org.spockframework:spock-core:2.2-groovy-3.0=testCompileClasspath,testRuntimeClasspath +org.spockframework:spock-junit4:2.2-groovy-3.0=testCompileClasspath,testRuntimeClasspath +org.testng:testng:7.5=testRuntimeClasspath +org.webjars:jquery:3.5.1=testRuntimeClasspath +org.xmlresolver:xmlresolver:4.4.3=spotbugs +xml-apis:xml-apis:1.4.01=spotbugs +empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/CursorImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorImplInstrumentation.java similarity index 96% rename from dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/CursorImplInstrumentation.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorImplInstrumentation.java index 6afeb290963..f75bedd2d2d 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/CursorImplInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorImplInstrumentation.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static java.util.Collections.singletonMap; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/CursorReadAdvice.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorReadAdvice.java similarity index 83% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/CursorReadAdvice.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorReadAdvice.java index f02405d8f58..b6b2427886b 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/CursorReadAdvice.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/CursorReadAdvice.java @@ -1,9 +1,9 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.captureSpan; -import static datadog.trace.instrumentation.vertx_sql_client_4.VertxSqlClientDecorator.DECORATE; +import static datadog.trace.instrumentation.vertx_sql_client_39.VertxSqlClientDecorator.DECORATE; import datadog.trace.api.Pair; import datadog.trace.bootstrap.InstrumentationContext; @@ -11,7 +11,6 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; -import io.vertx.mysqlclient.MySQLConnection; import io.vertx.sqlclient.PreparedStatement; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.RowSet; @@ -48,9 +47,4 @@ public static void afterRead( clientScope.close(); } } - - // Limit ourselves to 4.x by checking for the ping() method that was added in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.ping(); - } } diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PrepareHandlerWrapper.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PrepareHandlerWrapper.java similarity index 94% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PrepareHandlerWrapper.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PrepareHandlerWrapper.java index 202db4fcc66..33b39a77cd6 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PrepareHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PrepareHandlerWrapper.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import datadog.trace.api.Pair; import datadog.trace.bootstrap.ContextStore; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedQueryInstrumentation.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedQueryInstrumentation.java similarity index 97% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedQueryInstrumentation.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedQueryInstrumentation.java index b7843ccdf89..41bf2f2c03b 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedQueryInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedQueryInstrumentation.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedStatementImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedStatementImplInstrumentation.java similarity index 83% rename from dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedStatementImplInstrumentation.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedStatementImplInstrumentation.java index 9da40354495..fd3b1f11def 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/PreparedStatementImplInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedStatementImplInstrumentation.java @@ -1,9 +1,7 @@ -package datadog.trace.instrumentation.vertx_sql_client; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; +import static net.bytebuddy.matcher.ElementMatchers.*; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedStatementQueryAdvice.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedStatementQueryAdvice.java similarity index 67% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedStatementQueryAdvice.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedStatementQueryAdvice.java index be541910ec7..67954991f5d 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/PreparedStatementQueryAdvice.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/PreparedStatementQueryAdvice.java @@ -1,8 +1,7 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import datadog.trace.api.Pair; import datadog.trace.bootstrap.InstrumentationContext; -import io.vertx.mysqlclient.MySQLConnection; import io.vertx.sqlclient.PreparedStatement; import io.vertx.sqlclient.Query; import net.bytebuddy.asm.Advice; @@ -14,9 +13,4 @@ public static void afterQuery( InstrumentationContext.get(Query.class, Pair.class) .put(query, InstrumentationContext.get(PreparedStatement.class, Pair.class).get(zis)); } - - // Limit ourselves to 4.x by checking for the ping() method that was added in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.ping(); - } } diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryAdvice.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryAdvice.java similarity index 82% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryAdvice.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryAdvice.java index 3ee9ba79e59..49b52e3fe03 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryAdvice.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryAdvice.java @@ -1,9 +1,9 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.captureSpan; -import static datadog.trace.instrumentation.vertx_sql_client_4.VertxSqlClientDecorator.DECORATE; +import static datadog.trace.instrumentation.vertx_sql_client_39.VertxSqlClientDecorator.DECORATE; import datadog.trace.api.Pair; import datadog.trace.bootstrap.ContextStore; @@ -12,7 +12,6 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; -import io.vertx.mysqlclient.MySQLConnection; import io.vertx.sqlclient.Query; import io.vertx.sqlclient.SqlResult; import net.bytebuddy.asm.Advice; @@ -26,11 +25,6 @@ public static void afterCopy( ContextStore contextStore = InstrumentationContext.get(Query.class, Pair.class); contextStore.put(ret, contextStore.get(zis)); } - - // Limit ourselves to 4.x by checking for the ping() method that was added in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.ping(); - } } public static class Execute { @@ -73,10 +67,5 @@ public static void afterExecute( clientScope.close(); } } - - // Limit ourselves to 4.x by checking for the ping() method that was added in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.ping(); - } } } diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryImplInstrumentation.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryImplInstrumentation.java similarity index 97% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryImplInstrumentation.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryImplInstrumentation.java index b911e24d68d..dbc8fddd449 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/QueryImplInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryImplInstrumentation.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static java.util.Collections.singletonMap; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryResultHandlerWrapper.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryResultHandlerWrapper.java similarity index 95% rename from dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryResultHandlerWrapper.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryResultHandlerWrapper.java index 972dbeacd4e..7cf63771ad5 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client/QueryResultHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/QueryResultHandlerWrapper.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client; +package datadog.trace.instrumentation.vertx_sql_client_39; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlClientBaseAdvice.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlClientBaseAdvice.java similarity index 75% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlClientBaseAdvice.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlClientBaseAdvice.java index 354440516fa..39dcbd3068c 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlClientBaseAdvice.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlClientBaseAdvice.java @@ -1,10 +1,9 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import datadog.trace.api.Pair; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo; import datadog.trace.bootstrap.instrumentation.jdbc.DBQueryInfo; -import io.vertx.mysqlclient.MySQLConnection; import io.vertx.sqlclient.Query; import io.vertx.sqlclient.SqlClient; import net.bytebuddy.asm.Advice; @@ -23,11 +22,6 @@ public static void afterQuery( DBQueryInfo.ofStatement(sql)); InstrumentationContext.get(Query.class, Pair.class).put(query, info); } - - // Limit ourselves to 4.x by checking for the ping() method that was added in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.ping(); - } } public static class PreparedQuery { @@ -42,10 +36,5 @@ public static void afterPreparedQuery( DBQueryInfo.ofPreparedStatement(sql)); InstrumentationContext.get(Query.class, Pair.class).put(query, info); } - - // Limit ourselves to 4.x by checking for the ping() method that was added in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.ping(); - } } } diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlClientBaseInstrumentation.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlClientBaseInstrumentation.java similarity index 96% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlClientBaseInstrumentation.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlClientBaseInstrumentation.java index 920a8bfe375..9d41374a5ea 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlClientBaseInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlClientBaseInstrumentation.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.isMethod; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlConnectionBaseInstrumentation.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlConnectionBaseInstrumentation.java similarity index 96% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlConnectionBaseInstrumentation.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlConnectionBaseInstrumentation.java index 86b4f7a4bab..d2be6263170 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlConnectionBaseInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlConnectionBaseInstrumentation.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.isMethod; diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlConnectionBasePrepareAdvice.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlConnectionBasePrepareAdvice.java similarity index 78% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlConnectionBasePrepareAdvice.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlConnectionBasePrepareAdvice.java index 736084d67a7..5489c3c8288 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/SqlConnectionBasePrepareAdvice.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/SqlConnectionBasePrepareAdvice.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import datadog.trace.api.Pair; import datadog.trace.bootstrap.InstrumentationContext; @@ -6,7 +6,6 @@ import datadog.trace.bootstrap.instrumentation.jdbc.DBQueryInfo; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; -import io.vertx.mysqlclient.MySQLConnection; import io.vertx.sqlclient.PreparedStatement; import io.vertx.sqlclient.SqlClient; import net.bytebuddy.asm.Advice; @@ -27,9 +26,4 @@ public static void beforePrepare( new PrepareHandlerWrapper( handler, InstrumentationContext.get(PreparedStatement.class, Pair.class), info); } - - // Limit ourselves to 4.x by checking for the ping() method that was added in 4.x - private static void muzzleCheck(MySQLConnection connection) { - connection.ping(); - } } diff --git a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/VertxSqlClientDecorator.java b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/VertxSqlClientDecorator.java similarity index 98% rename from dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/VertxSqlClientDecorator.java rename to dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/VertxSqlClientDecorator.java index a1b19c81169..951fa69ebb5 100644 --- a/dd-java-agent/instrumentation/vertx-mysql-client-4.0/src/main/java/datadog/trace/instrumentation/vertx_sql_client_4/VertxSqlClientDecorator.java +++ b/dd-java-agent/instrumentation/vertx-sql-client-3.9/src/main/java/datadog/trace/instrumentation/vertx_sql_client_39/VertxSqlClientDecorator.java @@ -1,4 +1,4 @@ -package datadog.trace.instrumentation.vertx_sql_client_4; +package datadog.trace.instrumentation.vertx_sql_client_39; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.api.Tags.DB_OPERATION; diff --git a/settings.gradle b/settings.gradle index 08043a76680..58c855f2a0d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -502,9 +502,12 @@ include ':dd-java-agent:instrumentation:velocity' include ':dd-java-agent:instrumentation:vertx-mysql-client-3.9' include ':dd-java-agent:instrumentation:vertx-mysql-client-4.0' include ':dd-java-agent:instrumentation:vertx-mysql-client-4.4.2' +include ':dd-java-agent:instrumentation:vertx-pg-client-4.0' +include ':dd-java-agent:instrumentation:vertx-pg-client-4.4.2' include ':dd-java-agent:instrumentation:vertx-redis-client-3.9' include ':dd-java-agent:instrumentation:vertx-redis-client-3.9:stubs' include ':dd-java-agent:instrumentation:vertx-rx-3.5' +include ':dd-java-agent:instrumentation:vertx-sql-client-3.9' include ':dd-java-agent:instrumentation:vertx-web-3.4' include ':dd-java-agent:instrumentation:vertx-web-3.5' include ':dd-java-agent:instrumentation:vertx-web-3.9'