Skip to content

Commit 0c32d3a

Browse files
committed
feat: add createDatabase method
1 parent 7a1c6f3 commit 0c32d3a

File tree

4 files changed

+36
-5
lines changed

4 files changed

+36
-5
lines changed

arex-instrumentation-api/src/main/java/io/arex/inst/runtime/util/MockUtils.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package io.arex.inst.runtime.util;
22

3+
import com.fasterxml.jackson.databind.JsonNode;
34
import io.arex.agent.bootstrap.model.ArexMocker;
45
import io.arex.agent.bootstrap.model.MockCategoryType;
56
import io.arex.agent.bootstrap.model.MockStrategyEnum;
67
import io.arex.agent.bootstrap.model.Mocker;
78
import io.arex.agent.bootstrap.model.Mocker.Target;
89
import io.arex.agent.bootstrap.util.MapUtils;
910
import io.arex.agent.bootstrap.util.StringUtil;
11+
import io.arex.agent.thirdparty.util.parse.sqlparse.SqlParse;
12+
import io.arex.agent.thirdparty.util.parse.sqlparse.constants.DbParseConstants;
13+
import io.arex.agent.thirdparty.util.parse.sqlparse.util.ParseUtil;
1014
import io.arex.inst.runtime.log.LogManager;
1115
import io.arex.inst.runtime.config.Config;
1216
import io.arex.inst.runtime.context.ArexContext;
@@ -16,10 +20,12 @@
1620
import io.arex.inst.runtime.serializer.Serializer;
1721
import io.arex.inst.runtime.service.DataService;
1822
import io.arex.inst.runtime.util.sizeof.AgentSizeOf;
23+
import net.sf.jsqlparser.JSQLParserException;
1924

2025
public final class MockUtils {
2126

2227
private static final String EMPTY_JSON = "{}";
28+
private static final SqlParse sqlParse = new SqlParse();
2329

2430
private MockUtils() {
2531
}
@@ -48,6 +54,25 @@ public static ArexMocker createDatabase(String method) {
4854
return create(MockCategoryType.DATABASE, method);
4955
}
5056

57+
public static ArexMocker createDatabase(String method, String sql, String dbName) {
58+
StringBuilder operationName = new StringBuilder();
59+
try {
60+
String[] splitSql = sql.split(";");
61+
for (String s : splitSql) {
62+
JsonNode parse = sqlParse.parse(s);
63+
if (parse != null) {
64+
String action = parse.get(DbParseConstants.ACTION).asText();
65+
String tableName = ParseUtil.parseTable(parse);
66+
operationName.append(dbName).append("-").append(tableName).append("-").append(action).append(";");
67+
}
68+
}
69+
} catch (JSQLParserException e) {
70+
LogManager.warn("createDatabase", "parse sql error", e);
71+
operationName = new StringBuilder(method);
72+
}
73+
return create(MockCategoryType.DATABASE, operationName.toString());
74+
}
75+
5176
public static ArexMocker createRedis(String method) {
5277
return create(MockCategoryType.REDIS, method);
5378
}

arex-instrumentation-api/src/test/java/io/arex/inst/runtime/util/MockUtilsTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ void createMocker() {
178178

179179
actualResult = MockUtils.createNettyProvider("query");
180180
assertEquals(MockCategoryType.NETTY_PROVIDER, actualResult.getCategoryType());
181+
182+
actualResult = MockUtils.createDatabase("query", "select * from test", "testDB");
183+
assertEquals(MockCategoryType.DATABASE, actualResult.getCategoryType());
181184
}
182185

183186
@Test

arex-instrumentation/database/arex-database-common/src/main/java/io/arex/inst/database/common/DatabaseExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public MockResult replay(String serializer) {
116116
}
117117

118118
private Mocker makeMocker(Object response, String serializer) {
119-
Mocker mocker = MockUtils.createDatabase(this.methodName);
119+
Mocker mocker = MockUtils.createDatabase(this.methodName, this.sql, this.dbName);
120120
mocker.getTargetRequest().setBody(this.sql);
121121
mocker.getTargetRequest().setAttribute("dbName", this.dbName);
122122
mocker.getTargetRequest().setAttribute("parameters", this.parameters);

arex-third-party/src/main/java/io/arex/agent/thirdparty/util/parse/sqlparse/util/ParseUtil.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
*/
1616
public class ParseUtil {
1717

18+
public static final String EMPTY = "";
1819

19-
public static Object parseTable(JsonNode result) {
20+
21+
public static String parseTable(JsonNode result) {
2022
switch (result.get(DbParseConstants.ACTION).asText()) {
2123
case DbParseConstants.SELECT:
2224
return parseSelectTableName(result);
2325
case DbParseConstants.DELETE:
24-
return parseDeleteTable(result);
26+
List<String> tableNames = parseDeleteTable(result);
27+
return tableNames.isEmpty() ? EMPTY : String.join(",", tableNames);
2528
case DbParseConstants.INSERT:
2629
return parseInsertTable(result);
2730
case DbParseConstants.REPLACE:
@@ -42,7 +45,7 @@ public static String parseSelectTableName(JsonNode result) {
4245
}
4346
return jsonNode.asText();
4447
}
45-
return null;
48+
return EMPTY;
4649
}
4750

4851
public static List<String> parseDeleteTable(JsonNode result) {
@@ -76,7 +79,7 @@ public static String parseCommonTableName(JsonNode result) {
7679
}
7780
return jsonNode.asText();
7881
}
79-
return null;
82+
return EMPTY;
8083
}
8184

8285
}

0 commit comments

Comments
 (0)