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));
+    }
 }