You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/05/19 13:17:39 UTC
[shardingsphere] branch master updated: Modify proxy_execute_latency_millis metric to be collected only when QueryCommandExecutor (#25781)
This is an automated email from the ASF dual-hosted git repository.
jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 38a1620d6b2 Modify proxy_execute_latency_millis metric to be collected only when QueryCommandExecutor (#25781)
38a1620d6b2 is described below
commit 38a1620d6b2a69401a87fbc505a80ab0d845c6eb
Author: jiangML <10...@qq.com>
AuthorDate: Fri May 19 21:17:31 2023 +0800
Modify proxy_execute_latency_millis metric to be collected only when QueryCommandExecutor (#25781)
---
.../proxy/ExecuteLatencyHistogramAdvice.java | 9 ++++++--
.../proxy/ExecuteLatencyHistogramAdviceTest.java | 24 ++++++++++++++++++----
2 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdvice.java b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdvice.java
index 8e0631bc769..b3159528399 100644
--- a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdvice.java
+++ b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdvice.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsColl
import org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.HistogramMetricsCollector;
import org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
import org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
+import org.apache.shardingsphere.proxy.frontend.command.executor.QueryCommandExecutor;
import java.lang.reflect.Method;
import java.util.Collections;
@@ -51,11 +52,15 @@ public final class ExecuteLatencyHistogramAdvice implements InstanceMethodAdvice
@Override
public void beforeMethod(final TargetAdviceObject target, final Method method, final Object[] args, final String pluginType) {
- methodTimeRecorder.recordNow(method);
+ if (args[2] instanceof QueryCommandExecutor) {
+ methodTimeRecorder.recordNow(method);
+ }
}
@Override
public void afterMethod(final TargetAdviceObject target, final Method method, final Object[] args, final Object result, final String pluginType) {
- MetricsCollectorRegistry.<HistogramMetricsCollector>get(config, pluginType).observe(methodTimeRecorder.getElapsedTimeAndClean(method));
+ if (args[2] instanceof QueryCommandExecutor) {
+ MetricsCollectorRegistry.<HistogramMetricsCollector>get(config, pluginType).observe(methodTimeRecorder.getElapsedTimeAndClean(method));
+ }
}
}
diff --git a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdviceTest.java b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdviceTest.java
index 1a7774c5637..c8a22106942 100644
--- a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdviceTest.java
+++ b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteLatencyHistogramAdviceTest.java
@@ -20,8 +20,10 @@ package org.apache.shardingsphere.agent.plugin.metrics.core.advice.proxy;
import org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorRegistry;
import org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
import org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
-import org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
import org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceObjectFixture;
+import org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
+import org.apache.shardingsphere.proxy.frontend.mysql.command.admin.quit.MySQLComQuitExecutor;
+import org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query.MySQLComQueryPacketExecutor;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
@@ -31,6 +33,7 @@ import java.util.Collections;
import java.util.concurrent.TimeUnit;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.mockito.Mockito.mock;
@@ -44,13 +47,26 @@ class ExecuteLatencyHistogramAdviceTest {
}
@Test
- void assertExecuteLatencyHistogram() {
+ void assertExecuteLatencyHistogramWhenQueryCommandExecutor() {
ExecuteLatencyHistogramAdvice advice = new ExecuteLatencyHistogramAdvice();
TargetAdviceObjectFixture targetObject = new TargetAdviceObjectFixture();
Method method = mock(Method.class);
- advice.beforeMethod(targetObject, method, new Object[]{}, "FIXTURE");
+ Object[] args = new Object[]{null, null, mock(MySQLComQueryPacketExecutor.class)};
+ advice.beforeMethod(targetObject, method, args, "FIXTURE");
Awaitility.await().pollDelay(500L, TimeUnit.MILLISECONDS).until(() -> true);
- advice.afterMethod(targetObject, method, new Object[]{}, null, "FIXTURE");
+ advice.afterMethod(targetObject, method, args, null, "FIXTURE");
assertThat(Double.parseDouble(MetricsCollectorRegistry.get(config, "FIXTURE").toString()), greaterThanOrEqualTo(500d));
}
+
+ @Test
+ void assertExecuteLatencyHistogramWhenNotQueryCommandExecutor() {
+ ExecuteLatencyHistogramAdvice advice = new ExecuteLatencyHistogramAdvice();
+ TargetAdviceObjectFixture targetObject = new TargetAdviceObjectFixture();
+ Method method = mock(Method.class);
+ Object[] args = new Object[]{null, null, mock(MySQLComQuitExecutor.class)};
+ advice.beforeMethod(targetObject, method, args, "FIXTURE");
+ Awaitility.await().pollDelay(20L, TimeUnit.MILLISECONDS).until(() -> true);
+ advice.afterMethod(targetObject, method, args, null, "FIXTURE");
+ assertThat(Double.parseDouble(MetricsCollectorRegistry.get(config, "FIXTURE").toString()), equalTo(0d));
+ }
}