mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-15 15:55:54 +10:00
[강운덕] [LUCYSUS-1744] rac의 url을 좀더 정교하게 파악할수 있는 regex 개발.
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-profiler-bootstrap/trunk@1688 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
@@ -12,18 +12,19 @@ import java.util.regex.Pattern;
|
||||
*/
|
||||
public class JDBCUrlParser {
|
||||
|
||||
private static Pattern oracleRAC = Pattern.compile(".*HOST\\s*=\\s*([\\w\\.]*).*PORT\\s*=\\s*([\\d]*).*SERVICE_NAME\\s*=\\s*([\\w]*).*");
|
||||
|
||||
|
||||
public DatabaseInfo parse(String url) {
|
||||
// jdbc 체크
|
||||
String lowCaseURL = url.toLowerCase().trim();
|
||||
if (!lowCaseURL.startsWith("jdbc:")) {
|
||||
return createUnknownDataBase(url);
|
||||
}
|
||||
|
||||
if (jdbcTypeCheck(lowCaseURL, "mysql")) {
|
||||
if (driverTypeCheck(lowCaseURL, "mysql")) {
|
||||
return parseMysql(url);
|
||||
}
|
||||
if (jdbcTypeCheck(lowCaseURL, "oracle")) {
|
||||
if (driverTypeCheck(lowCaseURL, "oracle")) {
|
||||
return parseOracle(url);
|
||||
}
|
||||
return createUnknownDataBase(url);
|
||||
@@ -74,7 +75,7 @@ public class JDBCUrlParser {
|
||||
// return null;
|
||||
}
|
||||
|
||||
private boolean jdbcTypeCheck(String lowCaseURL, String type) {
|
||||
private boolean driverTypeCheck(String lowCaseURL, String type) {
|
||||
final int jdbcNextIndex = 5;
|
||||
return lowCaseURL.startsWith(type, jdbcNextIndex);
|
||||
}
|
||||
@@ -88,6 +89,29 @@ public class JDBCUrlParser {
|
||||
// thin driver url
|
||||
// jdbc:oracle:thin:@hostname:port:SID
|
||||
// "jdbc:oracle:thin:MYWORKSPACE/qwerty@localhost:1521:XE";
|
||||
// 들여 쓰기를 통해 token을 보기 좋게 나눈경우.
|
||||
// jdbc:oracle:thin:
|
||||
// @(
|
||||
// DESCRIPTION=(LOAD_BALANCE=on)
|
||||
// (
|
||||
// ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521)
|
||||
// )
|
||||
// (
|
||||
// ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1521)
|
||||
// )
|
||||
// (
|
||||
// CONNECT_DATA=(SERVICE_NAME=service)
|
||||
// )
|
||||
// )
|
||||
|
||||
static Pattern oracleRAC = Pattern.compile(
|
||||
"(" +
|
||||
".*[ADDRESS=].*\\(\\s*HOST\\s*=\\s*([\\w\\.]*\\s*\\)).*\\(\\s*PORT\\s*=\\s*([\\d]*\\s*\\))+" +
|
||||
").*" +
|
||||
"\\(\\s*SERVICE_NAME\\s*=\\s*([\\w]*)\\s*\\).*");
|
||||
//
|
||||
|
||||
|
||||
private DatabaseInfo parseOracle(String url) {
|
||||
StringMaker maker = new StringMaker(url);
|
||||
maker.after("jdbc:oracle:").after(":");
|
||||
@@ -140,6 +164,7 @@ public class JDBCUrlParser {
|
||||
StringMaker maker = new StringMaker(url);
|
||||
maker.after("jdbc:mysql:");
|
||||
// 10.98.133.22:3306 replacation driver같은 경우 n개가 가능할듯.
|
||||
// mm db? 의 경우도 고려해야 될듯하다.
|
||||
String host = maker.after("//").before('/').value();
|
||||
List<String> hostList = new ArrayList<String>(1);
|
||||
hostList.add(host);
|
||||
|
||||
+64
-10
@@ -1,7 +1,5 @@
|
||||
package com.profiler.modifier.db.util;
|
||||
package com.profiler.modifier.db;
|
||||
|
||||
import com.profiler.modifier.db.DatabaseInfo;
|
||||
import com.profiler.modifier.db.JDBCUrlParser;
|
||||
import junit.framework.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
@@ -10,6 +8,7 @@ import org.slf4j.LoggerFactory;
|
||||
import com.profiler.common.ServiceType;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -17,7 +16,7 @@ import java.net.URI;
|
||||
public class JDBCUrlParserTest {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(JDBCUrlParserTest.class);
|
||||
private com.profiler.modifier.db.JDBCUrlParser JDBCUrlParser = new JDBCUrlParser();
|
||||
private com.profiler.modifier.db.JDBCUrlParser jdbcUrlParser = new JDBCUrlParser();
|
||||
|
||||
@Test
|
||||
public void testURIParse() throws Exception {
|
||||
@@ -43,7 +42,7 @@ public class JDBCUrlParserTest {
|
||||
@Test
|
||||
public void mysqlParse1() {
|
||||
|
||||
DatabaseInfo dbInfo = JDBCUrlParser.parse("jdbc:mysql://ip_address:3306/database_name?useUnicode=yes&characterEncoding=UTF-8");
|
||||
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:mysql://ip_address:3306/database_name?useUnicode=yes&characterEncoding=UTF-8");
|
||||
Assert.assertEquals(dbInfo.getType(), ServiceType.MYSQL);
|
||||
Assert.assertEquals(dbInfo.getHost().get(0), ("ip_address:3306"));
|
||||
Assert.assertEquals(dbInfo.getDatabaseId(), "database_name");
|
||||
@@ -53,7 +52,7 @@ public class JDBCUrlParserTest {
|
||||
@Test
|
||||
public void mysqlParse2() {
|
||||
|
||||
DatabaseInfo dbInfo = JDBCUrlParser.parse("jdbc:mysql://10.98.133.22:3306/test_lucy_db");
|
||||
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:mysql://10.98.133.22:3306/test_lucy_db");
|
||||
Assert.assertEquals(dbInfo.getType(), ServiceType.MYSQL);
|
||||
Assert.assertEquals(dbInfo.getHost().get(0), "10.98.133.22:3306");
|
||||
|
||||
@@ -65,7 +64,7 @@ public class JDBCUrlParserTest {
|
||||
|
||||
@Test
|
||||
public void mysqlParse3() {
|
||||
DatabaseInfo dbInfo = JDBCUrlParser.parse("jdbc:mysql://61.74.71.31/log?useUnicode=yes&characterEncoding=UTF-8");
|
||||
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:mysql://61.74.71.31/log?useUnicode=yes&characterEncoding=UTF-8");
|
||||
Assert.assertEquals(dbInfo.getType(), ServiceType.MYSQL);
|
||||
Assert.assertEquals(dbInfo.getHost().get(0), "61.74.71.31");
|
||||
Assert.assertEquals(dbInfo.getDatabaseId(), "log");
|
||||
@@ -77,7 +76,7 @@ public class JDBCUrlParserTest {
|
||||
public void oracleParser1() {
|
||||
// jdbc:oracle:thin:@hostname:port:SID
|
||||
// "jdbc:oracle:thin:MYWORKSPACE/qwerty@localhost:1521:XE";
|
||||
DatabaseInfo dbInfo = JDBCUrlParser.parse("jdbc:oracle:thin:@hostname:port:SID");
|
||||
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:oracle:thin:@hostname:port:SID");
|
||||
Assert.assertEquals(dbInfo.getType(), ServiceType.ORACLE);
|
||||
Assert.assertEquals(dbInfo.getHost().get(0), "hostname:port");
|
||||
Assert.assertEquals(dbInfo.getDatabaseId(), "SID");
|
||||
@@ -89,7 +88,7 @@ public class JDBCUrlParserTest {
|
||||
public void oracleParser2() {
|
||||
// jdbc:oracle:thin:@hostname:port:SID
|
||||
// "jdbc:oracle:thin:MYWORKSPACE/qwerty@localhost:1521:XE";
|
||||
DatabaseInfo dbInfo = JDBCUrlParser.parse("jdbc:oracle:thin:MYWORKSPACE/qwerty@localhost:1521:XE");
|
||||
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:oracle:thin:MYWORKSPACE/qwerty@localhost:1521:XE");
|
||||
Assert.assertEquals(dbInfo.getType(), ServiceType.ORACLE);
|
||||
Assert.assertEquals(dbInfo.getHost().get(0), "localhost:1521");
|
||||
Assert.assertEquals(dbInfo.getDatabaseId(), "XE");
|
||||
@@ -108,7 +107,7 @@ public class JDBCUrlParserTest {
|
||||
"(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521))" +
|
||||
"(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1522))" +
|
||||
"(CONNECT_DATA=(SERVICE_NAME=service)))";
|
||||
DatabaseInfo dbInfo = JDBCUrlParser.parse(rac);
|
||||
DatabaseInfo dbInfo = jdbcUrlParser.parse(rac);
|
||||
Assert.assertEquals(dbInfo.getType(), ServiceType.ORACLE);
|
||||
Assert.assertEquals(dbInfo.getHost().get(0), "1.2.3.4:1521");
|
||||
|
||||
@@ -116,4 +115,59 @@ public class JDBCUrlParserTest {
|
||||
Assert.assertEquals(dbInfo.getUrl(), rac);
|
||||
logger.info(dbInfo.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void regexTest1() {
|
||||
String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)" +
|
||||
"(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521))" +
|
||||
"(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1522))" +
|
||||
"(CONNECT_DATA=(SERVICE_NAME=service)))";
|
||||
|
||||
Matcher matcher = JDBCUrlParser.oracleRAC.matcher(rac);
|
||||
Assert.assertTrue(matcher.matches());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void regexTest2() {
|
||||
String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)" +
|
||||
"(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521))" +
|
||||
// "(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1522))" +
|
||||
"(CONNECT_DATA=(SERVICE_NAME=service)))";
|
||||
|
||||
Matcher matcher = JDBCUrlParser.oracleRAC.matcher(rac);
|
||||
Assert.assertTrue(matcher.matches());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void regexTest3() {
|
||||
String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)" +
|
||||
"( ADDRESS = ( PROTOCOL=TCP) ( HOST = 1.2.3.4) ( PORT =1521))" +
|
||||
"(ADDRESS= (PROTOCOL =TCP)(HOST = 1.2.3.5) (PORT= 1522 ))" +
|
||||
"(CONNECT_DATA=(SERVICE_NAME=service)))";
|
||||
|
||||
Matcher matcher = JDBCUrlParser.oracleRAC.matcher(rac);
|
||||
Assert.assertTrue(matcher.matches());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void regexInvalidAddressTest1() {
|
||||
String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)" +
|
||||
// "(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521))" +
|
||||
// "(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1522))" +
|
||||
"(CONNECT_DATA=(SERVICE_NAME=service)))";
|
||||
|
||||
Matcher matcher = JDBCUrlParser.oracleRAC.matcher(rac);
|
||||
Assert.assertFalse(matcher.matches());
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void regexInvalidAddressTest2() {
|
||||
// String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)" +
|
||||
//// "(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521))" +
|
||||
// "(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1522))" +
|
||||
// "(CONNECT_DATA=(SERVICE_NAME=service)))";
|
||||
//
|
||||
// Matcher matcher = JDBCUrlParser.oracleRAC.matcher(rac);
|
||||
// Assert.assertFalse(matcher.matches());
|
||||
// }
|
||||
}
|
||||
Reference in New Issue
Block a user