Skip to content

Commit d9c8c2b

Browse files
authored
Merge pull request #1439 from hanbingleixue/cooperate-with-gala-gopher-alpha
修改性能测试的问题
2 parents b5bbe32 + 5e69eea commit d9c8c2b

File tree

15 files changed

+122
-128
lines changed

15 files changed

+122
-128
lines changed

sermant-plugins/sermant-metrics/metrics-common/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@
2626
<artifactId>sermant-agentcore-core</artifactId>
2727
<scope>provided</scope>
2828
</dependency>
29-
<!--SQL解析第三方依赖-->
30-
<dependency>
31-
<groupId>com.github.jsqlparser</groupId>
32-
<artifactId>jsqlparser</artifactId>
33-
<version>${jsqlparser.version}</version>
34-
</dependency>
3529
<!--test依赖-->
3630
<dependency>
3731
<groupId>junit</groupId>

sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/common/Constants.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,24 @@ public class Constants {
168168
*/
169169
public static final byte[] DUBBO_SERVER_ERROR = {31, 80, 50, 60, 70, 100};
170170

171+
/**
172+
* 时延范围纳秒
173+
*/
174+
public static final long[] LATENCY_RANGE = {3000000L, 10000000L, 50000000L, 100000000L, 500000000L, 1000000000L,
175+
10000000000L};
176+
177+
/**
178+
* 时延统计的key
179+
*/
180+
public static final String[] LATENCY_COUNT_KEY = {"COUNT_ZERO_TO_THREE", "COUNT_ZERO_TO_TEN",
181+
"COUNT_ZERO_TO_FIFTY", "COUNT_ZERO_TO_ONE_HUNDRED", "COUNT_ZERO_TO_FIVE_HUNDRED",
182+
"COUNT_ZERO_TO_ONE_THOUSAND", "COUNT_ZERO_TO_TEN_THOUSAND"};
183+
184+
/**
185+
* 空格字符
186+
*/
187+
public static final String SPACE = " ";
188+
171189
private Constants() {
172190
}
173191
}

sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/entity/MetricsRpcInfo.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
package com.huawei.metrics.entity;
1818

19-
import java.util.List;
20-
import java.util.concurrent.CopyOnWriteArrayList;
19+
import java.util.Map;
20+
import java.util.concurrent.ConcurrentHashMap;
2121
import java.util.concurrent.atomic.AtomicInteger;
2222
import java.util.concurrent.atomic.AtomicLong;
2323

@@ -40,7 +40,7 @@ public class MetricsRpcInfo extends MetricsInfo {
4040

4141
private AtomicInteger serverErrorCount = new AtomicInteger();
4242

43-
private List<Long> latencyList = new CopyOnWriteArrayList<>();
43+
private Map<String, AtomicInteger> latencyCounts = new ConcurrentHashMap<>();
4444

4545
public AtomicInteger getReqCount() {
4646
return reqCount;
@@ -74,12 +74,12 @@ public void setReqErrorCount(AtomicInteger reqErrorCount) {
7474
this.reqErrorCount = reqErrorCount;
7575
}
7676

77-
public List<Long> getLatencyList() {
78-
return latencyList;
77+
public Map<String, AtomicInteger> getLatencyCounts() {
78+
return latencyCounts;
7979
}
8080

81-
public void setLatencyList(List<Long> latencyList) {
82-
this.latencyList = latencyList;
81+
public void setLatencyCounts(Map<String, AtomicInteger> latencyCounts) {
82+
this.latencyCounts = latencyCounts;
8383
}
8484

8585
public AtomicInteger getClientErrorCount() {

sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/manager/MetricsManager.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.util.Map;
2424
import java.util.concurrent.ConcurrentHashMap;
25+
import java.util.concurrent.atomic.AtomicInteger;
2526

2627
/**
2728
* Metrics管理类
@@ -50,14 +51,35 @@ public static Map<String, MetricsRpcInfo> getRpcInfoMap() {
5051
* @param metricsRpcInfo RPC信息
5152
*/
5253
public static void saveRpcInfo(MetricsRpcInfo metricsRpcInfo) {
53-
String key = getKey(metricsRpcInfo);
54-
MetricsRpcInfo rpcInfo = METRICS_RPC_INFO_MAP.computeIfAbsent(key, s -> metricsRpcInfo);
55-
if (rpcInfo != metricsRpcInfo) {
56-
rpcInfo.getReqCount().getAndAdd(metricsRpcInfo.getReqCount().get());
57-
rpcInfo.getResponseCount().getAndAdd(metricsRpcInfo.getResponseCount().get());
58-
rpcInfo.getSumLatency().getAndAdd(metricsRpcInfo.getSumLatency().get());
59-
rpcInfo.getLatencyList().addAll(metricsRpcInfo.getLatencyList());
60-
rpcInfo.getReqErrorCount().getAndAdd(metricsRpcInfo.getReqErrorCount().get());
54+
MetricsRpcInfo rpcInfo = METRICS_RPC_INFO_MAP.computeIfAbsent(getKey(metricsRpcInfo), key -> metricsRpcInfo);
55+
if (rpcInfo == metricsRpcInfo) {
56+
return;
57+
}
58+
rpcInfo.getReqCount().getAndAdd(metricsRpcInfo.getReqCount().get());
59+
rpcInfo.getResponseCount().getAndAdd(metricsRpcInfo.getResponseCount().get());
60+
long latency = metricsRpcInfo.getSumLatency().get();
61+
rpcInfo.getSumLatency().getAndAdd(latency);
62+
rpcInfo.getReqErrorCount().getAndAdd(metricsRpcInfo.getReqErrorCount().get());
63+
for (int index = 0; index < Constants.LATENCY_RANGE.length; index++) {
64+
if (latency < Constants.LATENCY_RANGE[index]) {
65+
modifyLatencyCountsByRange(index, rpcInfo);
66+
break;
67+
}
68+
}
69+
}
70+
71+
/**
72+
* 根据时延范围下标修改时延统计数量。时延统计数量对应的时延范围包含该时延范围时,时延统计数量+1,
73+
* 由于时延统计数量自增排列,下标大于该时延范围下标的对应的时延范围都包含该时延范围时。
74+
*
75+
* @param rangeIndex 时延所属范围的数组下标
76+
* @param rpcInfo 指标信息
77+
*/
78+
private static void modifyLatencyCountsByRange(int rangeIndex, MetricsRpcInfo rpcInfo) {
79+
for (int index = rangeIndex; index < Constants.LATENCY_RANGE.length; index++) {
80+
AtomicInteger atomicInteger = rpcInfo.getLatencyCounts()
81+
.computeIfAbsent(Constants.LATENCY_COUNT_KEY[index], key -> new AtomicInteger());
82+
atomicInteger.getAndIncrement();
6183
}
6284
}
6385

sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/MysqlTablesNameFinder.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/SqlParseUtil.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,11 @@
1919
import com.huawei.metrics.common.Constants;
2020

2121
import com.huaweicloud.sermant.core.common.LoggerFactory;
22-
import com.huaweicloud.sermant.core.utils.StringUtils;
2322

24-
import net.sf.jsqlparser.JSQLParserException;
25-
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
26-
import net.sf.jsqlparser.statement.Statement;
27-
28-
import java.util.Locale;
29-
import java.util.Set;
3023
import java.util.logging.Level;
3124
import java.util.logging.Logger;
25+
import java.util.regex.Matcher;
26+
import java.util.regex.Pattern;
3227

3328
/**
3429
* SQL解析工具类
@@ -39,9 +34,16 @@
3934
public class SqlParseUtil {
4035
private static final Logger LOGGER = LoggerFactory.getLogger();
4136

42-
private static final String STATEMENT_CLASS_NAME_SUFFIX = "Statement";
37+
private static final Pattern COMMAND_TYPE_PATTERN =
38+
Pattern.compile("^*(INSERT\\b|UPDATE\\b|DELETE\\b|CREATE\\b|ALTER\\b|DROP\\b|TRUNCATE\\b|SET\\b"
39+
+ "|COMMIT\\b|SHOW\\b|USE\\b|SELECT\\b)",
40+
Pattern.CASE_INSENSITIVE);
4341

44-
private static final String STATEMENT_CLASS_NAME_PREFIX = "Plain";
42+
private static final Pattern TABLE_PATTERN =
43+
Pattern.compile("(?i)(?:CREATE\\s+INDEX\\s+\\$\\{\\w+\\}\\s+ON|SELECT\\s+\\*\\s+FROM|DROP\\s+INDEX\\s"
44+
+ "+\\w+\\s+ON|CREATE\\s+INDEX\\s+\\w+\\s+ON|ALTER\\s+TABLE|INSERT\\s+INTO|UPDATE|TRUNCATE\\s+TABLE"
45+
+ "|CREATE\\s+TABLE|DELETE\\s+FROM|DROP\\s+"
46+
+ "TABLE)\\s+`*(\\w+)`*", Pattern.CASE_INSENSITIVE);
4547

4648
private SqlParseUtil() {
4749
}
@@ -55,21 +57,18 @@ private SqlParseUtil() {
5557
public static String getApi(String sql) {
5658
StringBuilder stringBuilder = new StringBuilder();
5759
try {
58-
Statement statement = CCJSqlParserUtil.parse(sql);
59-
String className = statement.getClass().getSimpleName();
60-
String commandType = className.replace(STATEMENT_CLASS_NAME_PREFIX, StringUtils.EMPTY)
61-
.replace(STATEMENT_CLASS_NAME_SUFFIX, StringUtils.EMPTY)
62-
.toLowerCase(Locale.ROOT);
63-
stringBuilder.append(commandType);
64-
MysqlTablesNameFinder tablesNamesFinder = new MysqlTablesNameFinder();
65-
Set<String> tables = tablesNamesFinder.getTables(statement);
66-
if (tables != null) {
67-
for (String table : tables) {
68-
stringBuilder.append(Constants.CONNECT).append(table.toLowerCase(Locale.ROOT));
69-
}
60+
Matcher commandTypeMatcher = COMMAND_TYPE_PATTERN.matcher(sql);
61+
if (commandTypeMatcher.find()) {
62+
stringBuilder.append(commandTypeMatcher.group());
63+
}
64+
Matcher tableMatcher = TABLE_PATTERN.matcher(sql);
65+
while (tableMatcher.find()) {
66+
String group = tableMatcher.group();
67+
String[] groupStr = group.split(Constants.SPACE);
68+
stringBuilder.append(Constants.CONNECT).append(groupStr[groupStr.length - 1]);
7069
}
7170
return stringBuilder.toString();
72-
} catch (JSQLParserException | UnsupportedOperationException e) {
71+
} catch (UnsupportedOperationException e) {
7372
LOGGER.log(Level.INFO, "There is currently no table data in SQL.");
7473
return stringBuilder.toString();
7574
}

sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ public ExecuteContext after(ExecuteContext context) {
5656
metricsRpcInfo.getResponseCount().incrementAndGet();
5757
long latency = System.nanoTime() - (long) startTimeObject;
5858
metricsRpcInfo.getSumLatency().addAndGet(latency);
59-
metricsRpcInfo.getLatencyList().add(latency);
6059
MetricsManager.saveRpcInfo(metricsRpcInfo);
6160
return context;
6261
}

sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractQueryProtocolInterceptor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ public MetricsRpcInfo createRpcInfo(String sql, ExecuteContext context, long lat
5454
MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, enableSsl, protocol.getHost(), protocol.getPort(),
5555
sql);
5656
metricsRpcInfo.getSumLatency().getAndAdd(latency);
57-
metricsRpcInfo.getLatencyList().add(latency);
5857
return metricsRpcInfo;
5958
}
6059
}

sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractStandardClientExecuteInterceptor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ public ExecuteContext saveMetricInfo(ExecuteContext context, String sql, long la
5555
HostAddress hostAddress = client.getHostAddress();
5656
MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, enableSsl, hostAddress.host, hostAddress.port, sql);
5757
metricsRpcInfo.getSumLatency().getAndAdd(latency);
58-
metricsRpcInfo.getLatencyList().add(latency);
5958
MetricsManager.saveRpcInfo(metricsRpcInfo);
6059
return context;
6160
}

sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ public ExecuteContext collectMetrics(ExecuteContext context) {
7070
url.getHost(), url.getPort(), sql);
7171
long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY);
7272
metricsRpcInfo.getSumLatency().getAndAdd(latency);
73-
metricsRpcInfo.getLatencyList().add(latency);
7473
MetricsManager.saveRpcInfo(metricsRpcInfo);
7574
return context;
7675
} catch (SQLException | URISyntaxException e) {

sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/mysqlv5/interceptor/ConnectionInterceptor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ public ExecuteContext collectMetrics(ExecuteContext context) {
7373
url.getHost(), url.getPort(), sql);
7474
long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY);
7575
metricsRpcInfo.getSumLatency().getAndAdd(latency);
76-
metricsRpcInfo.getLatencyList().add(latency);
7776
MetricsManager.saveRpcInfo(metricsRpcInfo);
7877
return context;
7978
} catch (SQLException | URISyntaxException e) {

sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/interceptor/NativeSessionInterceptor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ public ExecuteContext collectMetrics(ExecuteContext context) {
6767
hostInfo.getHost(), hostInfo.getPort(), sql);
6868
long latency = System.nanoTime() - (long) startTime;
6969
metricsRpcInfo.getSumLatency().getAndAdd(latency);
70-
metricsRpcInfo.getLatencyList().add(latency);
7170
MetricsManager.saveRpcInfo(metricsRpcInfo);
7271
return context;
7372
}

0 commit comments

Comments
 (0)