From 1e62050f14eb9ed57124d4e644c30c1f51760c71 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Thu, 12 Sep 2024 11:11:23 +0200 Subject: [PATCH 1/2] Support Intersystems IRIS jdbc driver --- .../jdbc/JDBCConnectionUrlParser.java | 14 ++++++++++++++ .../jdbc/DefaultConnectionInstrumentation.java | 2 ++ .../jdbc/PreparedStatementInstrumentation.java | 3 +++ .../test/groovy/JDBCConnectionUrlParserTest.groovy | 4 ++++ 4 files changed, 23 insertions(+) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java index 34b1c7407d2..09b0ff84e47 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java @@ -781,6 +781,20 @@ DBInfo.Builder doParse(String jdbcUrl, DBInfo.Builder builder) { } return GENERIC_URL_LIKE.doParse(url, builder); } + }, + + IRIS("iris") { + @Override + DBInfo.Builder doParse(String jdbcUrl, DBInfo.Builder builder) { + String url = jdbcUrl; + int firstSlash = url.indexOf('/', 13); // after jdbc://iris:/ + int nextSlash = url.indexOf('/', firstSlash + 1); + if (nextSlash > firstSlash) { + // strip the options and preserve only the url like part + url = url.substring(0, nextSlash); + } + return GENERIC_URL_LIKE.doParse(url, builder); + } }; private static final Map typeParsers = new HashMap<>(); diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DefaultConnectionInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DefaultConnectionInstrumentation.java index 16ff9c654b4..525fde5d7f9 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DefaultConnectionInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DefaultConnectionInstrumentation.java @@ -41,6 +41,8 @@ public class DefaultConnectionInstrumentation extends AbstractConnectionInstrume "com.sap.db.jdbc.ConnectionSapDB", // IBM Informix "com.informix.jdbc.IfmxConnection", + // Intersystems IRIS + "com.intersystems.jdbc.IRISConnection", // for testing purposes "test.TestConnection" }; diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/PreparedStatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/PreparedStatementInstrumentation.java index 38d818b2676..86d94fa3255 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/PreparedStatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/PreparedStatementInstrumentation.java @@ -117,6 +117,9 @@ public final class PreparedStatementInstrumentation extends AbstractPreparedStat "software.aws.rds.jdbc.mysql.shading.com.mysql.cj.JdbcCallableStatement", // IBM Informix "com.informix.jdbc.IfxPreparedStatement", + // Intersystems IRIS + "com.intersystems.jdbc.IRISPreparedStatement", + "com.intersystems.jdbc.IRISCallableStatement", // for testing purposes "test.TestPreparedStatement" }; diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy index a3d1a73a211..fe12885b99c 100644 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy +++ b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy @@ -200,6 +200,10 @@ class JDBCConnectionUrlParserTest extends AgentTestRunner { // redshift "jdbc:redshift://redshift-cluster-1.c7arcolffyvk.us-east-2.redshift.amazonaws.com:5439/dev" | null | "redshift" | null | null | "redshift-cluster-1.c7arcolffyvk.us-east-2.redshift.amazonaws.com" | 5439 | "redshift-cluster-1" | "dev" + // Intersys IRIS + "jdbc:IRIS://dbhostname:1972/namespace" | null | "iris" | null | null | "dbhostname" | 1972 | null | "namespace" + "jdbc:IRIS://dbhostname:1972/namespace/+myjdbc.log" | null | "iris" | null | null | "dbhostname" | 1972 | null | "namespace" + "jdbc:IRIS://dbhostname:1972/namespace/::false" | null | "iris" | null | null | "dbhostname" | 1972 | null | "namespace" expected = new DBInfo.Builder().type(type).subtype(subtype).user(user).instance(instance).db(db).host(host).port(port).build() } From 189bebf068815c03a16c6ecd4e74732598e5b890 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Thu, 12 Sep 2024 11:22:55 +0200 Subject: [PATCH 2/2] use .lenght --- .../bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java index 09b0ff84e47..f9352c13eaa 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java @@ -787,7 +787,7 @@ DBInfo.Builder doParse(String jdbcUrl, DBInfo.Builder builder) { @Override DBInfo.Builder doParse(String jdbcUrl, DBInfo.Builder builder) { String url = jdbcUrl; - int firstSlash = url.indexOf('/', 13); // after jdbc://iris:/ + int firstSlash = url.indexOf('/', "jdbc://iris:/".length()); int nextSlash = url.indexOf('/', firstSlash + 1); if (nextSlash > firstSlash) { // strip the options and preserve only the url like part