From da7ac927766f968642f0fb61c0a1a335f9f1e908 Mon Sep 17 00:00:00 2001 From: hanbingleixue Date: Thu, 18 Jan 2024 20:28:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0MYSQL=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E9=87=87=E9=9B=86=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hanbingleixue --- .../sermant-metrics/metrics-common/pom.xml | 58 ++++++++++ .../com/huawei/metrics/common/Constants.java | 10 +- .../com/huawei/metrics/common/ResultType.java | 0 .../huawei/metrics/config/MetricsConfig.java | 0 .../metrics/declarer/AbstractDeclarer.java | 0 .../huawei/metrics/entity/MetricsInfo.java | 6 +- .../huawei/metrics/entity/MetricsRpcInfo.java | 0 .../interceptor/AbstractMysqlInterceptor.java | 95 ++++++++++++++++ .../metrics/manager/MetricsManager.java | 0 .../huawei/metrics/util/InetAddressUtil.java | 77 +++++++++++++ .../metrics/util/ResultJudgmentUtil.java | 0 .../com/huawei/metrics/util/SqlParseUtil.java | 69 ++++++++++++ .../metrics/util/ThreadMetricsUtil.java} | 14 +-- ...ud.sermant.core.plugin.config.PluginConfig | 0 .../metrics-dubbo-plugin/pom.xml | 64 +++++++++++ .../alibaba/ExchangeCodecDeclarer.java | 0 .../alibaba/MonitorFilterDeclarer.java | 0 .../apache/ExchangeCodecDeclarer.java | 0 .../apache/MonitorFilterDeclarer.java | 0 .../interceptor/AbstractCodecInterceptor.java | 4 +- .../AbstractFilterInterceptor.java | 11 +- .../alibaba/ExchangeCodecInterceptor.java | 0 .../alibaba/MonitorFilterInterceptor.java | 0 .../apache/ExchangeCodecInterceptor.java | 0 .../apache/MonitorFilterInterceptor.java | 0 ....core.plugin.agent.declarer.PluginDeclarer | 20 ++++ .../metrics-mariadb2.x-plugin/pom.xml | 57 ++++++++++ .../declarer/ExecuteBatchDeclarer.java | 48 ++++++++ .../metrics/declarer/ExecuteDeclarer.java | 46 ++++++++ .../interceptor/ExecuteBatchInterceptor.java | 106 ++++++++++++++++++ .../interceptor/ExecuteInterceptor.java | 70 ++++++++++++ ....core.plugin.agent.declarer.PluginDeclarer | 18 +++ .../metrics-mariadb3.x-plugin/pom.xml | 57 ++++++++++ .../declarer/StandardClientDeclarer.java | 46 ++++++++ .../StandardClientInterceptor.java | 71 ++++++++++++ ....core.plugin.agent.declarer.PluginDeclarer | 17 +++ .../metrics-mysql5.0.x-plugin/pom.xml | 57 ++++++++++ .../metrics/declarer/ConnectionDeclarer.java | 48 ++++++++ .../declarer/PreparedStatementDeclarer.java | 46 ++++++++ .../interceptor/ConnectionInterceptor.java | 76 +++++++++++++ .../PreparedStatementInterceptor.java | 72 ++++++++++++ ....core.plugin.agent.declarer.PluginDeclarer | 19 ++++ .../metrics-mysql5.1.x-plugin/pom.xml | 57 ++++++++++ .../metrics/declarer/ConnectionDeclarer.java | 48 ++++++++ .../declarer/PreparedStatementDeclarer.java | 46 ++++++++ .../interceptor/ConnectionInterceptor.java | 78 +++++++++++++ .../PreparedStatementInterceptor.java | 72 ++++++++++++ ....core.plugin.agent.declarer.PluginDeclarer | 19 ++++ .../metrics-mysql8.x-plugin/pom.xml | 57 ++++++++++ .../declarer/NativeSessionDeclarer.java | 48 ++++++++ .../interceptor/NativeSessionInterceptor.java | 62 ++++++++++ ....core.plugin.agent.declarer.PluginDeclarer | 18 +++ .../sermant-metrics/metrics-service/pom.xml | 5 +- .../pom.xml | 55 +-------- .../httpclient/HttpClientDeclarer.java | 0 .../httpurlconnection/ConnectDeclarer.java | 0 .../httpurlconnection/DisconnectDeclarer.java | 0 .../metrics/declarer/okhttp/CallDeclarer.java | 0 .../declarer/okhttp3/CallDeclarer.java | 0 .../declarer/servlet/HttpServletDeclarer.java | 0 .../interceptor/AbstractHttpInterceptor.java | 6 +- .../httpclient/HttpClientInterceptor.java | 6 +- .../ConnectorInterceptor.java | 4 +- .../DisconnectorInterceptor.java | 11 +- .../interceptor/okhttp/CallInterceptor.java | 3 + .../interceptor/okhttp3/CallInterceptor.java | 0 .../servlet/HttpServletInterceptor.java | 3 +- ....core.plugin.agent.declarer.PluginDeclarer | 5 - ...ud.sermant.core.plugin.config.PluginConfig | 1 + sermant-plugins/sermant-metrics/pom.xml | 27 ++++- 70 files changed, 1815 insertions(+), 98 deletions(-) create mode 100644 sermant-plugins/sermant-metrics/metrics-common/pom.xml rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/common/Constants.java (97%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/common/ResultType.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/config/MetricsConfig.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/declarer/AbstractDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/entity/MetricsInfo.java (96%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/entity/MetricsRpcInfo.java (100%) create mode 100644 sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/interceptor/AbstractMysqlInterceptor.java rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/manager/MetricsManager.java (100%) create mode 100644 sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/InetAddressUtil.java rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/java/com/huawei/metrics/util/ResultJudgmentUtil.java (100%) create mode 100644 sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/SqlParseUtil.java rename sermant-plugins/sermant-metrics/{metrics-plugin/src/main/java/com/huawei/metrics/util/HttpUrlConnectionUtil.java => metrics-common/src/main/java/com/huawei/metrics/util/ThreadMetricsUtil.java} (75%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-common}/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig (100%) create mode 100644 sermant-plugins/sermant-metrics/metrics-dubbo-plugin/pom.xml rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/declarer/alibaba/ExchangeCodecDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/declarer/alibaba/MonitorFilterDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/declarer/apache/ExchangeCodecDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/declarer/apache/MonitorFilterDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/interceptor/AbstractCodecInterceptor.java (95%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java (91%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/ExchangeCodecInterceptor.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/MonitorFilterInterceptor.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/ExchangeCodecInterceptor.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-dubbo-plugin}/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/MonitorFilterInterceptor.java (100%) create mode 100644 sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/pom.xml create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteBatchDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteBatchInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/pom.xml create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/declarer/StandardClientDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/interceptor/StandardClientInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/pom.xml create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/pom.xml create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/pom.xml create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/declarer/NativeSessionDeclarer.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/interceptor/NativeSessionInterceptor.java create mode 100644 sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/pom.xml (58%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/declarer/httpclient/HttpClientDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/declarer/httpurlconnection/ConnectDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/declarer/httpurlconnection/DisconnectDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/declarer/okhttp/CallDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/declarer/okhttp3/CallDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/declarer/servlet/HttpServletDeclarer.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/interceptor/AbstractHttpInterceptor.java (95%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/interceptor/httpclient/HttpClientInterceptor.java (91%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/ConnectorInterceptor.java (92%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/DisconnectorInterceptor.java (87%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/interceptor/okhttp/CallInterceptor.java (94%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/interceptor/okhttp3/CallInterceptor.java (100%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/java/com/huawei/metrics/interceptor/servlet/HttpServletInterceptor.java (95%) rename sermant-plugins/sermant-metrics/{metrics-plugin => metrics-springcloud-plugin}/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer (80%) create mode 100644 sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig diff --git a/sermant-plugins/sermant-metrics/metrics-common/pom.xml b/sermant-plugins/sermant-metrics/metrics-common/pom.xml new file mode 100644 index 0000000000..5004aeb4f7 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-common/pom.xml @@ -0,0 +1,58 @@ + + + + com.huaweicloud.sermant + sermant-metrics + 1.0.0 + + 4.0.0 + + metrics-common + + metrics-common + The common module of metrics. + + + 8 + 8 + 4.4 + + + + + com.huaweicloud.sermant + sermant-agentcore-core + provided + + + + com.github.jsqlparser + jsqlparser + ${jsqlparser.version} + + + + junit + junit + test + + + org.mockito + mockito-inline + test + + + org.junit.jupiter + junit-jupiter + test + + + org.mockito + mockito-core + ${mockito-core.version} + test + + + diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/common/Constants.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/common/Constants.java similarity index 97% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/common/Constants.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/common/Constants.java index 540aba8195..2f0a275acc 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/common/Constants.java +++ b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/common/Constants.java @@ -98,11 +98,6 @@ public class Constants { */ public static final String SIDE_KEY = "side"; - /** - * RPC信息保存到context局部变量中的key - */ - public static final String RPC_INFO_KEY = "rpcInfo"; - /** * 服务调用开始时间保存到context局部变量中的key */ @@ -123,6 +118,11 @@ public class Constants { */ public static final String HTTPS_PROTOCOL = "https"; + /** + * mysql协议 + */ + public static final String MYSQL_PROTOCOL = "mysql"; + /** * 最大成功响应编码 */ diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/common/ResultType.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/common/ResultType.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/common/ResultType.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/common/ResultType.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/config/MetricsConfig.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/config/MetricsConfig.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/config/MetricsConfig.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/config/MetricsConfig.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/AbstractDeclarer.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/declarer/AbstractDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/AbstractDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/declarer/AbstractDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/entity/MetricsInfo.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/entity/MetricsInfo.java similarity index 96% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/entity/MetricsInfo.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/entity/MetricsInfo.java index c1cb8d11a1..03b45faa0c 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/entity/MetricsInfo.java +++ b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/entity/MetricsInfo.java @@ -41,7 +41,7 @@ public class MetricsInfo { /** * 服务端端口 */ - private String serverPort; + private int serverPort; /** * L4角色信息 @@ -117,11 +117,11 @@ public void setServerIp(String serverIp) { this.serverIp = serverIp; } - public String getServerPort() { + public int getServerPort() { return serverPort; } - public void setServerPort(String serverPort) { + public void setServerPort(int serverPort) { this.serverPort = serverPort; } diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/entity/MetricsRpcInfo.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/entity/MetricsRpcInfo.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/entity/MetricsRpcInfo.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/entity/MetricsRpcInfo.java diff --git a/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/interceptor/AbstractMysqlInterceptor.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/interceptor/AbstractMysqlInterceptor.java new file mode 100644 index 0000000000..6533cd0bb9 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/interceptor/AbstractMysqlInterceptor.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.common.Constants; +import com.huawei.metrics.common.ResultType; +import com.huawei.metrics.entity.MetricsRpcInfo; +import com.huawei.metrics.util.InetAddressUtil; +import com.huawei.metrics.util.ResultJudgmentUtil; +import com.huawei.metrics.util.SqlParseUtil; + +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; +import com.huaweicloud.sermant.core.plugin.agent.interceptor.Interceptor; + +import java.sql.SQLException; + +/** + * MYSQL拦截器父类 + * + * @author zhp + * @since 2024-01-15 + */ +public abstract class AbstractMysqlInterceptor implements Interceptor { + @Override + public ExecuteContext after(ExecuteContext context) { + return collectMetrics(context); + } + + /** + * 采集指标信息 + * + * @param context 上下文信息 + * @return ExecuteContext 上下文信息 + */ + public abstract ExecuteContext collectMetrics(ExecuteContext context); + + @Override + public ExecuteContext onThrow(ExecuteContext context) { + return context; + } + + /** + * 初始化指标数据 + * + * @param context 上下文信息 + * @param enableSsl 是否开启SSL + * @param serverIp 服务端IP + * @param serverPort 服务端端口 + * @param sql 执行的SQL + * @return 指标信息 + */ + public MetricsRpcInfo initMetricsRpcInfo(ExecuteContext context, boolean enableSsl, String serverIp, + int serverPort, String sql) { + MetricsRpcInfo metricsRpcInfo = new MetricsRpcInfo(); + metricsRpcInfo.setClientIp(InetAddressUtil.getHostAddress()); + metricsRpcInfo.setServerIp(serverIp); + metricsRpcInfo.setServerPort(serverPort); + metricsRpcInfo.setProtocol(Constants.MYSQL_PROTOCOL); + metricsRpcInfo.setEnableSsl(enableSsl); + metricsRpcInfo.setL7Role(Constants.CLIENT_ROLE); + metricsRpcInfo.setL4Role(Constants.TCP_PROTOCOL + Constants.CONNECT + metricsRpcInfo.getL7Role()); + metricsRpcInfo.getReqCount().getAndIncrement(); + metricsRpcInfo.getResponseCount().getAndIncrement(); + metricsRpcInfo.setUrl(SqlParseUtil.getApi(sql)); + if (context.getThrowable() == null) { + return metricsRpcInfo; + } + metricsRpcInfo.getReqErrorCount().getAndIncrement(); + if (!(context.getThrowable() instanceof SQLException)) { + return metricsRpcInfo; + } + SQLException exception = (SQLException) context.getThrowable(); + int value = ResultJudgmentUtil.judgeMysqlResult(exception.getErrorCode()); + if (ResultType.CLIENT_ERROR.getValue() == value) { + metricsRpcInfo.getClientErrorCount().getAndIncrement(); + } else if (ResultType.SERVER_ERROR.getValue() == value) { + metricsRpcInfo.getServerErrorCount().getAndIncrement(); + } + return metricsRpcInfo; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/manager/MetricsManager.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/manager/MetricsManager.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/manager/MetricsManager.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/manager/MetricsManager.java diff --git a/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/InetAddressUtil.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/InetAddressUtil.java new file mode 100644 index 0000000000..399c375feb --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/InetAddressUtil.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2023-2023 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.util; + +import com.huaweicloud.sermant.core.utils.StringUtils; + +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.util.Enumeration; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * 网络地址工具类 + * + * @author zhp + * @since 2023-12-15 + */ +public class InetAddressUtil { + private static final Logger LOGGER = Logger.getLogger(InetAddressUtil.class.getName()); + + private static volatile String hostAddress; + + private InetAddressUtil() { + } + + /** + * 获取本机IP地址 + * + * @return IP地址 + */ + public static String getHostAddress() { + if (!StringUtils.isEmpty(hostAddress)) { + return hostAddress; + } + synchronized (InetAddressUtil.class) { + if (!StringUtils.isEmpty(hostAddress)) { + return hostAddress; + } + try { + Enumeration networkInterface = NetworkInterface.getNetworkInterfaces(); + while (networkInterface.hasMoreElements()) { + NetworkInterface ni = networkInterface.nextElement(); + for (Enumeration inetAdd = ni.getInetAddresses(); + inetAdd.hasMoreElements(); ) { + InetAddress inetAddress = inetAdd.nextElement(); + if (!inetAddress.isLoopbackAddress() && inetAddress.isSiteLocalAddress()) { + hostAddress = inetAddress.getHostAddress(); + return hostAddress; + } + } + } + hostAddress = InetAddress.getLocalHost().getHostAddress(); + return hostAddress; + } catch (UnknownHostException | SocketException e) { + LOGGER.log(Level.SEVERE, "Unable to obtain local host address."); + } + } + return hostAddress; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/util/ResultJudgmentUtil.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/ResultJudgmentUtil.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/util/ResultJudgmentUtil.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/ResultJudgmentUtil.java diff --git a/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/SqlParseUtil.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/SqlParseUtil.java new file mode 100644 index 0000000000..b84ca7b95f --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/SqlParseUtil.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2023-2023 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.util; + +import com.huawei.metrics.common.Constants; + +import com.huaweicloud.sermant.core.common.LoggerFactory; +import com.huaweicloud.sermant.core.utils.StringUtils; + +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.statement.Statement; +import net.sf.jsqlparser.util.TablesNamesFinder; + +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * SQL解析工具类 + * + * @author zhp + * @since 2023-12-15 + */ +public class SqlParseUtil { + private static final Logger LOGGER = LoggerFactory.getLogger(); + + private SqlParseUtil() { + } + + /** + * 获取mysql的API维度信息(命令类型_表名) + * + * @param sql 执行的SQL语句 + * @return API + */ + public static String getApi(String sql) { + StringBuilder stringBuilder = new StringBuilder(); + try { + Statement statement = CCJSqlParserUtil.parse(sql); + stringBuilder.append(statement.getClass().getSimpleName().replace("Statement", StringUtils.EMPTY)); + TablesNamesFinder tablesNamesFinder = new TablesNamesFinder(); + List tables = tablesNamesFinder.getTableList(statement); + if (tables != null) { + for (String table : tables) { + stringBuilder.append(Constants.CONNECT).append(table); + } + } + return stringBuilder.toString(); + } catch (JSQLParserException | UnsupportedOperationException e) { + LOGGER.log(Level.INFO, "There is currently no table data in SQL."); + return stringBuilder.toString(); + } + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/util/HttpUrlConnectionUtil.java b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/ThreadMetricsUtil.java similarity index 75% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/util/HttpUrlConnectionUtil.java rename to sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/ThreadMetricsUtil.java index a7b9137f6c..452a202fa3 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/util/HttpUrlConnectionUtil.java +++ b/sermant-plugins/sermant-metrics/metrics-common/src/main/java/com/huawei/metrics/util/ThreadMetricsUtil.java @@ -17,21 +17,21 @@ package com.huawei.metrics.util; /** - * HttpUrlConnection工具类,用于线程数据传递 + * 线程工具类,用于线程数据传递 * * @author zhp * @since 2023-12-15 */ -public class HttpUrlConnectionUtil { +public class ThreadMetricsUtil { /** - * 线程变量存储,主要存储请求开始时间 + * 线程变量存储,主要存储请求开始时间和预编译SQL */ - private static final ThreadLocal START_TIME_THREAD_LOCAL = new InheritableThreadLocal<>(); + private static final ThreadLocal START_TIME_THREAD_LOCAL = new InheritableThreadLocal<>(); /** * 构造函数 */ - private HttpUrlConnectionUtil() { + private ThreadMetricsUtil() { } /** @@ -39,7 +39,7 @@ private HttpUrlConnectionUtil() { * * @param value 变量信息 */ - public static void setValue(Long value) { + public static void setValue(Object value) { START_TIME_THREAD_LOCAL.set(value); } @@ -48,7 +48,7 @@ public static void setValue(Long value) { * * @return 变量信息 */ - public static Long getValue() { + public static Object getValue() { return START_TIME_THREAD_LOCAL.get(); } diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig b/sermant-plugins/sermant-metrics/metrics-common/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig rename to sermant-plugins/sermant-metrics/metrics-common/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig diff --git a/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/pom.xml b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/pom.xml new file mode 100644 index 0000000000..6b222a7cf1 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/pom.xml @@ -0,0 +1,64 @@ + + + + com.huaweicloud.sermant + sermant-metrics + 1.0.0 + + 4.0.0 + + metrics-dubbo-plugin + + metrics-dubbo-plugin + The plugin module of metrics. + + + false + plugin + 2.5.7 + 2.7.3 + + + + + com.huaweicloud.sermant + sermant-agentcore-core + provided + + + com.huaweicloud.sermant + metrics-common + ${project.version} + + + com.alibaba + dubbo + ${alibaba.dubbo.version} + provided + + + org.apache.dubbo + dubbo + ${apache.dubbo.version} + provided + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + org.apache.maven.plugins + maven-shade-plugin + + + + diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/ExchangeCodecDeclarer.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/ExchangeCodecDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/ExchangeCodecDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/ExchangeCodecDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/MonitorFilterDeclarer.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/MonitorFilterDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/MonitorFilterDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/alibaba/MonitorFilterDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/apache/ExchangeCodecDeclarer.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/apache/ExchangeCodecDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/apache/ExchangeCodecDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/apache/ExchangeCodecDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/apache/MonitorFilterDeclarer.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/apache/MonitorFilterDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/apache/MonitorFilterDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/declarer/apache/MonitorFilterDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractCodecInterceptor.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractCodecInterceptor.java similarity index 95% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractCodecInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractCodecInterceptor.java index 77f25363eb..7e64077cc4 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractCodecInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractCodecInterceptor.java @@ -106,7 +106,7 @@ private void initAddressAndRole(MetricsRpcInfo metricsRpcInfo, String role, Inet metricsRpcInfo.setL7Role(role); metricsRpcInfo.setClientIp(clientAddress.getAddress().getHostAddress()); metricsRpcInfo.setServerIp(serverAddress.getAddress().getHostAddress()); - metricsRpcInfo.setServerPort(StringUtils.getString(serverAddress.getPort())); + metricsRpcInfo.setServerPort(serverAddress.getPort()); } /** @@ -122,10 +122,12 @@ public void fillErrorCountInfo(byte status, MetricsRpcInfo metricsRpcInfo) { } if (value == ResultType.CLIENT_ERROR.getValue()) { metricsRpcInfo.getClientErrorCount().getAndIncrement(); + metricsRpcInfo.getReqErrorCount().getAndIncrement(); return; } if (value == ResultType.SERVER_ERROR.getValue()) { metricsRpcInfo.getServerErrorCount().getAndIncrement(); + metricsRpcInfo.getReqErrorCount().getAndIncrement(); } } } diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java similarity index 91% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java index 7bdc46dbdf..6a843b30c6 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractFilterInterceptor.java @@ -64,15 +64,6 @@ public ExecuteContext after(ExecuteContext context) { @Override public ExecuteContext onThrow(ExecuteContext context) { - if (!isValid(context)) { - return context; - } - Object metrcisObject = context.getLocalFieldValue(Constants.RPC_INFO_KEY); - if (!(metrcisObject instanceof MetricsRpcInfo)) { - return context; - } - MetricsRpcInfo metricsRpcInfo = (MetricsRpcInfo) metrcisObject; - metricsRpcInfo.getReqErrorCount().incrementAndGet(); return context; } @@ -142,7 +133,7 @@ private void initAddressAndRole(MetricsRpcInfo metricsRpcInfo, InetSocketAddress InetSocketAddress serverAddress, String role) { metricsRpcInfo.setClientIp(clientAddress.getHostName()); metricsRpcInfo.setServerIp(serverAddress.getHostName()); - metricsRpcInfo.setServerPort(StringUtils.getString(serverAddress.getPort())); + metricsRpcInfo.setServerPort(serverAddress.getPort()); metricsRpcInfo.setL7Role(role); } } diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/ExchangeCodecInterceptor.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/ExchangeCodecInterceptor.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/ExchangeCodecInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/ExchangeCodecInterceptor.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/MonitorFilterInterceptor.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/MonitorFilterInterceptor.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/MonitorFilterInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/alibaba/MonitorFilterInterceptor.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/ExchangeCodecInterceptor.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/ExchangeCodecInterceptor.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/ExchangeCodecInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/ExchangeCodecInterceptor.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/MonitorFilterInterceptor.java b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/MonitorFilterInterceptor.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/MonitorFilterInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/java/com/huawei/metrics/interceptor/dubbo/apache/MonitorFilterInterceptor.java diff --git a/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer new file mode 100644 index 0000000000..18c5a6d1b0 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-dubbo-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -0,0 +1,20 @@ +# +# Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +com.huawei.metrics.declarer.alibaba.ExchangeCodecDeclarer +com.huawei.metrics.declarer.alibaba.MonitorFilterDeclarer +com.huawei.metrics.declarer.apache.ExchangeCodecDeclarer +com.huawei.metrics.declarer.apache.MonitorFilterDeclarer \ No newline at end of file diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/pom.xml b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/pom.xml new file mode 100644 index 0000000000..60381e44a9 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/pom.xml @@ -0,0 +1,57 @@ + + + + com.huaweicloud.sermant + sermant-metrics + 1.0.0 + + 4.0.0 + + metrics-mariadb2.x-plugin + + metrics-mariadb2.x-plugin + The plugin module of metrics. + + + false + plugin + 2.7.0 + + + + + com.huaweicloud.sermant + sermant-agentcore-core + provided + + + com.huaweicloud.sermant + metrics-common + ${project.version} + + + org.mariadb.jdbc + mariadb-java-client + ${mariadb.version} + provided + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + org.apache.maven.plugins + maven-shade-plugin + + + + diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteBatchDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteBatchDeclarer.java new file mode 100644 index 0000000000..f357e4eef7 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteBatchDeclarer.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.ExecuteBatchInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * mariadb2.x sql批量执行方法拦截声明 + * + * @author zhp + * @since 2024-01-15 + */ +public class ExecuteBatchDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol"; + + private static final String[] METHOD_NAMES = {"executeBatchServer", "executeBatchClient", "executeBatchStmt"}; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.nameEquals(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.nameContains(METHOD_NAMES), + new ExecuteBatchInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteDeclarer.java new file mode 100644 index 0000000000..860c9f8f5d --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/declarer/ExecuteDeclarer.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.ExecuteInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * mariadb2.x sql执行方法拦截声明 + * + * @author zhp + * @since 2024-01-15 + */ +public class ExecuteDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol"; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.nameEquals(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.nameEquals("executeQuery"), + new ExecuteInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteBatchInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteBatchInterceptor.java new file mode 100644 index 0000000000..dd8a6685a0 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteBatchInterceptor.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.common.Constants; +import com.huawei.metrics.entity.MetricsRpcInfo; +import com.huawei.metrics.manager.MetricsManager; + +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; +import com.huaweicloud.sermant.core.utils.StringUtils; + +import org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol; +import org.mariadb.jdbc.internal.util.dao.ClientPrepareResult; +import org.mariadb.jdbc.internal.util.dao.ServerPrepareResult; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; + +/** + * Mariadb2.x SQL批量执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class ExecuteBatchInterceptor extends AbstractMysqlInterceptor { + private static final int PARAM_COUNT = 3; + + private static final int SQL_PARAM_INDEX = 2; + + private static final int SERVER_PREPARE_RESULT_INDEX = 1; + + private static final int CLIENT_PREPARE_RESULT_INDEX = 2; + + private static final int ENABLE_NUM = 2; + + @Override + public ExecuteContext before(ExecuteContext context) { + context.setLocalFieldValue(Constants.START_TIME_KEY, System.nanoTime()); + return context; + } + + @Override + public ExecuteContext collectMetrics(ExecuteContext context) { + if (context.getArguments() == null || context.getArguments().length < PARAM_COUNT) { + return context; + } + List sqlList = getSqlList(context); + if (sqlList.isEmpty()) { + return context; + } + AbstractQueryProtocol protocol = (AbstractQueryProtocol) context.getObject(); + if (protocol.getSocket() == null || protocol.getSocket().getLocalAddress() == null + || protocol.getOptions() == null) { + return context; + } + long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY); + long avgLatency = new BigDecimal(latency).divide(new BigDecimal(sqlList.size()), ENABLE_NUM, + RoundingMode.HALF_UP).longValue(); + for (String sql : sqlList) { + MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, protocol.getOptions().useSsl, + protocol.getSocket().getLocalAddress().getHostAddress(), protocol.getPort(), sql); + metricsRpcInfo.getSumLatency().getAndAdd(avgLatency); + metricsRpcInfo.getLatencyList().add(avgLatency); + MetricsManager.saveRpcInfo(metricsRpcInfo); + } + return context; + } + + /** + * 获取SQL数据 + * + * @param context 上下文信息 + * @return SQL信息 + */ + private List getSqlList(ExecuteContext context) { + List sqlList = new ArrayList<>(); + String methodName = context.getMethod().getName(); + if (StringUtils.equals(methodName, "executeBatchStmt")) { + List queries = (List) context.getArguments()[SQL_PARAM_INDEX]; + sqlList.addAll(queries); + } else if (StringUtils.equals(methodName, "executeBatchServer")) { + ServerPrepareResult result = (ServerPrepareResult) context.getArguments()[SERVER_PREPARE_RESULT_INDEX]; + sqlList.add(result.getSql()); + } else { + ClientPrepareResult result = (ClientPrepareResult) context.getArguments()[CLIENT_PREPARE_RESULT_INDEX]; + sqlList.add(result.getSql()); + } + return sqlList; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteInterceptor.java new file mode 100644 index 0000000000..ddd711fa2e --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/java/com/huawei/metrics/interceptor/ExecuteInterceptor.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.common.Constants; +import com.huawei.metrics.entity.MetricsRpcInfo; +import com.huawei.metrics.manager.MetricsManager; + +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; + +import org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol; +import org.mariadb.jdbc.internal.util.dao.ClientPrepareResult; + +/** + * Mariadb2.x SQL执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class ExecuteInterceptor extends AbstractMysqlInterceptor { + private static final int PARAM_COUNT = 3; + + private static final int SQL_PARAM_INDEX = 2; + + @Override + public ExecuteContext before(ExecuteContext context) { + context.setLocalFieldValue(Constants.START_TIME_KEY, System.nanoTime()); + return context; + } + + @Override + public ExecuteContext collectMetrics(ExecuteContext context) { + if (context.getArguments() == null || context.getArguments().length < PARAM_COUNT) { + return context; + } + String sql = null; + if (context.getArguments()[SQL_PARAM_INDEX] instanceof String) { + sql = (String) context.getArguments()[SQL_PARAM_INDEX]; + } else if (context.getArguments()[SQL_PARAM_INDEX] instanceof ClientPrepareResult) { + ClientPrepareResult clientPrepareResult = (ClientPrepareResult) context.getArguments()[SQL_PARAM_INDEX]; + sql = clientPrepareResult.getSql(); + } + AbstractQueryProtocol protocol = (AbstractQueryProtocol) context.getObject(); + if (protocol.getSocket() == null || protocol.getSocket().getLocalAddress() == null + || protocol.getOptions() == null) { + return context; + } + MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, protocol.getOptions().useSsl, + protocol.getSocket().getLocalAddress().getHostAddress(), protocol.getPort(), sql); + long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY); + metricsRpcInfo.getSumLatency().getAndAdd(latency); + metricsRpcInfo.getLatencyList().add(latency); + MetricsManager.saveRpcInfo(metricsRpcInfo); + return context; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer new file mode 100644 index 0000000000..75d6a15665 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb2.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -0,0 +1,18 @@ +# +# Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +com.huawei.metrics.declarer.ExecuteBatchDeclarer +com.huawei.metrics.declarer.ExecuteDeclarer \ No newline at end of file diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/pom.xml b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/pom.xml new file mode 100644 index 0000000000..21edf95383 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/pom.xml @@ -0,0 +1,57 @@ + + + + com.huaweicloud.sermant + sermant-metrics + 1.0.0 + + 4.0.0 + + metrics-mariadb3.x-plugin + + metrics-mariadb3.x-plugin + The plugin module of metrics. + + + false + plugin + 3.1.0 + + + + + com.huaweicloud.sermant + sermant-agentcore-core + provided + + + com.huaweicloud.sermant + metrics-common + ${project.version} + + + org.mariadb.jdbc + mariadb-java-client + ${mariadb.version} + provided + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + org.apache.maven.plugins + maven-shade-plugin + + + + diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/declarer/StandardClientDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/declarer/StandardClientDeclarer.java new file mode 100644 index 0000000000..1b0d6168c6 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/declarer/StandardClientDeclarer.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.StandardClientInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * 链接方法拦截声明 + * + * @author zhp + * @since 2024-01-15 + */ +public class StandardClientDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "org.mariadb.jdbc.client.impl.StandardClient"; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.isExtendedFrom(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.nameEquals("sendQuery"), + new StandardClientInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/interceptor/StandardClientInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/interceptor/StandardClientInterceptor.java new file mode 100644 index 0000000000..591504c0d9 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/java/com/huawei/metrics/interceptor/StandardClientInterceptor.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.common.Constants; +import com.huawei.metrics.entity.MetricsRpcInfo; +import com.huawei.metrics.manager.MetricsManager; + +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; +import com.huaweicloud.sermant.core.utils.StringUtils; + +import org.mariadb.jdbc.HostAddress; +import org.mariadb.jdbc.client.impl.StandardClient; +import org.mariadb.jdbc.export.SslMode; +import org.mariadb.jdbc.message.ClientMessage; + +/** + * mysql-connector-java8.0 SQL执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class StandardClientInterceptor extends AbstractMysqlInterceptor { + private static final int PARAM_COUNT = 1; + + @Override + public ExecuteContext before(ExecuteContext context) { + context.setLocalFieldValue(Constants.START_TIME_KEY, System.nanoTime()); + return context; + } + + @Override + public ExecuteContext collectMetrics(ExecuteContext context) { + if (context.getArguments() == null || context.getArguments().length < PARAM_COUNT + || context.getArguments()[0] == null) { + return context; + } + ClientMessage message = (ClientMessage) context.getArguments()[0]; + String sql = message.description(); + if (StringUtils.isEmpty(sql)) { + return context; + } + StandardClient client = (StandardClient) context.getObject(); + if (client.getContext() == null || client.getContext().getConf() == null || client.getHostAddress() == null) { + return context; + } + boolean enableSsl = client.getContext() != null && client.getContext().getConf() != null + && client.getContext().getConf().sslMode() != SslMode.DISABLE; + HostAddress hostAddress = client.getHostAddress(); + MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, enableSsl, hostAddress.host, hostAddress.port, sql); + long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY); + metricsRpcInfo.getSumLatency().getAndAdd(latency); + metricsRpcInfo.getLatencyList().add(latency); + MetricsManager.saveRpcInfo(metricsRpcInfo); + return context; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer new file mode 100644 index 0000000000..d901e890f6 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mariadb3.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -0,0 +1,17 @@ +# +# Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +com.huawei.metrics.declarer.StandardClientDeclarer \ No newline at end of file diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/pom.xml b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/pom.xml new file mode 100644 index 0000000000..33b140e80c --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/pom.xml @@ -0,0 +1,57 @@ + + + + com.huaweicloud.sermant + sermant-metrics + 1.0.0 + + 4.0.0 + + metrics-mysql5.0.x-plugin + + metrics-mysql5.0.x-plugin + The plugin module of metrics. + + + false + plugin + 5.0.2 + + + + + com.huaweicloud.sermant + sermant-agentcore-core + provided + + + com.huaweicloud.sermant + metrics-common + ${project.version} + + + mysql + mysql-connector-java + ${mysql.version} + provided + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + org.apache.maven.plugins + maven-shade-plugin + + + + diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java new file mode 100644 index 0000000000..1d56dda886 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.ConnectionInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * Mysql5.1.x sql执行方法拦截声明 + * + * @author zhp + * @since 2024-01-15 + */ +public class ConnectionDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "com.mysql.jdbc.Connection"; + + private static final int PARAM_COUNT = 10; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.nameEquals(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.nameEquals("execSQL") + .and(MethodMatcher.paramCountEquals(PARAM_COUNT)), new ConnectionInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java new file mode 100644 index 0000000000..446594e03e --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.PreparedStatementInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * Mysql5.x sql执行方法拦截声明 + * + * @author zhp + * @since 2024-01-15 + */ +public class PreparedStatementDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "com.mysql.jdbc.PreparedStatement"; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.nameEquals(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.isConstructor().or(MethodMatcher.nameEquals("close")), + new PreparedStatementInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java new file mode 100644 index 0000000000..e76646a4ee --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.common.Constants; +import com.huawei.metrics.entity.MetricsRpcInfo; +import com.huawei.metrics.manager.MetricsManager; +import com.huawei.metrics.util.ThreadMetricsUtil; + +import com.huaweicloud.sermant.core.common.LoggerFactory; +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; + +import com.mysql.jdbc.Connection; + +import java.net.URI; +import java.net.URISyntaxException; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Mysql5.x SQL执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class ConnectionInterceptor extends AbstractMysqlInterceptor { + private static final Logger LOGGER = LoggerFactory.getLogger(); + + private static final int URI_START_INDEX = 5; + + @Override + public ExecuteContext before(ExecuteContext context) { + context.setLocalFieldValue(Constants.START_TIME_KEY, System.nanoTime()); + return context; + } + + @Override + public ExecuteContext collectMetrics(ExecuteContext context) { + String sql = null; + if (context.getArguments()[1] != null) { + sql = (String) context.getArguments()[1]; + } else if (ThreadMetricsUtil.getValue() != null) { + sql = ThreadMetricsUtil.getValue().toString(); + } + try { + Connection connection = (Connection) context.getObject(); + String jdbcUrl = connection.getMetaData().getURL(); + URI url = new URI(jdbcUrl.substring(URI_START_INDEX)); + MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, connection.getUseSSL(), + url.getHost(), url.getPort(), sql); + long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY); + metricsRpcInfo.getSumLatency().getAndAdd(latency); + metricsRpcInfo.getLatencyList().add(latency); + MetricsManager.saveRpcInfo(metricsRpcInfo); + return context; + } catch (SQLException | URISyntaxException e) { + LOGGER.log(Level.SEVERE, "Can not get connect url.", e); + return context; + } + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java new file mode 100644 index 0000000000..884fbbd7ab --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.util.ThreadMetricsUtil; + +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; +import com.huaweicloud.sermant.core.plugin.agent.interceptor.Interceptor; +import com.huaweicloud.sermant.core.utils.StringUtils; + +/** + * Mysql5.x 预编译SQL执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class PreparedStatementInterceptor implements Interceptor { + private static final int SQL_PARAM_INDEX = 1; + + private static final int PARAM_COUNT = 3; + + @Override + public ExecuteContext before(ExecuteContext context) { + return context; + } + + @Override + public ExecuteContext after(ExecuteContext context) { + if (isRemoveSuccess(context)) { + return context; + } + if (context.getArguments() != null && context.getArguments().length >= PARAM_COUNT + && StringUtils.equals(context.getArguments()[0].getClass().getCanonicalName(), + "com.mysql.jdbc.Connection")) { + ThreadMetricsUtil.setValue(context.getArguments()[SQL_PARAM_INDEX]); + } + return context; + } + + /** + * 是否移除线程数据成功 + * + * @param context 上下文 + * @return 是否已移除 + */ + private boolean isRemoveSuccess(ExecuteContext context) { + if (context.getMethod() != null) { + ThreadMetricsUtil.remove(); + return true; + } + return false; + } + + @Override + public ExecuteContext onThrow(ExecuteContext context) { + return context; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer new file mode 100644 index 0000000000..dc0d3ef42a --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.0.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -0,0 +1,19 @@ +# +# Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# + +com.huawei.metrics.declarer.ConnectionDeclarer +com.huawei.metrics.declarer.PreparedStatementDeclarer \ No newline at end of file diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/pom.xml b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/pom.xml new file mode 100644 index 0000000000..36f52380c0 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/pom.xml @@ -0,0 +1,57 @@ + + + + com.huaweicloud.sermant + sermant-metrics + 1.0.0 + + 4.0.0 + + metrics-mysql5.1.x-plugin + + metrics-mysql5.1.x-plugin + The plugin module of metrics. + + + false + plugin + 5.1.2 + + + + + com.huaweicloud.sermant + sermant-agentcore-core + provided + + + com.huaweicloud.sermant + metrics-common + ${project.version} + + + mysql + mysql-connector-java + ${mysql.version} + provided + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + org.apache.maven.plugins + maven-shade-plugin + + + + diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java new file mode 100644 index 0000000000..41ceb8db3e --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/ConnectionDeclarer.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.ConnectionInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * Mysql5.1.x sql执行方法拦截声明 + * + * @author zhp + * @since 2024-01-15 + */ +public class ConnectionDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "com.mysql.jdbc.ConnectionImpl"; + + private static final int PARAM_COUNT = 10; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.nameEquals(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.nameEquals("execSQL") + .and(MethodMatcher.paramCountEquals(PARAM_COUNT)), new ConnectionInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java new file mode 100644 index 0000000000..52157a8ee4 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/declarer/PreparedStatementDeclarer.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2023-2023 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.PreparedStatementInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * Mysql5.x sql执行方法拦截声明 + * + * @author zhp + * @since 2023-12-15 + */ +public class PreparedStatementDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "com.mysql.jdbc.PreparedStatement"; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.nameEquals(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.isConstructor().or(MethodMatcher.nameEquals("close")), + new PreparedStatementInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java new file mode 100644 index 0000000000..a048153d23 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/ConnectionInterceptor.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.common.Constants; +import com.huawei.metrics.entity.MetricsRpcInfo; +import com.huawei.metrics.manager.MetricsManager; +import com.huawei.metrics.util.ThreadLocalUtil; + +import com.huaweicloud.sermant.core.common.LoggerFactory; +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; + +import com.mysql.jdbc.ConnectionProperties; + +import java.net.URI; +import java.net.URISyntaxException; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Mysql5.x SQL执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class ConnectionInterceptor extends AbstractMysqlInterceptor { + private static final Logger LOGGER = LoggerFactory.getLogger(); + + private static final int URI_START_INDEX = 5; + + @Override + public ExecuteContext before(ExecuteContext context) { + context.setLocalFieldValue(Constants.START_TIME_KEY, System.nanoTime()); + return context; + } + + @Override + public ExecuteContext collectMetrics(ExecuteContext context) { + String sql = null; + if (context.getArguments()[1] != null) { + sql = ThreadLocalUtil.getValue().toString(); + } else if (ThreadLocalUtil.getValue() != null) { + sql = (String) context.getArguments()[1]; + } + try { + Connection connection = (Connection) context.getObject(); + String jdbcUrl = connection.getMetaData().getURL(); + URI url = new URI(jdbcUrl.substring(URI_START_INDEX)); + ConnectionProperties connectionProperties = (ConnectionProperties) context.getObject(); + MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, connectionProperties.getUseSSL(), + url.getHost(), url.getPort(), sql); + long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY); + metricsRpcInfo.getSumLatency().getAndAdd(latency); + metricsRpcInfo.getLatencyList().add(latency); + MetricsManager.saveRpcInfo(metricsRpcInfo); + return context; + } catch (SQLException | URISyntaxException e) { + LOGGER.log(Level.SEVERE, "Can not get connect url.", e); + return context; + } + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java new file mode 100644 index 0000000000..c1aea3884d --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/java/com/huawei/metrics/interceptor/PreparedStatementInterceptor.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.util.ThreadMetricsUtil; + +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; +import com.huaweicloud.sermant.core.plugin.agent.interceptor.Interceptor; +import com.huaweicloud.sermant.core.utils.StringUtils; + +/** + * Mysql5.x 预编译SQL执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class PreparedStatementInterceptor implements Interceptor { + private static final int SQL_PARAM_INDEX = 1; + + private static final int PARAM_COUNT = 3; + + @Override + public ExecuteContext before(ExecuteContext context) { + return context; + } + + @Override + public ExecuteContext after(ExecuteContext context) { + if (isRemoveSuccess(context)) { + return context; + } + if (context.getArguments() != null && context.getArguments().length >= PARAM_COUNT + && StringUtils.equals(context.getArguments()[0].getClass().getCanonicalName(), + "com.mysql.jdbc.ConnectionImpl")) { + ThreadMetricsUtil.setValue(context.getArguments()[SQL_PARAM_INDEX]); + } + return context; + } + + /** + * 是否移除线程数据成功 + * + * @param context 上下文 + * @return 是否已移除 + */ + private boolean isRemoveSuccess(ExecuteContext context) { + if (context.getMethod() != null) { + ThreadMetricsUtil.remove(); + return true; + } + return false; + } + + @Override + public ExecuteContext onThrow(ExecuteContext context) { + return context; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer new file mode 100644 index 0000000000..dc0d3ef42a --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql5.1.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -0,0 +1,19 @@ +# +# Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# + +com.huawei.metrics.declarer.ConnectionDeclarer +com.huawei.metrics.declarer.PreparedStatementDeclarer \ No newline at end of file diff --git a/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/pom.xml b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/pom.xml new file mode 100644 index 0000000000..60eeaed6d6 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/pom.xml @@ -0,0 +1,57 @@ + + + + com.huaweicloud.sermant + sermant-metrics + 1.0.0 + + 4.0.0 + + metrics-mysql8.x-plugin + + metrics-mysql8.x-plugin + The plugin module of metrics. + + + false + plugin + 8.0.28 + + + + + com.huaweicloud.sermant + sermant-agentcore-core + provided + + + com.huaweicloud.sermant + metrics-common + ${project.version} + + + mysql + mysql-connector-java + ${mysql.version} + provided + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + org.apache.maven.plugins + maven-shade-plugin + + + + diff --git a/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/declarer/NativeSessionDeclarer.java b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/declarer/NativeSessionDeclarer.java new file mode 100644 index 0000000000..4fd1fc7088 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/declarer/NativeSessionDeclarer.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.declarer; + +import com.huawei.metrics.interceptor.NativeSessionInterceptor; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; + +/** + * 链接方法拦截声明 + * + * @author zhp + * @since 2024-01-15 + */ +public class NativeSessionDeclarer extends AbstractDeclarer { + private static final String ENHANCE_CLASS = "com.mysql.cj.NativeSession"; + + private static final int PARAM_COUNT = 8; + + @Override + public ClassMatcher getClassMatcher() { + return ClassMatcher.nameEquals(ENHANCE_CLASS); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{ + InterceptDeclarer.build(MethodMatcher.nameEquals("execSQL") + .and(MethodMatcher.paramCountEquals(PARAM_COUNT)), new NativeSessionInterceptor()) + }; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/interceptor/NativeSessionInterceptor.java b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/interceptor/NativeSessionInterceptor.java new file mode 100644 index 0000000000..9cd58e9bc5 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/java/com/huawei/metrics/interceptor/NativeSessionInterceptor.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.huawei.metrics.interceptor; + +import com.huawei.metrics.common.Constants; +import com.huawei.metrics.entity.MetricsRpcInfo; +import com.huawei.metrics.manager.MetricsManager; + +import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; + +import com.mysql.cj.NativeSession; +import com.mysql.cj.Query; +import com.mysql.cj.conf.HostInfo; +import com.mysql.cj.jdbc.JdbcPreparedStatement; + +/** + * mysql-connector-java8.0 SQL执行增强器 + * + * @author zhp + * @since 2024-01-15 + */ +public class NativeSessionInterceptor extends AbstractMysqlInterceptor { + @Override + public ExecuteContext before(ExecuteContext context) { + context.setLocalFieldValue(Constants.START_TIME_KEY, System.nanoTime()); + return context; + } + + @Override + public ExecuteContext collectMetrics(ExecuteContext context) { + Query query = (Query) context.getArguments()[0]; + String sql; + if (query instanceof JdbcPreparedStatement) { + sql = ((JdbcPreparedStatement) query).getPreparedSql(); + } else { + sql = (String) context.getArguments()[1]; + } + NativeSession nativeSession = (NativeSession) context.getObject(); + HostInfo hostInfo = nativeSession.getHostInfo(); + MetricsRpcInfo metricsRpcInfo = initMetricsRpcInfo(context, nativeSession.isSSLEstablished(), + nativeSession.getProcessHost(), hostInfo.getPort(), sql); + long latency = System.nanoTime() - (long) context.getLocalFieldValue(Constants.START_TIME_KEY); + metricsRpcInfo.getSumLatency().getAndAdd(latency); + metricsRpcInfo.getLatencyList().add(latency); + MetricsManager.saveRpcInfo(metricsRpcInfo); + return context; + } +} diff --git a/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer new file mode 100644 index 0000000000..41729f454a --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-mysql8.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -0,0 +1,18 @@ +# +# Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# + +com.huawei.metrics.declarer.NativeSessionDeclarer \ No newline at end of file diff --git a/sermant-plugins/sermant-metrics/metrics-service/pom.xml b/sermant-plugins/sermant-metrics/metrics-service/pom.xml index b0fcf27666..6a126877eb 100644 --- a/sermant-plugins/sermant-metrics/metrics-service/pom.xml +++ b/sermant-plugins/sermant-metrics/metrics-service/pom.xml @@ -14,6 +14,7 @@ false service + 1.2.83 @@ -29,14 +30,14 @@ com.huaweicloud.sermant - metrics-plugin + metrics-common ${project.version} provided com.alibaba fastjson - 1.2.83 + ${fastjson.version} diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/pom.xml b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/pom.xml similarity index 58% rename from sermant-plugins/sermant-metrics/metrics-plugin/pom.xml rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/pom.xml index 3fb8e79365..6a4bf45c02 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/pom.xml +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/pom.xml @@ -9,23 +9,19 @@ 4.0.0 - metrics-plugin + metrics-springcloud-plugin - metrics-plugin + metrics-springcloud-plugin The plugin module of metrics. false plugin - 2.5.7 - 2.7.3 4.0.1 4.5.13 2.7.5 4.1.0 3.0.1 - 4.4 - 8.0.28 @@ -35,16 +31,9 @@ provided - com.alibaba - dubbo - ${alibaba.dubbo.version} - provided - - - org.apache.dubbo - dubbo - ${apache.dubbo.version} - provided + com.huaweicloud.sermant + metrics-common + ${project.version} org.apache.httpcomponents @@ -70,40 +59,6 @@ ${javax-servlet-api.version} provided - - mysql - mysql-connector-java - ${mysql.version} - provided - - - - com.github.jsqlparser - jsqlparser - ${jsqlparser.version} - - - - junit - junit - test - - - org.mockito - mockito-inline - test - - - org.junit.jupiter - junit-jupiter - test - - - org.mockito - mockito-core - ${mockito-core.version} - test - diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/httpclient/HttpClientDeclarer.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/httpclient/HttpClientDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/httpclient/HttpClientDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/httpclient/HttpClientDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/ConnectDeclarer.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/ConnectDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/ConnectDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/ConnectDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/DisconnectDeclarer.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/DisconnectDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/DisconnectDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/httpurlconnection/DisconnectDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/okhttp/CallDeclarer.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/okhttp/CallDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/okhttp/CallDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/okhttp/CallDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/okhttp3/CallDeclarer.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/okhttp3/CallDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/okhttp3/CallDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/okhttp3/CallDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/servlet/HttpServletDeclarer.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/servlet/HttpServletDeclarer.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/declarer/servlet/HttpServletDeclarer.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/declarer/servlet/HttpServletDeclarer.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractHttpInterceptor.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractHttpInterceptor.java similarity index 95% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractHttpInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractHttpInterceptor.java index 25392cdcad..34dbc56cab 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractHttpInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/AbstractHttpInterceptor.java @@ -51,8 +51,8 @@ public ExecuteContext after(ExecuteContext context) throws Exception { public abstract ExecuteContext collectMetrics(ExecuteContext context) throws Exception; @Override - public ExecuteContext onThrow(ExecuteContext context) throws Exception { - return collectMetrics(context); + public ExecuteContext onThrow(ExecuteContext context) { + return context; } /** @@ -70,7 +70,7 @@ public MetricsRpcInfo initMetricsInfo(URL url, boolean enableSsl, long latency, MetricsRpcInfo metricsRpcInfo = new MetricsRpcInfo(); metricsRpcInfo.setClientIp(InetAddress.getLocalHost().getHostAddress()); metricsRpcInfo.setServerIp(url.getHost()); - metricsRpcInfo.setServerPort(StringUtils.getString(url.getPort())); + metricsRpcInfo.setServerPort(url.getPort()); metricsRpcInfo.setProtocol(url.getProtocol()); metricsRpcInfo.setEnableSsl(enableSsl); metricsRpcInfo.setL7Role(Constants.CLIENT_ROLE); diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpclient/HttpClientInterceptor.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpclient/HttpClientInterceptor.java similarity index 91% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpclient/HttpClientInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpclient/HttpClientInterceptor.java index 5795406f02..fa6ae221c7 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpclient/HttpClientInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpclient/HttpClientInterceptor.java @@ -47,9 +47,13 @@ public ExecuteContext before(ExecuteContext context) { public ExecuteContext collectMetrics(ExecuteContext context) throws Exception { HttpHost httpHost = (HttpHost) context.getArguments()[0]; HttpRequest httpRequest = (HttpRequest) context.getArguments()[1]; + HttpResponse httpResponse = (HttpResponse) context.getResult(); + if (context.getLocalFieldValue(Constants.START_TIME_KEY) == null || httpRequest.getRequestLine() == null + || httpResponse.getStatusLine() == null) { + return context; + } URI uri = new URI(httpRequest.getRequestLine().getUri()); long latency = System.nanoTime() - (Long) context.getLocalFieldValue(Constants.START_TIME_KEY); - HttpResponse httpResponse = (HttpResponse) context.getResult(); int statusCode = httpResponse.getStatusLine().getStatusCode(); boolean enableSsl = StringUtils.equals(httpHost.getSchemeName(), Constants.HTTPS_PROTOCOL); MetricsRpcInfo metricsRpcInfo = initMetricsInfo(uri.toURL(), enableSsl, latency, statusCode); diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/ConnectorInterceptor.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/ConnectorInterceptor.java similarity index 92% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/ConnectorInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/ConnectorInterceptor.java index d3d4e8a55a..29806424ae 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/ConnectorInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/ConnectorInterceptor.java @@ -16,7 +16,7 @@ package com.huawei.metrics.interceptor.httpurlconnection; -import com.huawei.metrics.util.HttpUrlConnectionUtil; +import com.huawei.metrics.util.ThreadLocalUtil; import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; import com.huaweicloud.sermant.core.plugin.agent.interceptor.Interceptor; @@ -31,7 +31,7 @@ public class ConnectorInterceptor implements Interceptor { @Override public ExecuteContext before(ExecuteContext context) { // 设置请求开始时间,链接断开时用于计算时延 - HttpUrlConnectionUtil.setValue(System.nanoTime()); + ThreadLocalUtil.setValue(System.nanoTime()); return context; } diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/DisconnectorInterceptor.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/DisconnectorInterceptor.java similarity index 87% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/DisconnectorInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/DisconnectorInterceptor.java index 0a737839d8..722eecf926 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/DisconnectorInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/httpurlconnection/DisconnectorInterceptor.java @@ -20,7 +20,7 @@ import com.huawei.metrics.entity.MetricsRpcInfo; import com.huawei.metrics.interceptor.AbstractHttpInterceptor; import com.huawei.metrics.manager.MetricsManager; -import com.huawei.metrics.util.HttpUrlConnectionUtil; +import com.huawei.metrics.util.ThreadMetricsUtil; import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; import com.huaweicloud.sermant.core.utils.StringUtils; @@ -42,16 +42,19 @@ public ExecuteContext before(ExecuteContext context) { @Override public ExecuteContext collectMetrics(ExecuteContext context) throws Exception { - if (HttpUrlConnectionUtil.getValue() == null) { + if (ThreadMetricsUtil.getValue() == null) { return context; } HttpURLConnection httpUrlConnection = (HttpURLConnection) context.getObject(); URL url = httpUrlConnection.getURL(); + if (url == null) { + return context; + } boolean enableSsl = StringUtils.equals(url.getProtocol(), Constants.HTTPS_PROTOCOL); - long latency = System.nanoTime() - HttpUrlConnectionUtil.getValue(); + long latency = System.nanoTime() - (long) ThreadMetricsUtil.getValue(); MetricsRpcInfo metricsRpcInfo = initMetricsInfo(url, enableSsl, latency, httpUrlConnection.getResponseCode()); MetricsManager.saveRpcInfo(metricsRpcInfo); - HttpUrlConnectionUtil.remove(); + ThreadMetricsUtil.remove(); return context; } } diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp/CallInterceptor.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp/CallInterceptor.java similarity index 94% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp/CallInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp/CallInterceptor.java index 093e6c1305..3ef1c08f70 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp/CallInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp/CallInterceptor.java @@ -42,6 +42,9 @@ public ExecuteContext before(ExecuteContext context) { @Override public ExecuteContext collectMetrics(ExecuteContext context) throws Exception { Response response = (Response) context.getResult(); + if (response == null || response.request() == null) { + return context; + } Request request = response.request(); long latency = System.nanoTime() - (Long) context.getLocalFieldValue(Constants.START_TIME_KEY); MetricsRpcInfo metricsRpcInfo = initMetricsInfo(request.url(), request.isHttps(), latency, response.code()); diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp3/CallInterceptor.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp3/CallInterceptor.java similarity index 100% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp3/CallInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/okhttp3/CallInterceptor.java diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/servlet/HttpServletInterceptor.java b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/servlet/HttpServletInterceptor.java similarity index 95% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/servlet/HttpServletInterceptor.java rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/servlet/HttpServletInterceptor.java index e83db99a79..1315912c8c 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/java/com/huawei/metrics/interceptor/servlet/HttpServletInterceptor.java +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/java/com/huawei/metrics/interceptor/servlet/HttpServletInterceptor.java @@ -22,7 +22,6 @@ import com.huawei.metrics.manager.MetricsManager; import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext; -import com.huaweicloud.sermant.core.utils.StringUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -62,7 +61,7 @@ private MetricsRpcInfo initMetricsInfo(HttpServletRequest req, long latency, int MetricsRpcInfo metricsRpcInfo = new MetricsRpcInfo(); metricsRpcInfo.setClientIp(req.getRemoteHost()); metricsRpcInfo.setServerIp(req.getLocalAddr()); - metricsRpcInfo.setServerPort(StringUtils.getString(req.getLocalPort())); + metricsRpcInfo.setServerPort(req.getLocalPort()); metricsRpcInfo.setProtocol(req.getScheme()); metricsRpcInfo.setEnableSsl(Constants.HTTPS_PROTOCOL.equals(req.getScheme())); metricsRpcInfo.setL7Role(Constants.SERVER_ROLE); diff --git a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer similarity index 80% rename from sermant-plugins/sermant-metrics/metrics-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer rename to sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer index 5a623188dc..84f8f9a4fa 100644 --- a/sermant-plugins/sermant-metrics/metrics-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -14,11 +14,6 @@ # limitations under the License. # # - -com.huawei.metrics.declarer.alibaba.ExchangeCodecDeclarer -com.huawei.metrics.declarer.alibaba.MonitorFilterDeclarer -com.huawei.metrics.declarer.apache.ExchangeCodecDeclarer -com.huawei.metrics.declarer.apache.MonitorFilterDeclarer com.huawei.metrics.declarer.httpurlconnection.ConnectDeclarer com.huawei.metrics.declarer.httpurlconnection.DisconnectDeclarer com.huawei.metrics.declarer.httpclient.HttpClientDeclarer diff --git a/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig new file mode 100644 index 0000000000..a14f635e76 --- /dev/null +++ b/sermant-plugins/sermant-metrics/metrics-springcloud-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.config.PluginConfig @@ -0,0 +1 @@ +com.huawei.metrics.config.MetricsConfig \ No newline at end of file diff --git a/sermant-plugins/sermant-metrics/pom.xml b/sermant-plugins/sermant-metrics/pom.xml index 90ddf871e4..52de01d55b 100644 --- a/sermant-plugins/sermant-metrics/pom.xml +++ b/sermant-plugins/sermant-metrics/pom.xml @@ -24,21 +24,42 @@ true - metrics-plugin + metrics-common + metrics-dubbo-plugin + metrics-springcloud-plugin + metrics-mysql8.x-plugin + metrics-mysql5.1.x-plugin + metrics-mysql5.0.x-plugin + metrics-mariadb3.x-plugin + metrics-mariadb2.x-plugin metrics-service test - metrics-plugin + metrics-common + metrics-dubbo-plugin + metrics-springcloud-plugin + metrics-mysql8.x-plugin + metrics-mysql5.1.x-plugin + metrics-mysql5.0.x-plugin + metrics-mariadb3.x-plugin + metrics-mariadb2.x-plugin metrics-service release - metrics-plugin + metrics-common + metrics-dubbo-plugin + metrics-springcloud-plugin + metrics-mysql8.x-plugin + metrics-mysql5.1.x-plugin + metrics-mysql5.0.x-plugin + metrics-mariadb3.x-plugin + metrics-mariadb2.x-plugin metrics-service