You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2020/12/09 08:04:31 UTC

[shardingsphere] branch master updated: metrics refactor (#8544)

This is an automated email from the ASF dual-hosted git repository.

menghaoran 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 f9a80ae  metrics refactor (#8544)
f9a80ae is described below

commit f9a80ae6353e705aa2d43dfbaf20dba086844c62
Author: xiaoyu <54...@qq.com>
AuthorDate: Wed Dec 9 16:04:17 2020 +0800

    metrics refactor (#8544)
---
 .../agent/core/ShardingSphereTransformer.java      |  6 ++--
 .../agent/core/common/AgentPathBuilder.java        |  6 ++--
 .../agent/core/plugin/AgentPluginLoader.java       | 37 ++++++++++----------
 .../advice/ConstructorMethodInterceptor.java       |  2 +-
 .../plugin/advice/MethodAroundInterceptor.java     | 39 +++++++++++-----------
 .../core/plugin/advice/MethodInvocationResult.java | 26 +++------------
 .../core/plugin/advice/OverrideArgsInvoker.java    |  3 +-
 .../advice/StaticMethodAroundInterceptor.java      | 35 +++++++++----------
 .../api/prometheus/PrometheusMetricsRegister.java  |  6 ++--
 .../bootstrap/CommandExecutorTaskAdvice.java       |  2 +-
 .../metrics/bootstrap/MethodNameConstant.java      |  1 -
 ...RouterAdvice.java => SQLRouteEngineAdvice.java} | 12 ++++---
 .../agent/metrics/bootstrap/TransactionAdvice.java |  4 +--
 .../definition/MetricsPluginDefinition.java        |  8 ++---
 14 files changed, 87 insertions(+), 100 deletions(-)

diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
index 49486fb..289c23f 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
@@ -64,7 +64,7 @@ public class ShardingSphereTransformer implements AgentBuilder.Transformer {
                     final ConstructorMethodInterceptor interceptor = new ConstructorMethodInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
                     newBuilder = newBuilder.constructor(point.getConstructorMatcher()).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
                     // CHECKSTYLE:OFF
-                } catch (Throwable e) {
+                } catch (final Throwable e) {
                     // CHECKSTYLE:ON
                     log.error("Failed to load advice class: {}", point.getAdvice(), e);
                 }
@@ -74,7 +74,7 @@ public class ShardingSphereTransformer implements AgentBuilder.Transformer {
                     final StaticMethodAroundInterceptor interceptor = new StaticMethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
                     newBuilder = newBuilder.method(point.getMethodsMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
                     // CHECKSTYLE:OFF
-                } catch (Throwable e) {
+                } catch (final Throwable e) {
                     // CHECKSTYLE:ON
                     log.error("Failed to load advice class: {}", point.getAdvice(), e);
                 }
@@ -84,7 +84,7 @@ public class ShardingSphereTransformer implements AgentBuilder.Transformer {
                     final MethodAroundInterceptor interceptor = new MethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
                     newBuilder = newBuilder.method(point.getMethodMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
                     // CHECKSTYLE:OFF
-                } catch (Throwable e) {
+                } catch (final Throwable e) {
                     // CHECKSTYLE:ON
                     log.error("Failed to load advice class: {}", point.getAdvice(), e);
                 }
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
index ea337d2..409cdf6 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
@@ -27,7 +27,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.agent.core.exception.ShardingSphereAgentException;
 
 /**
- * Agent path locator.
+ * Agent path builder.
  */
 @Slf4j
 public final class AgentPathBuilder {
@@ -71,8 +71,8 @@ public final class AgentPathBuilder {
         try {
             File agentJarFile = new File(new URL(realUrl).toURI());
             return agentJarFile.exists() ? agentJarFile.getParentFile() : null;
-        } catch (MalformedURLException | URISyntaxException e) {
-            log.error("Can not locate agent jar file by url:" + url);
+        } catch (final MalformedURLException | URISyntaxException ex) {
+            log.error(String.format("Can not locate agent jar file by url %s", url), ex);
             return null;
         }
     }
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
index 53f073f..199887e 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
@@ -86,8 +86,8 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
                 try {
                     byte[] data = ByteStreams.toByteArray(jar.jarFile.getInputStream(entry));
                     return defineClass(name, data, 0, data.length);
-                } catch (IOException ioe) {
-                    log.error("Failed to load class {}.", name, ioe);
+                } catch (final IOException ex) {
+                    log.error("Failed to load class {}.", name, ex);
                 }
             }
         }
@@ -99,10 +99,10 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
         List<URL> resources = Lists.newArrayList();
         for (UberJar jar : jars) {
             JarEntry entry = jar.jarFile.getJarEntry(name);
-            if (entry != null) {
+            if (Objects.nonNull(entry)) {
                 try {
                     resources.add(new URL("jar:file:" + jar.sourcePath.getAbsolutePath() + "!/" + name));
-                } catch (MalformedURLException ignored) {
+                } catch (final MalformedURLException ignored) {
                 }
             }
         }
@@ -113,10 +113,10 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
     protected URL findResource(final String name) {
         for (UberJar jar : jars) {
             JarEntry entry = jar.jarFile.getJarEntry(name);
-            if (entry != null) {
+            if (Objects.nonNull(entry)) {
                 try {
                     return new URL("jar:file:" + jar.sourcePath.getAbsolutePath() + "!/" + name);
-                } catch (MalformedURLException ignored) {
+                } catch (final MalformedURLException ignored) {
                 }
             }
         }
@@ -128,8 +128,8 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
         for (UberJar jar : jars) {
             try {
                 jar.jarFile.close();
-            } catch (IOException ioe) {
-                log.error("", ioe);
+            } catch (final IOException ex) {
+                log.error("close is ", ex);
             }
         }
     }
@@ -187,8 +187,8 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
                 pluginDefinition.getAllServices().forEach(klass -> {
                     try {
                         services.add(klass.newInstance());
-                    } catch (InstantiationException | IllegalAccessException e) {
-                        log.error("Failed to create service instance, {}.", klass.getTypeName(), e);
+                    } catch (InstantiationException | IllegalAccessException ex) {
+                        log.error("Failed to create service instance, {}.", klass.getTypeName(), ex);
                     }
                 });
                 pluginDefinition.build().forEach(plugin -> {
@@ -202,8 +202,8 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
                         pluginAdviceDefinitionMap.put(target, plugin);
                     }
                 });
-            } catch (InstantiationException | IllegalAccessException e) {
-                log.error("Failed to load plugin definition, {}.", entrypoint, e);
+            } catch (final InstantiationException | IllegalAccessException ex) {
+                log.error("Failed to load plugin definition, {}.", entrypoint, ex);
             }
         }
         pluginDefineMap = ImmutableMap.<String, PluginAdviceDefinition>builder().putAll(pluginAdviceDefinitionMap).build();
@@ -292,9 +292,9 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
             try {
                 service.setup();
                 // CHECKSTYLE:OFF
-            } catch (Exception e) {
+            } catch (final Exception ex) {
                 // CHECKSTYLE:ON
-                log.error("Failed to initial service.");
+                log.error("Failed to initial service.", ex);
             }
         });
     }
@@ -307,9 +307,9 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
             try {
                 service.start();
                 // CHECKSTYLE:OFF
-            } catch (Exception e) {
+            } catch (final Exception ex) {
                 // CHECKSTYLE:ON
-                log.error("Failed to start service.");
+                log.error("Failed to start service.", ex);
             }
         });
     }
@@ -322,15 +322,16 @@ public final class AgentPluginLoader extends ClassLoader implements Closeable {
             try {
                 service.cleanup();
                 // CHECKSTYLE:OFF
-            } catch (Exception e) {
+            } catch (final Exception ex) {
                 // CHECKSTYLE:ON
-                log.error("Failed to shutdown service.");
+                log.error("Failed to shutdown service.", ex);
             }
         });
     }
     
     @RequiredArgsConstructor
     private static class UberJar {
+        
         private final JarFile jarFile;
         
         private final File sourcePath;
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/ConstructorMethodInterceptor.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/ConstructorMethodInterceptor.java
index 10e5169..ed48394 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/ConstructorMethodInterceptor.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/ConstructorMethodInterceptor.java
@@ -46,7 +46,7 @@ public class ConstructorMethodInterceptor {
         try {
             advice.onConstructor(target, args);
             // CHECKSTYLE:OFF
-        } catch (Throwable throwable) {
+        } catch (final Throwable throwable) {
             // CHECKSTYLE:ON
             log.error("Constructor advice execution error. class: {}", target.getClass().getTypeName(), throwable);
         }
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodAroundInterceptor.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodAroundInterceptor.java
index c439db1..17a859a 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodAroundInterceptor.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodAroundInterceptor.java
@@ -47,48 +47,49 @@ public class MethodAroundInterceptor {
      * @param target the target object
      * @param method the intercepted method
      * @param args the all arguments of method
-     * @param uber the origin method invocation
+     * @param callable the origin method invocation
      * @return the return value of target invocation
      */
     @RuntimeType
     @SneakyThrows
-    public Object intercept(final @This Object target, final @Origin Method method, final @AllArguments Object[] args, final @SuperCall Callable<?> uber) {
+    public Object intercept(final @This Object target, final @Origin Method method, final @AllArguments Object[] args, final @SuperCall Callable<?> callable) {
         final TargetObject instance = (TargetObject) target;
-        final MethodInvocationResult result = new MethodInvocationResult();
-        Object ret;
+        final MethodInvocationResult methodResult = new MethodInvocationResult();
+        Object result;
         try {
-            advice.beforeMethod(instance, method, args, result);
+            advice.beforeMethod(instance, method, args, methodResult);
             // CHECKSTYLE:OFF
-        } catch (Throwable throwable) {
+        } catch (final Throwable ex) {
             // CHECKSTYLE:ON
-            log.error("Failed to execute the pre-method of method[{}] in class[{}].", method.getName(), target.getClass(), throwable);
+            log.error("Failed to execute the pre-method of method[{}] in class[{}].", method.getName(), target.getClass(), ex);
         }
         try {
-            if (result.isRebased()) {
-                ret = result.getResult();
+            if (methodResult.isRebased()) {
+                result = methodResult.getResult();
             } else {
-                ret = uber.call();
+                result = callable.call();
             }
+            methodResult.rebase(result);
             // CHECKSTYLE:OFF
-        } catch (Throwable throwable) {
+        } catch (final Throwable ex) {
             // CHECKSTYLE:ON
             try {
-                advice.onThrowing(instance, method, args, throwable);
+                advice.onThrowing(instance, method, args, ex);
                 // CHECKSTYLE:OFF
-            } catch (Throwable adviceException) {
+            } catch (final Throwable ignored) {
                 // CHECKSTYLE:ON
-                log.error("Failed to execute the error handler of method[{}] in class[{}].", method.getName(), target.getClass(), adviceException);
+                log.error("Failed to execute the error handler of method[{}] in class[{}].", method.getName(), target.getClass(), ex);
             }
-            throw throwable;
+            throw ex;
         } finally {
             try {
-                advice.afterMethod(instance, method, args, result);
+                advice.afterMethod(instance, method, args, methodResult);
                 // CHECKSTYLE:OFF
-            } catch (Throwable throwable) {
+            } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
-                log.error("Failed to execute the post-method of method[{}] in class[{}].", method.getName(), target.getClass(), throwable);
+                log.error("Failed to execute the post-method of method[{}] in class[{}].", method.getName(), target.getClass(), ex);
             }
         }
-        return ret;
+        return result;
     }
 }
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodInvocationResult.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodInvocationResult.java
index 76265fb..1dd6a33 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodInvocationResult.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/MethodInvocationResult.java
@@ -18,12 +18,15 @@
 
 package org.apache.shardingsphere.agent.core.plugin.advice;
 
+import lombok.Getter;
+
 /**
  * The advice method invocation result.
  */
+@Getter
 public class MethodInvocationResult {
     
-    private boolean isRebased;
+    private boolean rebased;
     
     private Object result;
     
@@ -33,26 +36,7 @@ public class MethodInvocationResult {
      * @param result rebase the origin result
      */
     public void rebase(final Object result) {
-        isRebased = true;
+        rebased = true;
         this.result = result;
     }
-    
-    /**
-     * Whether or not to discard origin method.
-     *
-     * @return to replace the origin result if true
-     */
-    public boolean isRebased() {
-        return isRebased;
-    }
-    
-    /**
-     * Result that is provided by per-method advice.
-     *
-     * @return the advice result
-     */
-    public Object getResult() {
-        return result;
-    }
-    
 }
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/OverrideArgsInvoker.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/OverrideArgsInvoker.java
index 164d86c..d3b5fd4 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/OverrideArgsInvoker.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/OverrideArgsInvoker.java
@@ -24,11 +24,10 @@ package org.apache.shardingsphere.agent.core.plugin.advice;
 public interface OverrideArgsInvoker {
     
     /**
-     * Invocation origin method.
+     * Call invocation origin method.
      *
      * @param args the origin method arguments
      * @return the result of the origin method
      */
     Object call(Object[] args);
-    
 }
diff --git a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/StaticMethodAroundInterceptor.java b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/StaticMethodAroundInterceptor.java
index 06e77c9..0304da7 100644
--- a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/StaticMethodAroundInterceptor.java
+++ b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/StaticMethodAroundInterceptor.java
@@ -52,41 +52,42 @@ public class StaticMethodAroundInterceptor {
     @RuntimeType
     @SneakyThrows
     public Object intercept(final @Origin Class<?> klass, final @Origin Method method, final @AllArguments Object[] args, final @SuperCall Callable<?> callable) {
-        final MethodInvocationResult result = new MethodInvocationResult();
-        final Object ret;
+        final MethodInvocationResult invocationResult = new MethodInvocationResult();
+        final Object result;
         try {
-            advice.afterMethod(klass, method, args, result);
+            advice.beforeMethod(klass, method, args, invocationResult);
             // CHECKSTYLE:OFF
-        } catch (Throwable throwable) {
+        } catch (Throwable ex) {
             // CHECKSTYLE:ON
-            log.error("Failed to execute the pre-method of method[{}] in class[{}].", method.getName(), klass, throwable);
+            log.error("Failed to execute the pre-method of method[{}] in class[{}].", method.getName(), klass, ex);
         }
         try {
-            if (result.isRebased()) {
-                ret = result.getResult();
+            if (invocationResult.isRebased()) {
+                result = invocationResult.getResult();
             } else {
-                ret = callable.call();
+                result = callable.call();
             }
+            invocationResult.rebase(result);
             // CHECKSTYLE:OFF
-        } catch (Throwable throwable) {
+        } catch (final Throwable ex) {
             // CHECKSTYLE:ON
             try {
-                advice.onThrowing(klass, method, args, throwable);
+                advice.onThrowing(klass, method, args, ex);
                 // CHECKSTYLE:OFF
-            } catch (Throwable ignore) {
+            } catch (final Throwable ignored) {
                 // CHECKSTYLE:ON
-                log.error("Failed to execute the error handler of method[{}] in class[{}].", method.getName(), klass, throwable);
+                log.error("Failed to execute the error handler of method[{}] in class[{}].", method.getName(), klass, ex);
             }
-            throw throwable;
+            throw ex;
         } finally {
             try {
-                advice.beforeMethod(klass, method, args, result);
+                advice.afterMethod(klass, method, args, invocationResult);
                 // CHECKSTYLE:OFF
-            } catch (Throwable throwable) {
+            } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
-                log.error("Failed to execute the post-method of method[{}] in class[{}].", method.getName(), klass, throwable);
+                log.error("Failed to execute the post-method of method[{}] in class[{}].", method.getName(), klass, ex);
             }
         }
-        return ret;
+        return result;
     }
 }
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
index 223ce2a..f06f7bb 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
@@ -157,9 +157,9 @@ public final class PrometheusMetricsRegister implements MetricsRegister {
         }
         try {
             httpServer = new HTTPServer(inetSocketAddress, CollectorRegistry.defaultRegistry, true);
-            log.info(String.format("you start prometheus metrics http server host is: %s , port is: %s", inetSocketAddress.getPort(), inetSocketAddress.getPort()));
-        } catch (IOException e) {
-            log.error("you start prometheus metrics http server is error", e);
+            log.info(String.format("you start prometheus metrics http server host is: %s , port is: %s", inetSocketAddress.getHostString(), inetSocketAddress.getPort()));
+        } catch (final IOException exception) {
+            log.error("you start prometheus metrics http server is error", exception);
         }
     }
     
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/CommandExecutorTaskAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/CommandExecutorTaskAdvice.java
index b665260..1e5859d 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/CommandExecutorTaskAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/CommandExecutorTaskAdvice.java
@@ -29,7 +29,7 @@ import org.apache.shardingsphere.agent.metrics.api.reporter.MetricsReporter;
  */
 public final class CommandExecutorTaskAdvice implements MethodAroundAdvice {
     
-    private static final String METRICS_NAME = " proxy_execute_latency_millis";
+    private static final String METRICS_NAME = "proxy_execute_latency_millis";
     
     static {
         MetricsReporter.registerHistogram(METRICS_NAME, "the shardingsphere proxy executor latency millis");
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/MethodNameConstant.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/MethodNameConstant.java
index 23491e3..47be47f 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/MethodNameConstant.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/MethodNameConstant.java
@@ -32,5 +32,4 @@ public final class MethodNameConstant {
     public static final String COMMIT = "commit";
     
     public static final String ROLL_BACK = "rollback";
-    
 }
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/DataNodeRouterAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/SQLRouteEngineAdvice.java
similarity index 93%
rename from shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/DataNodeRouterAdvice.java
rename to shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/SQLRouteEngineAdvice.java
index 3454f9b..9b4554a 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/DataNodeRouterAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/SQLRouteEngineAdvice.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.agent.core.plugin.advice.MethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.advice.MethodInvocationResult;
 import org.apache.shardingsphere.agent.core.plugin.advice.TargetObject;
 import org.apache.shardingsphere.agent.metrics.api.reporter.MetricsReporter;
+import org.apache.shardingsphere.infra.binder.LogicSQL;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
@@ -34,9 +35,9 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectState
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateStatement;
 
 /**
- * Data node router advice.
+ * SQL route engine advice.
  */
-public final class DataNodeRouterAdvice implements MethodAroundAdvice {
+public final class SQLRouteEngineAdvice implements MethodAroundAdvice {
     
     private static final String SELECT = "sql_select_total";
     
@@ -61,15 +62,16 @@ public final class DataNodeRouterAdvice implements MethodAroundAdvice {
     
     @Override
     public void beforeMethod(final TargetObject target, final Method method, final Object[] args, final MethodInvocationResult result) {
-        SQLStatement sqlStatement = (SQLStatement) args[0];
+        LogicSQL logicSQL = (LogicSQL) args[0];
+        SQLStatement sqlStatement = logicSQL.getSqlStatementContext().getSqlStatement();
         if (sqlStatement instanceof InsertStatement) {
-            MetricsReporter.counterIncrement(SELECT);
+            MetricsReporter.counterIncrement(INSERT);
         } else if (sqlStatement instanceof DeleteStatement) {
             MetricsReporter.counterIncrement(DELETE);
         } else if (sqlStatement instanceof UpdateStatement) {
             MetricsReporter.counterIncrement(UPDATE);
         } else if (sqlStatement instanceof SelectStatement) {
-            MetricsReporter.counterIncrement(INSERT);
+            MetricsReporter.counterIncrement(SELECT);
         }
     }
 
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/TransactionAdvice.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/TransactionAdvice.java
index 9ea14e6..39007fe 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/TransactionAdvice.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/TransactionAdvice.java
@@ -29,9 +29,9 @@ import org.apache.shardingsphere.agent.metrics.api.reporter.MetricsReporter;
  */
 public final class TransactionAdvice implements MethodAroundAdvice {
     
-    private static final String COMMIT = "proxy_transaction_commit";
+    private static final String COMMIT = "proxy_transaction_commit_total";
     
-    private static final String ROLLBACK = "proxy_transaction_rollback";
+    private static final String ROLLBACK = "proxy_transaction_rollback_total";
     
     static {
         MetricsReporter.registerCounter(COMMIT, "the shardingsphere proxy transaction commit count total");
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
index 9c7d39e..2161e21 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
@@ -35,9 +35,9 @@ public final class MetricsPluginDefinition extends PluginDefinition {
     
     private static final String CHANNEL_HANDLER_ADVICE_CLASS = "org.apache.shardingsphere.agent.metrics.bootstrap.ChannelHandlerAdvice";
     
-    private static final String DATA_NODE_ROUTER_ENHANCE_CLASS = "org.apache.shardingsphere.infra.route.DataNodeRouter";
+    private static final String SQL_ROUTER_ENGINE_ENHANCE_CLASS = "org.apache.shardingsphere.infra.route.engine.SQLRouteEngine";
     
-    private static final String DATA_NODE_ROUTER_ADVICE_CLASS = "org.apache.shardingsphere.agent.metrics.bootstrap.DataNodeRouterAdvice";
+    private static final String SQL_ROUTER_ENGINE_ADVICE_CLASS = "org.apache.shardingsphere.agent.metrics.bootstrap.SQLRouteEngineAdvice";
     
     private static final String TRANSACTION_ENHANCE_CLASS = "org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.BackendTransactionManager";
     
@@ -58,9 +58,9 @@ public final class MetricsPluginDefinition extends PluginDefinition {
                         .or(ElementMatchers.named(MethodNameConstant.CHANNEL_READ)))
                 .implement(CHANNEL_HANDLER_ADVICE_CLASS)
                 .build();
-        intercept(DATA_NODE_ROUTER_ENHANCE_CLASS)
+        intercept(SQL_ROUTER_ENGINE_ENHANCE_CLASS)
                 .aroundInstanceMethod(ElementMatchers.named("route"))
-                .implement(DATA_NODE_ROUTER_ADVICE_CLASS)
+                .implement(SQL_ROUTER_ENGINE_ADVICE_CLASS)
                 .build();
         intercept(TRANSACTION_ENHANCE_CLASS)
                 .aroundInstanceMethod(ElementMatchers.named(MethodNameConstant.COMMIT).or(ElementMatchers.named(MethodNameConstant.ROLL_BACK)))