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..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 @@ -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('/', "jdbc://iris:/".length()); + 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() }