From 51cbfb6ebd3af1b48b190923050bde647e66a005 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 8 Jun 2024 08:15:04 -0400 Subject: [PATCH 1/8] Add support for informix connection string parsing in jdbc instrumentation --- .../internal/JdbcConnectionUrlParser.java | 54 +++++++++++++++++++ .../internal/JdbcConnectionUrlParserTest.java | 25 +++++++++ 2 files changed, 79 insertions(+) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index 698dfe68022a..711ba891ae39 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -831,6 +831,54 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { return MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); } + }, + INFORMIX_SQLI("informix-sqli") { + @Override + DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { + builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); + + int dbNameStartIdx = jdbcUrl.indexOf('/', jdbcUrl.indexOf("//") + 2) + 1; + int dbNameEndIdx = jdbcUrl.indexOf(':', dbNameStartIdx); + + String name = jdbcUrl.substring(dbNameStartIdx, dbNameEndIdx); + if (name != null) { + builder.name(name); + } + + return INFORMIX.doParse(jdbcUrl, builder); + } + }, + + INFORMIX_DIRECT("informix-direct") { + @Override + DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { + builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); + + String[] split = jdbcUrl.split("//"); + int dbNameEndIdx = split[1].indexOf(":"); + + String name = split[1].substring(0, dbNameEndIdx); + if (name != null) { + builder.name(name); + } + + builder.host("infxhost"); + return INFORMIX.doParse(jdbcUrl, builder); + } + }, + + INFORMIX { + private static final int DEFAULT_PORT = 9088; + + @Override + DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { + DbInfo dbInfo = builder.build(); + if (dbInfo.getPort() == null) { + builder.port(DEFAULT_PORT); + } + + return builder; + } }; private static final Logger logger = Logger.getLogger(JdbcConnectionUrlParser.class.getName()); @@ -1000,6 +1048,10 @@ private static String toDbSystem(String type) { return DbSystemValues.H2; case "hsqldb": // Hyper SQL Database return "hsqldb"; + case "informix-sqli": // IBM Informix + return DbSystemValues.INFORMIX_SQLI; + case "informix-direct": + return DbSystemValues.INFORMIX_DIRECT; case "mariadb": // MariaDB return DbSystemValues.MARIADB; case "mysql": // MySQL @@ -1026,6 +1078,8 @@ private static final class DbSystemValues { static final String MYSQL = "mysql"; static final String ORACLE = "oracle"; static final String DB2 = "db2"; + static final String INFORMIX_SQLI = "informix-sqli"; + static final String INFORMIX_DIRECT = "informix-direct"; static final String POSTGRESQL = "postgresql"; static final String HANADB = "hanadb"; static final String DERBY = "derby"; diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index feccb1ee512b..638bf430a024 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -638,6 +638,31 @@ public Stream provideArguments(ExtensionContext context) { .setDb("sapdb") .build(), + // https://www.ibm.com/support/pages/how-configure-informix-jdbc-connection-string-connect-group + arg("jdbc:informix-sqli://infxhost:99/infxdb:INFORMIXSERVER=infxsn;user=infxuser;password=PW") + .setSystem("informix-sqli") + .setUser("infxuser") + .setShortUrl("informix-sqli://infxhost:99") + .setHost("infxhost") + .setPort(99) + .setName("infxdb") + .build(), + arg("jdbc:informix-sqli://localhost:9088/stores_demo:INFORMIXSERVER=informix") + .setSystem("informix-sqli") + .setShortUrl("informix-sqli://localhost:9088") + .setHost("localhost") + .setPort(9088) + .setName("stores_demo") + .build(), + arg("jdbc:informix-direct://infxdb:999;user=infxuser;password=PW") + .setSystem("informix-direct") + .setUser("infxuser") + .setShortUrl("informix-direct://infxhost:999") + .setHost("infxhost") + .setPort(999) + .setName("infxdb") + .build(), + // http://www.h2database.com/html/features.html#database_url arg("jdbc:h2:mem:").setShortUrl("h2:mem:").setSystem("h2").setSubtype("mem").build(), arg("jdbc:h2:mem:") From 6b11a661d88ffadc0a61cbfb8a98bfc779d5c94d Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sun, 9 Jun 2024 12:21:40 -0400 Subject: [PATCH 2/8] support additional test case inputs with minimal connection string --- .../internal/JdbcConnectionUrlParser.java | 31 +++++++++++++------ .../internal/JdbcConnectionUrlParserTest.java | 13 ++++++++ 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index 711ba891ae39..496a8708c539 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -837,12 +837,16 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); - int dbNameStartIdx = jdbcUrl.indexOf('/', jdbcUrl.indexOf("//") + 2) + 1; - int dbNameEndIdx = jdbcUrl.indexOf(':', dbNameStartIdx); + int informixUrlStartIdx = jdbcUrl.indexOf("informix-sqli://") + "informix-sqli://".length(); - String name = jdbcUrl.substring(dbNameStartIdx, dbNameEndIdx); - if (name != null) { - builder.name(name); + if (jdbcUrl.indexOf('/', informixUrlStartIdx) != -1) { + int dbNameStartIdx = jdbcUrl.indexOf('/', informixUrlStartIdx) + 1; + int dbNameEndIdx = jdbcUrl.indexOf(':', dbNameStartIdx); + + String name = jdbcUrl.substring(dbNameStartIdx, dbNameEndIdx); + if (!name.isEmpty()) { + builder.name(name); + } } return INFORMIX.doParse(jdbcUrl, builder); @@ -850,19 +854,26 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { }, INFORMIX_DIRECT("informix-direct") { + private static final String DEFAULT_HOST = "infxhost"; + @Override DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); - String[] split = jdbcUrl.split("//"); - int dbNameEndIdx = split[1].indexOf(":"); + int informUrlStartIdx = jdbcUrl.indexOf("informix-direct://") + "informix-direct://".length(); + int colonLoc = jdbcUrl.indexOf(":", informUrlStartIdx); - String name = split[1].substring(0, dbNameEndIdx); - if (name != null) { + String name; + if (jdbcUrl.indexOf(":", informUrlStartIdx) > -1) { + name = jdbcUrl.substring(informUrlStartIdx, colonLoc); + } else { + name = jdbcUrl.substring(informUrlStartIdx); + } + if (!name.isEmpty()) { builder.name(name); } - builder.host("infxhost"); + builder.host(DEFAULT_HOST); return INFORMIX.doParse(jdbcUrl, builder); } }, diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index 638bf430a024..7dd4d82bc2fa 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -654,6 +654,12 @@ public Stream provideArguments(ExtensionContext context) { .setPort(9088) .setName("stores_demo") .build(), + arg("jdbc:informix-sqli://infxhost:99") + .setSystem("informix-sqli") + .setShortUrl("informix-sqli://infxhost:99") + .setHost("infxhost") + .setPort(99) + .build(), arg("jdbc:informix-direct://infxdb:999;user=infxuser;password=PW") .setSystem("informix-direct") .setUser("infxuser") @@ -662,6 +668,13 @@ public Stream provideArguments(ExtensionContext context) { .setPort(999) .setName("infxdb") .build(), + arg("jdbc:informix-direct://infxdb") + .setSystem("informix-direct") + .setShortUrl("informix-direct://infxhost:9088") + .setHost("infxhost") + .setName("infxdb") + .setPort(9088) + .build(), // http://www.h2database.com/html/features.html#database_url arg("jdbc:h2:mem:").setShortUrl("h2:mem:").setSystem("h2").setSubtype("mem").build(), From e4e258701a87097684c51cb4b1ecee887da1ba2d Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sun, 9 Jun 2024 12:29:41 -0400 Subject: [PATCH 3/8] fix variable name --- .../jdbc/internal/JdbcConnectionUrlParser.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index 496a8708c539..a898dc7df4b2 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -860,14 +860,15 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); - int informUrlStartIdx = jdbcUrl.indexOf("informix-direct://") + "informix-direct://".length(); - int colonLoc = jdbcUrl.indexOf(":", informUrlStartIdx); + int informixUrlStartIdx = + jdbcUrl.indexOf("informix-direct://") + "informix-direct://".length(); + int colonLoc = jdbcUrl.indexOf(":", informixUrlStartIdx); String name; - if (jdbcUrl.indexOf(":", informUrlStartIdx) > -1) { - name = jdbcUrl.substring(informUrlStartIdx, colonLoc); + if (colonLoc > -1) { + name = jdbcUrl.substring(informixUrlStartIdx, colonLoc); } else { - name = jdbcUrl.substring(informUrlStartIdx); + name = jdbcUrl.substring(informixUrlStartIdx); } if (!name.isEmpty()) { builder.name(name); From ce2dda304cc64bd3cec4987013b9bd1ae219702b Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sun, 9 Jun 2024 14:30:50 -0400 Subject: [PATCH 4/8] be consistent with the comparison operators --- .../instrumentation/jdbc/internal/JdbcConnectionUrlParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index a898dc7df4b2..44cb17e3b06f 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -839,7 +839,7 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { int informixUrlStartIdx = jdbcUrl.indexOf("informix-sqli://") + "informix-sqli://".length(); - if (jdbcUrl.indexOf('/', informixUrlStartIdx) != -1) { + if (jdbcUrl.indexOf('/', informixUrlStartIdx) > -1) { int dbNameStartIdx = jdbcUrl.indexOf('/', informixUrlStartIdx) + 1; int dbNameEndIdx = jdbcUrl.indexOf(':', dbNameStartIdx); From 798cbb2ab408cfe570dc33b723ba6b00be053059 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Mon, 10 Jun 2024 21:16:21 -0400 Subject: [PATCH 5/8] solve for additional connection string variations --- .../internal/JdbcConnectionUrlParser.java | 29 ++++++++++++------- .../internal/JdbcConnectionUrlParserTest.java | 11 +++++++ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index 44cb17e3b06f..2effdd4b203b 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -836,20 +836,29 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { @Override DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); + builder = INFORMIX.doParse(jdbcUrl, builder); - int informixUrlStartIdx = jdbcUrl.indexOf("informix-sqli://") + "informix-sqli://".length(); - - if (jdbcUrl.indexOf('/', informixUrlStartIdx) > -1) { - int dbNameStartIdx = jdbcUrl.indexOf('/', informixUrlStartIdx) + 1; - int dbNameEndIdx = jdbcUrl.indexOf(':', dbNameStartIdx); + int hostIndex = jdbcUrl.indexOf("://"); + if (hostIndex == -1) { + return builder; + } - String name = jdbcUrl.substring(dbNameStartIdx, dbNameEndIdx); - if (!name.isEmpty()) { - builder.name(name); - } + int dbNameStartIndex = jdbcUrl.indexOf('/', hostIndex + 3); + if (dbNameStartIndex == -1) { + return builder; + } + int dbNameEndIndex = jdbcUrl.indexOf(':', dbNameStartIndex); + if (dbNameEndIndex == -1) { + dbNameEndIndex = jdbcUrl.length(); + } + String name = jdbcUrl.substring(dbNameStartIndex + 1, dbNameEndIndex); + if (name.isEmpty()) { + builder.name(null); + } else { + builder.name(name); } - return INFORMIX.doParse(jdbcUrl, builder); + return builder; } }, diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index 7dd4d82bc2fa..e97eac2d667d 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -660,6 +660,17 @@ public Stream provideArguments(ExtensionContext context) { .setHost("infxhost") .setPort(99) .build(), + arg("jdbc:informix-sqli://infxhost/") + .setSystem("informix-sqli") + .setShortUrl("informix-sqli://infxhost:9088") + .setHost("infxhost") + .setPort(9088) + .build(), + arg("jdbc:informix-sqli:") + .setSystem("informix-sqli") + .setShortUrl("informix-sqli:") + .setPort(9088) + .build(), arg("jdbc:informix-direct://infxdb:999;user=infxuser;password=PW") .setSystem("informix-direct") .setUser("infxuser") From 7c8700b6016c7196e5558a5beb2460264ca77df6 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Mon, 10 Jun 2024 21:30:02 -0400 Subject: [PATCH 6/8] solve for additional connection string variations --- .../jdbc/internal/JdbcConnectionUrlParser.java | 10 ++++++++-- .../jdbc/internal/JdbcConnectionUrlParserTest.java | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index 2effdd4b203b..e11c674763fc 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -868,6 +868,13 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { @Override DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); + builder = INFORMIX.doParse(jdbcUrl, builder); + builder.host(DEFAULT_HOST); + + int hostIndex = jdbcUrl.indexOf("://"); + if (hostIndex == -1) { + return builder; + } int informixUrlStartIdx = jdbcUrl.indexOf("informix-direct://") + "informix-direct://".length(); @@ -883,8 +890,7 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder.name(name); } - builder.host(DEFAULT_HOST); - return INFORMIX.doParse(jdbcUrl, builder); + return builder; } }, diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index e97eac2d667d..4f00423f6e92 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -686,6 +686,12 @@ public Stream provideArguments(ExtensionContext context) { .setName("infxdb") .setPort(9088) .build(), + arg("jdbc:informix-direct:") + .setSystem("informix-direct") + .setShortUrl("informix-direct://infxhost:9088") + .setHost("infxhost") + .setPort(9088) + .build(), // http://www.h2database.com/html/features.html#database_url arg("jdbc:h2:mem:").setShortUrl("h2:mem:").setSystem("h2").setSubtype("mem").build(), From fe5261b2da720dcdff04354ee6ede629ef090c4d Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Tue, 11 Jun 2024 18:37:06 -0400 Subject: [PATCH 7/8] rework informix-direct parsing based on feedback --- .../internal/JdbcConnectionUrlParser.java | 50 ++++++------------- .../internal/JdbcConnectionUrlParserTest.java | 19 ++++--- 2 files changed, 26 insertions(+), 43 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index e11c674763fc..5836e2ade370 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -833,10 +833,16 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { } }, INFORMIX_SQLI("informix-sqli") { + private static final int DEFAULT_PORT = 9088; + @Override DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); - builder = INFORMIX.doParse(jdbcUrl, builder); + + DbInfo dbInfo = builder.build(); + if (dbInfo.getPort() == null) { + builder.port(DEFAULT_PORT); + } int hostIndex = jdbcUrl.indexOf("://"); if (hostIndex == -1) { @@ -863,46 +869,20 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { }, INFORMIX_DIRECT("informix-direct") { - private static final String DEFAULT_HOST = "infxhost"; + private final Pattern pattern = Pattern.compile("://(.*?)(:|;|$)"); @Override DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); - builder = INFORMIX.doParse(jdbcUrl, builder); - builder.host(DEFAULT_HOST); - - int hostIndex = jdbcUrl.indexOf("://"); - if (hostIndex == -1) { - return builder; - } - - int informixUrlStartIdx = - jdbcUrl.indexOf("informix-direct://") + "informix-direct://".length(); - int colonLoc = jdbcUrl.indexOf(":", informixUrlStartIdx); - - String name; - if (colonLoc > -1) { - name = jdbcUrl.substring(informixUrlStartIdx, colonLoc); - } else { - name = jdbcUrl.substring(informixUrlStartIdx); - } - if (!name.isEmpty()) { - builder.name(name); - } - - return builder; - } - }, - INFORMIX { - private static final int DEFAULT_PORT = 9088; - - @Override - DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { - DbInfo dbInfo = builder.build(); - if (dbInfo.getPort() == null) { - builder.port(DEFAULT_PORT); + Matcher matcher = pattern.matcher(jdbcUrl); + if (matcher.find()) { + String name = matcher.group(1); + if (!name.isEmpty()) { + builder.name(name); + } } + builder.host(null); return builder; } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index 4f00423f6e92..d87aaca1be5a 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -671,26 +671,29 @@ public Stream provideArguments(ExtensionContext context) { .setShortUrl("informix-sqli:") .setPort(9088) .build(), + + // https://www.ibm.com/docs/en/informix-servers/12.10?topic=method-format-database-urls arg("jdbc:informix-direct://infxdb:999;user=infxuser;password=PW") .setSystem("informix-direct") + .setShortUrl("informix-direct:") .setUser("infxuser") - .setShortUrl("informix-direct://infxhost:999") - .setHost("infxhost") .setPort(999) .setName("infxdb") .build(), + arg("jdbc:informix-direct://infxdb;user=infxuser;password=PW") + .setSystem("informix-direct") + .setShortUrl("informix-direct:") + .setUser("infxuser") + .setName("infxdb") + .build(), arg("jdbc:informix-direct://infxdb") .setSystem("informix-direct") - .setShortUrl("informix-direct://infxhost:9088") - .setHost("infxhost") + .setShortUrl("informix-direct:") .setName("infxdb") - .setPort(9088) .build(), arg("jdbc:informix-direct:") .setSystem("informix-direct") - .setShortUrl("informix-direct://infxhost:9088") - .setHost("infxhost") - .setPort(9088) + .setShortUrl("informix-direct:") .build(), // http://www.h2database.com/html/features.html#database_url From 9cb55fe7745cf41df1f4d62103123fe6a54fcbb3 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Wed, 12 Jun 2024 15:23:47 +0300 Subject: [PATCH 8/8] remove port from informix-direct --- .../instrumentation/jdbc/internal/JdbcConnectionUrlParser.java | 3 ++- .../jdbc/internal/JdbcConnectionUrlParserTest.java | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index 6113eb06f723..aefab211aafc 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -872,6 +872,8 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { @Override DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder); + builder.host(null); + builder.port(null); Matcher matcher = pattern.matcher(jdbcUrl); if (matcher.find()) { @@ -880,7 +882,6 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { builder.name(name); } } - builder.host(null); return builder; } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index d87aaca1be5a..c4a41ca631fd 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -677,7 +677,6 @@ public Stream provideArguments(ExtensionContext context) { .setSystem("informix-direct") .setShortUrl("informix-direct:") .setUser("infxuser") - .setPort(999) .setName("infxdb") .build(), arg("jdbc:informix-direct://infxdb;user=infxuser;password=PW")