Loading apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/AbstractURLParser.java +6 −6 Original line number Diff line number Diff line Loading @@ -31,14 +31,14 @@ public abstract class AbstractURLParser implements ConnectionURLParser { * * @return index range that database hosts. */ protected abstract int[] fetchDatabaseHostsIndexRange(); protected abstract URLLocation fetchDatabaseHostsIndexRange(); /** * Fetch the index range that database name from connection url. * * @return index range that database name. */ protected abstract int[] fetchDatabaseNameIndexRange(); protected abstract URLLocation fetchDatabaseNameIndexRange(); /** * Fetch database host(s) from connection url. Loading @@ -46,8 +46,8 @@ public abstract class AbstractURLParser implements ConnectionURLParser { * @return database host(s). */ protected String fetchDatabaseHostsFromURL() { int[] indexRange = fetchDatabaseHostsIndexRange(); return url.substring(indexRange[0], indexRange[1]); URLLocation hostsLocation = fetchDatabaseHostsIndexRange(); return url.substring(hostsLocation.startIndex(), hostsLocation.endIndex()); } /** Loading @@ -56,8 +56,8 @@ public abstract class AbstractURLParser implements ConnectionURLParser { * @return database name. */ protected String fetchDatabaseNameFromURL() { int[] indexRange = fetchDatabaseNameIndexRange(); return url.substring(indexRange[0], indexRange[1]); URLLocation hostsLocation = fetchDatabaseNameIndexRange(); return url.substring(hostsLocation.startIndex(), hostsLocation.endIndex()); } /** Loading apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java +4 −4 Original line number Diff line number Diff line Loading @@ -55,20 +55,20 @@ public class H2URLParser extends AbstractURLParser { } @Override protected int[] fetchDatabaseHostsIndexRange() { protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("//"); int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2); return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { protected URLLocation fetchDatabaseNameIndexRange() { int databaseStartTag = url.lastIndexOf("/"); int databaseEndTag = url.indexOf(";"); if (databaseEndTag == -1) { databaseEndTag = url.length(); } return new int[] {databaseStartTag + 1, databaseEndTag}; return new URLLocation(databaseStartTag + 1, databaseEndTag); } @Override Loading apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java +6 −6 Original line number Diff line number Diff line Loading @@ -41,26 +41,26 @@ public class MysqlURLParser extends AbstractURLParser { } @Override protected int[] fetchDatabaseHostsIndexRange() { protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("//"); int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2); return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { protected URLLocation fetchDatabaseNameIndexRange() { int databaseStartTag = url.lastIndexOf("/"); int databaseEndTag = url.indexOf("?", databaseStartTag); if (databaseEndTag == -1) { databaseEndTag = url.length(); } return new int[] {databaseStartTag + 1, databaseEndTag}; return new URLLocation(databaseStartTag + 1, databaseEndTag); } @Override public ConnectionInfo parse() { int[] hostRangeIndex = fetchDatabaseHostsIndexRange(); String hosts = url.substring(hostRangeIndex[0], hostRangeIndex[1]); URLLocation location = fetchDatabaseHostsIndexRange(); String hosts = url.substring(location.startIndex(), location.endIndex()); String[] hostSegment = hosts.split(","); if (hostSegment.length > 1) { StringBuilder sb = new StringBuilder(); Loading apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java +76 −7 Original line number Diff line number Diff line Loading @@ -18,8 +18,11 @@ package org.skywalking.apm.plugin.jdbc.connectionurl.parser; import java.util.ArrayList; import java.util.List; import org.skywalking.apm.network.trace.component.ComponentsDefine; import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo; import org.skywalking.apm.util.StringUtil; /** * {@link OracleURLParser} presents that how to parse oracle connection url. Loading @@ -38,29 +41,61 @@ public class OracleURLParser extends AbstractURLParser { private static final String DB_TYPE = "Oracle"; private static final int DEFAULT_PORT = 1521; public static final String SERVICE_NAME_FLAG = "@//"; public static final String TNSNAME_URL_FLAG = "DESCRIPTION"; public OracleURLParser(String url) { super(url); } @Override protected int[] fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("@"); protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex; if (isServiceNameURL()) { hostLabelStartIndex = url.indexOf(SERVICE_NAME_FLAG) + 3; } else { hostLabelStartIndex = url.indexOf("@") + 1; } int hostLabelEndIndex = url.lastIndexOf(":"); return new int[] {hostLabelStartIndex + 1, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { return new int[0]; protected URLLocation fetchDatabaseNameIndexRange() { int hostLabelStartIndex; int hostLabelEndIndex = url.length(); if (isServiceNameURL()) { hostLabelStartIndex = url.lastIndexOf("/") + 1; } else if (isTNSNameURL()) { hostLabelStartIndex = url.indexOf("=", url.indexOf("SERVICE_NAME")) + 1; hostLabelEndIndex = url.indexOf(")", hostLabelStartIndex); } else { hostLabelStartIndex = url.lastIndexOf(":") + 1; } return new URLLocation(hostLabelStartIndex, hostLabelEndIndex); } private boolean isServiceNameURL() { return url.contains(SERVICE_NAME_FLAG); } private boolean isTNSNameURL() { return url.contains(TNSNAME_URL_FLAG); } @Override public ConnectionInfo parse() { int[] hostRangeIndex = fetchDatabaseHostsIndexRange(); if (isTNSNameURL()) { return tnsNameURLParse(); } else { return commonsURLParse(); } } private ConnectionInfo commonsURLParse() { String host = fetchDatabaseHostsFromURL(); String[] hostSegment = splitDatabaseAddress(host); String databaseName = url.substring(hostRangeIndex[1] + 1); String databaseName = fetchDatabaseNameFromURL(); if (hostSegment.length == 1) { return new ConnectionInfo(ComponentsDefine.ORACLE, DB_TYPE, host, DEFAULT_PORT, databaseName); } else { Loading @@ -68,6 +103,40 @@ public class OracleURLParser extends AbstractURLParser { } } private ConnectionInfo tnsNameURLParse() { String host = parseDatabaseHostsFromURL(); String databaseName = fetchDatabaseNameFromURL(); return new ConnectionInfo(ComponentsDefine.ORACLE, DB_TYPE, host, databaseName); } private String parseDatabaseHostsFromURL() { int beginIndex = url.indexOf("DESCRIPTION"); List<String> hosts = new ArrayList<String>(); do { int hostStartIndex = url.indexOf("HOST", beginIndex); if (hostStartIndex == -1) { break; } int equalStartIndex = url.indexOf("=", hostStartIndex); int hostEndIndex = url.indexOf(")", hostStartIndex); String host = url.substring(equalStartIndex + 1, hostEndIndex); int port = DEFAULT_PORT; int portStartIndex = url.indexOf("PORT", hostEndIndex); int portEndIndex = url.length(); if (portStartIndex != -1) { int portEqualStartIndex = url.indexOf("=", portStartIndex); portEndIndex = url.indexOf(")", portEqualStartIndex); port = Integer.parseInt(url.substring(portEqualStartIndex + 1, portEndIndex).trim()); } hosts.add(host.trim() + ":" + port); beginIndex = portEndIndex; } while (true); return StringUtil.join(',', hosts.toArray(new String[0])); } private String[] splitDatabaseAddress(String address) { String[] hostSegment = address.split(":"); return hostSegment; Loading apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java +6 −6 Original line number Diff line number Diff line Loading @@ -41,26 +41,26 @@ public class PostgreSQLURLParser extends AbstractURLParser { } @Override protected int[] fetchDatabaseHostsIndexRange() { protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("//"); int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2); return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { protected URLLocation fetchDatabaseNameIndexRange() { int databaseStartTag = url.lastIndexOf("/"); int databaseEndTag = url.indexOf("?", databaseStartTag); if (databaseEndTag == -1) { databaseEndTag = url.length(); } return new int[] {databaseStartTag + 1, databaseEndTag}; return new URLLocation(databaseStartTag + 1, databaseEndTag); } @Override public ConnectionInfo parse() { int[] hostRangeIndex = fetchDatabaseHostsIndexRange(); String hosts = url.substring(hostRangeIndex[0], hostRangeIndex[1]); URLLocation location = fetchDatabaseHostsIndexRange(); String hosts = url.substring(location.startIndex(), location.endIndex()); String[] hostSegment = hosts.split(","); if (hostSegment.length > 1) { StringBuilder sb = new StringBuilder(); Loading Loading
apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/AbstractURLParser.java +6 −6 Original line number Diff line number Diff line Loading @@ -31,14 +31,14 @@ public abstract class AbstractURLParser implements ConnectionURLParser { * * @return index range that database hosts. */ protected abstract int[] fetchDatabaseHostsIndexRange(); protected abstract URLLocation fetchDatabaseHostsIndexRange(); /** * Fetch the index range that database name from connection url. * * @return index range that database name. */ protected abstract int[] fetchDatabaseNameIndexRange(); protected abstract URLLocation fetchDatabaseNameIndexRange(); /** * Fetch database host(s) from connection url. Loading @@ -46,8 +46,8 @@ public abstract class AbstractURLParser implements ConnectionURLParser { * @return database host(s). */ protected String fetchDatabaseHostsFromURL() { int[] indexRange = fetchDatabaseHostsIndexRange(); return url.substring(indexRange[0], indexRange[1]); URLLocation hostsLocation = fetchDatabaseHostsIndexRange(); return url.substring(hostsLocation.startIndex(), hostsLocation.endIndex()); } /** Loading @@ -56,8 +56,8 @@ public abstract class AbstractURLParser implements ConnectionURLParser { * @return database name. */ protected String fetchDatabaseNameFromURL() { int[] indexRange = fetchDatabaseNameIndexRange(); return url.substring(indexRange[0], indexRange[1]); URLLocation hostsLocation = fetchDatabaseNameIndexRange(); return url.substring(hostsLocation.startIndex(), hostsLocation.endIndex()); } /** Loading
apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java +4 −4 Original line number Diff line number Diff line Loading @@ -55,20 +55,20 @@ public class H2URLParser extends AbstractURLParser { } @Override protected int[] fetchDatabaseHostsIndexRange() { protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("//"); int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2); return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { protected URLLocation fetchDatabaseNameIndexRange() { int databaseStartTag = url.lastIndexOf("/"); int databaseEndTag = url.indexOf(";"); if (databaseEndTag == -1) { databaseEndTag = url.length(); } return new int[] {databaseStartTag + 1, databaseEndTag}; return new URLLocation(databaseStartTag + 1, databaseEndTag); } @Override Loading
apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java +6 −6 Original line number Diff line number Diff line Loading @@ -41,26 +41,26 @@ public class MysqlURLParser extends AbstractURLParser { } @Override protected int[] fetchDatabaseHostsIndexRange() { protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("//"); int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2); return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { protected URLLocation fetchDatabaseNameIndexRange() { int databaseStartTag = url.lastIndexOf("/"); int databaseEndTag = url.indexOf("?", databaseStartTag); if (databaseEndTag == -1) { databaseEndTag = url.length(); } return new int[] {databaseStartTag + 1, databaseEndTag}; return new URLLocation(databaseStartTag + 1, databaseEndTag); } @Override public ConnectionInfo parse() { int[] hostRangeIndex = fetchDatabaseHostsIndexRange(); String hosts = url.substring(hostRangeIndex[0], hostRangeIndex[1]); URLLocation location = fetchDatabaseHostsIndexRange(); String hosts = url.substring(location.startIndex(), location.endIndex()); String[] hostSegment = hosts.split(","); if (hostSegment.length > 1) { StringBuilder sb = new StringBuilder(); Loading
apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java +76 −7 Original line number Diff line number Diff line Loading @@ -18,8 +18,11 @@ package org.skywalking.apm.plugin.jdbc.connectionurl.parser; import java.util.ArrayList; import java.util.List; import org.skywalking.apm.network.trace.component.ComponentsDefine; import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo; import org.skywalking.apm.util.StringUtil; /** * {@link OracleURLParser} presents that how to parse oracle connection url. Loading @@ -38,29 +41,61 @@ public class OracleURLParser extends AbstractURLParser { private static final String DB_TYPE = "Oracle"; private static final int DEFAULT_PORT = 1521; public static final String SERVICE_NAME_FLAG = "@//"; public static final String TNSNAME_URL_FLAG = "DESCRIPTION"; public OracleURLParser(String url) { super(url); } @Override protected int[] fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("@"); protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex; if (isServiceNameURL()) { hostLabelStartIndex = url.indexOf(SERVICE_NAME_FLAG) + 3; } else { hostLabelStartIndex = url.indexOf("@") + 1; } int hostLabelEndIndex = url.lastIndexOf(":"); return new int[] {hostLabelStartIndex + 1, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { return new int[0]; protected URLLocation fetchDatabaseNameIndexRange() { int hostLabelStartIndex; int hostLabelEndIndex = url.length(); if (isServiceNameURL()) { hostLabelStartIndex = url.lastIndexOf("/") + 1; } else if (isTNSNameURL()) { hostLabelStartIndex = url.indexOf("=", url.indexOf("SERVICE_NAME")) + 1; hostLabelEndIndex = url.indexOf(")", hostLabelStartIndex); } else { hostLabelStartIndex = url.lastIndexOf(":") + 1; } return new URLLocation(hostLabelStartIndex, hostLabelEndIndex); } private boolean isServiceNameURL() { return url.contains(SERVICE_NAME_FLAG); } private boolean isTNSNameURL() { return url.contains(TNSNAME_URL_FLAG); } @Override public ConnectionInfo parse() { int[] hostRangeIndex = fetchDatabaseHostsIndexRange(); if (isTNSNameURL()) { return tnsNameURLParse(); } else { return commonsURLParse(); } } private ConnectionInfo commonsURLParse() { String host = fetchDatabaseHostsFromURL(); String[] hostSegment = splitDatabaseAddress(host); String databaseName = url.substring(hostRangeIndex[1] + 1); String databaseName = fetchDatabaseNameFromURL(); if (hostSegment.length == 1) { return new ConnectionInfo(ComponentsDefine.ORACLE, DB_TYPE, host, DEFAULT_PORT, databaseName); } else { Loading @@ -68,6 +103,40 @@ public class OracleURLParser extends AbstractURLParser { } } private ConnectionInfo tnsNameURLParse() { String host = parseDatabaseHostsFromURL(); String databaseName = fetchDatabaseNameFromURL(); return new ConnectionInfo(ComponentsDefine.ORACLE, DB_TYPE, host, databaseName); } private String parseDatabaseHostsFromURL() { int beginIndex = url.indexOf("DESCRIPTION"); List<String> hosts = new ArrayList<String>(); do { int hostStartIndex = url.indexOf("HOST", beginIndex); if (hostStartIndex == -1) { break; } int equalStartIndex = url.indexOf("=", hostStartIndex); int hostEndIndex = url.indexOf(")", hostStartIndex); String host = url.substring(equalStartIndex + 1, hostEndIndex); int port = DEFAULT_PORT; int portStartIndex = url.indexOf("PORT", hostEndIndex); int portEndIndex = url.length(); if (portStartIndex != -1) { int portEqualStartIndex = url.indexOf("=", portStartIndex); portEndIndex = url.indexOf(")", portEqualStartIndex); port = Integer.parseInt(url.substring(portEqualStartIndex + 1, portEndIndex).trim()); } hosts.add(host.trim() + ":" + port); beginIndex = portEndIndex; } while (true); return StringUtil.join(',', hosts.toArray(new String[0])); } private String[] splitDatabaseAddress(String address) { String[] hostSegment = address.split(":"); return hostSegment; Loading
apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java +6 −6 Original line number Diff line number Diff line Loading @@ -41,26 +41,26 @@ public class PostgreSQLURLParser extends AbstractURLParser { } @Override protected int[] fetchDatabaseHostsIndexRange() { protected URLLocation fetchDatabaseHostsIndexRange() { int hostLabelStartIndex = url.indexOf("//"); int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2); return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex}; return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex); } @Override protected int[] fetchDatabaseNameIndexRange() { protected URLLocation fetchDatabaseNameIndexRange() { int databaseStartTag = url.lastIndexOf("/"); int databaseEndTag = url.indexOf("?", databaseStartTag); if (databaseEndTag == -1) { databaseEndTag = url.length(); } return new int[] {databaseStartTag + 1, databaseEndTag}; return new URLLocation(databaseStartTag + 1, databaseEndTag); } @Override public ConnectionInfo parse() { int[] hostRangeIndex = fetchDatabaseHostsIndexRange(); String hosts = url.substring(hostRangeIndex[0], hostRangeIndex[1]); URLLocation location = fetchDatabaseHostsIndexRange(); String hosts = url.substring(location.startIndex(), location.endIndex()); String[] hostSegment = hosts.split(","); if (hostSegment.length > 1) { StringBuilder sb = new StringBuilder(); Loading