This is an automated email from the ASF dual-hosted git repository.

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new a5876c16a0 [INLONG-12088][Audit] Audit routing data source management 
supports domain names (#12089)
a5876c16a0 is described below

commit a5876c16a0aad20da85308f4f4ab48191c8126a7
Author: doleyzi <[email protected]>
AuthorDate: Fri Feb 27 17:41:56 2026 +0800

    [INLONG-12088][Audit] Audit routing data source management supports domain 
names (#12089)
    
    Co-authored-by: doleyzi <[email protected]>
---
 .../org/apache/inlong/audit/utils/RouteUtils.java  | 26 ++++++-
 .../apache/inlong/audit/utils/RouteUtilsTest.java  | 91 ++++++++++++++++++++++
 2 files changed, 113 insertions(+), 4 deletions(-)

diff --git 
a/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
 
b/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
index 67d764e845..10517cce4f 100644
--- 
a/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
+++ 
b/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
@@ -19,6 +19,9 @@ package org.apache.inlong.audit.utils;
 
 import org.apache.inlong.audit.entity.AuditRoute;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -26,6 +29,10 @@ import java.util.regex.PatternSyntaxException;
 
 public class RouteUtils {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(RouteUtils.class);
+    private static final Pattern JDBC_ADDRESS_PATTERN = 
Pattern.compile("^jdbc:\\w+://([a-zA-Z0-9.-]+):(\\d+)");
+    private static final String HOST_PORT_SEPARATOR = ":";
+
     public static boolean isValidRegex(String regex) {
         if (regex == null || regex.isEmpty()) {
             return false;
@@ -63,14 +70,25 @@ public class RouteUtils {
         return false;
     }
 
+    /**
+     * Extracts the host:port address from a JDBC URL.
+     * Both IP addresses and domain names are supported.
+     *
+     * @param jdbcUrl the JDBC URL, e.g. "jdbc:mysql://127.0.0.1:3306/testdb"
+     *               or "jdbc:mysql://db.example.com:3306/testdb"
+     * @return host:port string, or null if the URL is null, blank, or does 
not match
+     */
     public static String extractAddress(String jdbcUrl) {
         if (jdbcUrl == null || jdbcUrl.trim().isEmpty()) {
             return null;
         }
-        Pattern pattern = Pattern.compile("^jdbc:\\w+://([\\d\\.]+):(\\d+)");
-        Matcher matcher = pattern.matcher(jdbcUrl);
-        if (matcher.find()) {
-            return matcher.group(1) + ":" + matcher.group(2);
+        try {
+            Matcher matcher = JDBC_ADDRESS_PATTERN.matcher(jdbcUrl);
+            if (matcher.find()) {
+                return matcher.group(1) + HOST_PORT_SEPARATOR + 
matcher.group(2);
+            }
+        } catch (Exception e) {
+            LOG.warn("Failed to extract address from JDBC URL: {}", jdbcUrl, 
e);
         }
         return null;
     }
diff --git 
a/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
 
b/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
index f45b1631ca..5b1055bb95 100644
--- 
a/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
+++ 
b/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
@@ -72,6 +72,34 @@ public class RouteUtilsTest {
         assertEquals("192.168.1.100:5432", result);
     }
 
+    @Test
+    public void extractAddress_ValidJdbcUrlWithLocalhost() {
+        String jdbcUrl = "jdbc:mysql://localhost:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("localhost:3306", result);
+    }
+
+    @Test
+    public void extractAddress_ValidJdbcUrlWithDomainName() {
+        String jdbcUrl = "jdbc:mysql://db.example.com:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("db.example.com:3306", result);
+    }
+
+    @Test
+    public void extractAddress_ValidJdbcUrlWithMultiLevelSubdomain() {
+        String jdbcUrl = "jdbc:postgresql://mysql.db.example.com:5432/mydb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("mysql.db.example.com:5432", result);
+    }
+
+    @Test
+    public void extractAddress_ValidJdbcUrlWithHyphenatedDomain() {
+        String jdbcUrl = "jdbc:mysql://my-db-server.example.com:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("my-db-server.example.com:3306", result);
+    }
+
     @Test
     public void matchesAuditRoute_EmptyAuditRouteList() {
         List<AuditRoute> auditRouteList = new ArrayList<>();
@@ -181,4 +209,67 @@ public class RouteUtilsTest {
         result = RouteUtils.matchesAuditRoute("1", "groupIdABC", 
auditRouteList);
         assertFalse(result);
     }
+
+    @Test
+    public void extractAddress_DomainStartingWithHyphen() {
+        String jdbcUrl = "jdbc:mysql://-invalid.example.com:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("-invalid.example.com:3306", result);
+    }
+
+    @Test
+    public void extractAddress_DomainEndingWithHyphen() {
+        String jdbcUrl = "jdbc:mysql://invalid-.example.com:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("invalid-.example.com:3306", result);
+    }
+
+    @Test
+    public void extractAddress_DomainStartingWithDot() {
+        String jdbcUrl = "jdbc:mysql://.invalid.com:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals(".invalid.com:3306", result);
+    }
+
+    @Test
+    public void extractAddress_DomainEndingWithDot() {
+        String jdbcUrl = "jdbc:mysql://invalid.com.:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("invalid.com.:3306", result);
+    }
+
+    @Test
+    public void extractAddress_JdbcUrlWithQueryParameters() {
+        String jdbcUrl = 
"jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("localhost:3306", result);
+    }
+
+    @Test
+    public void extractAddress_JdbcUrlWithQueryParametersAndDomain() {
+        String jdbcUrl = 
"jdbc:mysql://db.example.com:3306/testdb?useSSL=false&characterEncoding=utf8";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertEquals("db.example.com:3306", result);
+    }
+
+    @Test
+    public void extractAddress_IPv6Address_ReturnsNull() {
+        String jdbcUrl = "jdbc:mysql://[::1]:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertNull(result);
+    }
+
+    @Test
+    public void extractAddress_IPv6FullAddress_ReturnsNull() {
+        String jdbcUrl = 
"jdbc:mysql://[2001:db8:85a3::8a2e:370:7334]:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertNull(result);
+    }
+
+    @Test
+    public void extractAddress_DomainWithUnderscore_ReturnsNull() {
+        String jdbcUrl = "jdbc:mysql://my_server.example.com:3306/testdb";
+        String result = RouteUtils.extractAddress(jdbcUrl);
+        assertNull(result);
+    }
 }

Reply via email to