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

zhaojinchao 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 acc04989560 Refactor MetricsCollectorFixture (#23664)
acc04989560 is described below

commit acc0498956081047a23ed179d447ed00c6f48e3b
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jan 20 00:14:51 2023 +0800

    Refactor MetricsCollectorFixture (#23664)
    
    * Refactor MetricsCollectorFixture
    
    * Refactor MetricsCollectorFixture
    
    * Add ProxyContextRestorer
---
 .../core/advice/RouteResultCountAdvice.java        |  4 +--
 ...ectorFactory.java => ProxyContextRestorer.java} | 25 ++++++++-------
 .../core/advice/RouteResultCountAdviceTest.java    | 11 +++----
 .../core/advice/SQLParseCountAdviceTest.java       | 34 ++++++++++----------
 .../core/advice/SQLRouteCountAdviceTest.java       | 16 +++++-----
 .../proxy/CommitTransactionsCountAdviceTest.java   |  4 +--
 .../proxy/CurrentConnectionsCountAdviceTest.java   |  6 ++--
 .../advice/proxy/ExecuteErrorsCountAdviceTest.java |  6 ++--
 .../proxy/ExecuteLatencyHistogramAdviceTest.java   |  4 +--
 .../core/advice/proxy/RequestsCountAdviceTest.java |  4 +--
 .../proxy/RollbackTransactionsCountAdviceTest.java |  4 +--
 .../core/exporter/impl/BuildInfoExporterTest.java  |  6 ++--
 .../impl/proxy/ProxyMetaDataInfoExporterTest.java  | 10 +++---
 .../impl/proxy/ProxyStateExporterTest.java         | 10 +++---
 .../{ => collector}/FixtureCollectorFactory.java   |  2 +-
 .../{ => collector}/MetricsCollectorFixture.java   | 36 ++++++++++++++++------
 ....metrics.core.collector.MetricsCollectorFactory |  2 +-
 .../observability/_index.en.md                     |  2 +-
 18 files changed, 99 insertions(+), 87 deletions(-)

diff --git 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdvice.java
 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdvice.java
index 85d722cbd71..343e71c2093 100644
--- 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdvice.java
+++ 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdvice.java
@@ -24,7 +24,6 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.Counte
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
-import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 
 import java.lang.reflect.Method;
@@ -44,8 +43,7 @@ public final class RouteResultCountAdvice implements 
InstanceMethodAdvice {
             return;
         }
         for (RouteUnit each : ((RouteContext) result).getRouteUnits()) {
-            RouteMapper dataSourceMapper = each.getDataSourceMapper();
-            
MetricsCollectorRegistry.<CounterMetricsCollector>get(routedResultConfig, 
pluginType).inc("data_source", dataSourceMapper.getActualName());
+            
MetricsCollectorRegistry.<CounterMetricsCollector>get(routedResultConfig, 
pluginType).inc("data_source", each.getDataSourceMapper().getActualName());
             each.getTableMappers().forEach(table -> 
MetricsCollectorRegistry.<CounterMetricsCollector>get(routedResultConfig, 
pluginType).inc("table", table.getActualName()));
         }
     }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/FixtureCollectorFactory.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/ProxyContextRestorer.java
similarity index 57%
copy from 
agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/FixtureCollectorFactory.java
copy to 
agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/ProxyContextRestorer.java
index ee6b32057c1..8e5a26baf55 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/FixtureCollectorFactory.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/ProxyContextRestorer.java
@@ -15,21 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.plugin.metrics.core.fixture;
+package org.apache.shardingsphere.agent.plugin.metrics.core;
 
-import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollector;
-import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorFactory;
-import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.junit.After;
+import org.junit.Before;
 
-public final class FixtureCollectorFactory implements MetricsCollectorFactory {
+public abstract class ProxyContextRestorer {
     
-    @Override
-    public MetricsCollector create(final MetricConfiguration metricConfig) {
-        return new MetricsCollectorFixture();
+    private ContextManager currentContextManager;
+    
+    @Before
+    public void recordCurrentContextManager() {
+        currentContextManager = ProxyContext.getInstance().getContextManager();
     }
     
-    @Override
-    public String getType() {
-        return "FIXTURE";
+    @After
+    public void restorePreviousContextManager() {
+        ProxyContext.init(currentContextManager);
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdviceTest.java
index 33c230fb4da..a462ed17929 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/RouteResultCountAdviceTest.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.agent.plugin.metrics.core.advice;
 
-import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceObjectFixture;
 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.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.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
@@ -38,8 +38,7 @@ import static org.mockito.Mockito.mock;
 
 public final class RouteResultCountAdviceTest {
     
-    private final MetricConfiguration routedResultConfig = new 
MetricConfiguration("routed_result_total",
-            MetricCollectorType.COUNTER, null, Arrays.asList("object", 
"name"));
+    private final MetricConfiguration routedResultConfig = new 
MetricConfiguration("routed_result_total", MetricCollectorType.COUNTER, null, 
Arrays.asList("object", "name"));
     
     @After
     public void reset() {
@@ -53,8 +52,6 @@ public final class RouteResultCountAdviceTest {
         RouteMapper tableMapper = new RouteMapper("t_order", "t_order_0");
         routeContext.getRouteUnits().add(new RouteUnit(dataSourceMapper, 
Collections.singleton(tableMapper)));
         new RouteResultCountAdvice().afterMethod(new 
TargetAdviceObjectFixture(), mock(Method.class), new Object[]{}, routeContext, 
"FIXTURE");
-        MetricsCollectorFixture wrapper = 
MetricsCollectorRegistry.get(routedResultConfig, "FIXTURE");
-        // TODO assert by specific label
-        assertThat(wrapper.getValue(), is(2d));
+        assertThat(MetricsCollectorRegistry.get(routedResultConfig, 
"FIXTURE").toString(), is("data_source.ds_0=1, table.t_order_0=1"));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
index 7c264e00ebf..aa1fccc4113 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
@@ -21,7 +21,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceO
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.create.RegisterStorageUnitStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowStorageUnitsStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.FormatStatement;
@@ -57,66 +57,66 @@ public final class SQLParseCountAdviceTest {
     
     @Test
     public void assertParseInsertSQL() {
-        assertParse(new MySQLInsertStatement());
+        assertParse(new MySQLInsertStatement(), "INSERT=1");
     }
     
     @Test
-    public void assertParseDeleteSQL() {
-        assertParse(new MySQLDeleteStatement());
+    public void assertParseUpdateSQL() {
+        assertParse(new MySQLUpdateStatement(), "UPDATE=1");
     }
     
     @Test
-    public void assertParseUpdateSQL() {
-        assertParse(new MySQLUpdateStatement());
+    public void assertParseDeleteSQL() {
+        assertParse(new MySQLDeleteStatement(), "DELETE=1");
     }
     
     @Test
     public void assertParseSelectSQL() {
-        assertParse(new MySQLSelectStatement());
+        assertParse(new MySQLSelectStatement(), "SELECT=1");
     }
     
     @Test
     public void assertParseDDL() {
-        assertParse(new MySQLCreateDatabaseStatement());
+        assertParse(new MySQLCreateDatabaseStatement(), "DDL=1");
     }
     
     @Test
     public void assertParseDCL() {
-        assertParse(new MySQLCreateUserStatement());
+        assertParse(new MySQLCreateUserStatement(), "DCL=1");
     }
     
     @Test
     public void assertParseDAL() {
-        assertParse(new MySQLShowDatabasesStatement());
+        assertParse(new MySQLShowDatabasesStatement(), "DAL=1");
     }
     
     @Test
     public void assertParseTCL() {
-        assertParse(new MySQLCommitStatement());
+        assertParse(new MySQLCommitStatement(), "TCL=1");
     }
     
     @Test
     public void assertParseRQL() {
-        assertParse(new ShowStorageUnitsStatement(new DatabaseSegment(0, 0, 
null), null));
+        assertParse(new ShowStorageUnitsStatement(new DatabaseSegment(0, 0, 
null), null), "RQL=1");
     }
     
     @Test
     public void assertParseRDL() {
-        assertParse(new RegisterStorageUnitStatement(false, 
Collections.emptyList()));
+        assertParse(new RegisterStorageUnitStatement(false, 
Collections.emptyList()), "RDL=1");
     }
     
     @Test
     public void assertParseRAL() {
-        assertParse(new ShowMigrationListStatement());
+        assertParse(new ShowMigrationListStatement(), "RAL=1");
     }
     
     @Test
     public void assertParseRUL() {
-        assertParse(new FormatStatement("SELECT * FROM t_order"));
+        assertParse(new FormatStatement("SELECT * FROM tbl"), "RUL=1");
     }
     
-    private void assertParse(final SQLStatement sqlStatement) {
+    private void assertParse(final SQLStatement sqlStatement, final String 
expected) {
         new SQLParseCountAdvice().afterMethod(new TargetAdviceObjectFixture(), 
mock(Method.class), new Object[]{}, sqlStatement, "FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), is(1d));
+        assertThat(MetricsCollectorRegistry.get(config, "FIXTURE").toString(), 
is(expected));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
index 8d401f9225e..4f7640d044a 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.agent.plugin.metrics.core.advice;
 
-import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceObjectFixture;
 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.MetricsCollectorFixture;
+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.infra.binder.QueryContext;
 import 
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
 import org.apache.shardingsphere.infra.context.ConnectionContext;
@@ -53,29 +53,29 @@ public final class SQLRouteCountAdviceTest {
     @Test
     public void assertInsertRoute() {
         QueryContext queryContext = new QueryContext(new 
CommonSQLStatementContext<>(new MySQLInsertStatement()), "", 
Collections.emptyList());
-        assertRoute(queryContext);
+        assertRoute(queryContext, "INSERT=1");
     }
     
     @Test
     public void assertUpdateRoute() {
         QueryContext queryContext = new QueryContext(new 
CommonSQLStatementContext<>(new MySQLUpdateStatement()), "", 
Collections.emptyList());
-        assertRoute(queryContext);
+        assertRoute(queryContext, "UPDATE=1");
     }
     
     @Test
     public void assertDeleteRoute() {
         QueryContext queryContext = new QueryContext(new 
CommonSQLStatementContext<>(new MySQLDeleteStatement()), "", 
Collections.emptyList());
-        assertRoute(queryContext);
+        assertRoute(queryContext, "DELETE=1");
     }
     
     @Test
     public void assertSelectRoute() {
         QueryContext queryContext = new QueryContext(new 
CommonSQLStatementContext<>(new MySQLSelectStatement()), "", 
Collections.emptyList());
-        assertRoute(queryContext);
+        assertRoute(queryContext, "SELECT=1");
     }
     
-    public void assertRoute(final QueryContext queryContext) {
+    public void assertRoute(final QueryContext queryContext, final String 
expected) {
         advice.beforeMethod(new TargetAdviceObjectFixture(), 
mock(Method.class), new Object[]{new ConnectionContext(), queryContext}, 
"FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), is(1d));
+        assertThat(MetricsCollectorRegistry.get(config, "FIXTURE").toString(), 
is(expected));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CommitTransactionsCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CommitTransactionsCountAdviceTest.java
index 5cd43e1d0ec..f4b9815c0b1 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CommitTransactionsCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CommitTransactionsCountAdviceTest.java
@@ -21,7 +21,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceO
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.junit.After;
 import org.junit.Test;
 
@@ -46,6 +46,6 @@ public final class CommitTransactionsCountAdviceTest {
     @Test
     public void assertMethod() {
         advice.beforeMethod(new TargetAdviceObjectFixture(), 
mock(Method.class), new Object[]{}, "FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), is(1D));
+        assertThat(MetricsCollectorRegistry.get(config, "FIXTURE").toString(), 
is("1"));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CurrentConnectionsCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CurrentConnectionsCountAdviceTest.java
index 456f3cd35bb..54a1cf46a12 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CurrentConnectionsCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/CurrentConnectionsCountAdviceTest.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.agent.plugin.metrics.core.advice.proxy;
 
-import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceObjectFixture;
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceObjectFixture;
 import org.junit.After;
 import org.junit.Test;
 
@@ -50,7 +50,7 @@ public final class CurrentConnectionsCountAdviceTest {
         advice.beforeMethod(targetObject, mockMethod("channelActive"), new 
Object[]{}, "FIXTURE");
         advice.beforeMethod(targetObject, mockMethod("channelActive"), new 
Object[]{}, "FIXTURE");
         advice.beforeMethod(targetObject, mockMethod("channelInactive"), new 
Object[]{}, "FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), is(1d));
+        assertThat(MetricsCollectorRegistry.get(config, "FIXTURE").toString(), 
is("1"));
     }
     
     private Method mockMethod(final String methodName) {
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteErrorsCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteErrorsCountAdviceTest.java
index c576d351745..e2e58dbb635 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteErrorsCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/ExecuteErrorsCountAdviceTest.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.agent.plugin.metrics.core.advice.proxy;
 
-import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceObjectFixture;
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceObjectFixture;
 import org.junit.After;
 import org.junit.Test;
 
@@ -45,6 +45,6 @@ public final class ExecuteErrorsCountAdviceTest {
     public void assertCountExecuteErrors() {
         TargetAdviceObjectFixture targetObject = new 
TargetAdviceObjectFixture();
         new ExecuteErrorsCountAdvice().afterMethod(targetObject, 
mock(Method.class), new Object[]{}, null, "FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), is(1d));
+        assertThat(MetricsCollectorRegistry.get(config, "FIXTURE").toString(), 
is("1"));
     }
 }
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 9715b10cd41..ff72b5aa2ea 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
@@ -21,7 +21,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceO
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.junit.After;
 import org.junit.Test;
 
@@ -49,6 +49,6 @@ public final class ExecuteLatencyHistogramAdviceTest {
         advice.beforeMethod(targetObject, method, new Object[]{}, "FIXTURE");
         Thread.sleep(500L);
         advice.afterMethod(targetObject, method, new Object[]{}, null, 
"FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), 
greaterThanOrEqualTo(500D));
+        assertThat(Double.parseDouble(MetricsCollectorRegistry.get(config, 
"FIXTURE").toString()), greaterThanOrEqualTo(500d));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RequestsCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RequestsCountAdviceTest.java
index a607fac43aa..c2e1c8d8e77 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RequestsCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RequestsCountAdviceTest.java
@@ -21,7 +21,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceO
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.junit.After;
 import org.junit.Test;
 
@@ -47,6 +47,6 @@ public final class RequestsCountAdviceTest {
     public void assertCountRequests() {
         TargetAdviceObjectFixture targetObject = new 
TargetAdviceObjectFixture();
         advice.beforeMethod(targetObject, mock(Method.class), new Object[]{}, 
"FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), is(1d));
+        assertThat(MetricsCollectorRegistry.get(config, "FIXTURE").toString(), 
is("1"));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RollbackTransactionsCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RollbackTransactionsCountAdviceTest.java
index 2de04e932b8..a08f50bf2ea 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RollbackTransactionsCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/proxy/RollbackTransactionsCountAdviceTest.java
@@ -21,7 +21,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.TargetAdviceO
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.junit.After;
 import org.junit.Test;
 
@@ -46,6 +46,6 @@ public final class RollbackTransactionsCountAdviceTest {
     @Test
     public void assertMethod() {
         advice.beforeMethod(new TargetAdviceObjectFixture(), 
mock(Method.class), new Object[]{}, "FIXTURE");
-        assertThat(((MetricsCollectorFixture) 
MetricsCollectorRegistry.get(config, "FIXTURE")).getValue(), is(1D));
+        assertThat(MetricsCollectorRegistry.get(config, "FIXTURE").toString(), 
is("1"));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
index ce16aa396c0..ce8f21e0532 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/BuildInfoExporterTest.java
@@ -21,7 +21,7 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsColl
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeMetricFamilyMetricsCollector;
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.junit.After;
 import org.junit.Test;
 
@@ -29,7 +29,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Optional;
 
-import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
 
@@ -45,6 +45,6 @@ public final class BuildInfoExporterTest {
     public void assertExport() {
         Optional<GaugeMetricFamilyMetricsCollector> collector = new 
BuildInfoExporter().export("FIXTURE");
         assertTrue(collector.isPresent());
-        assertThat(((MetricsCollectorFixture) collector.get()).getValue(), 
is(1d));
+        assertThat(collector.get().toString(), 
containsString("ShardingSphere=1, "));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
index 999349ca2d9..44f610b658a 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
@@ -17,11 +17,12 @@
 
 package 
org.apache.shardingsphere.agent.plugin.metrics.core.exporter.impl.proxy;
 
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.ProxyContextRestorer;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorRegistry;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeMetricFamilyMetricsCollector;
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.junit.After;
@@ -38,15 +39,12 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class ProxyMetaDataInfoExporterTest {
-    
-    private final ContextManager originalContextManager = 
ProxyContext.getInstance().getContextManager();
+public final class ProxyMetaDataInfoExporterTest extends ProxyContextRestorer {
     
     @After
     public void reset() {
         MetricConfiguration config = new 
MetricConfiguration("proxy_meta_data_info", 
MetricCollectorType.GAUGE_METRIC_FAMILY, null, 
Collections.singletonList("name"), Collections.emptyMap());
         ((MetricsCollectorFixture) MetricsCollectorRegistry.get(config, 
"FIXTURE")).reset();
-        ProxyContext.init(originalContextManager);
     }
     
     @Test
@@ -63,6 +61,6 @@ public final class ProxyMetaDataInfoExporterTest {
         ProxyContext.init(contextManager);
         Optional<GaugeMetricFamilyMetricsCollector> collector = new 
ProxyMetaDataInfoExporter().export("FIXTURE");
         assertTrue(collector.isPresent());
-        assertThat(((MetricsCollectorFixture) collector.get()).getValue(), 
is(0d));
+        assertThat(collector.get().toString(), is("schema_count=0, 
database_count=0"));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
index 18e72c00a74..1a36f062e19 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
@@ -17,11 +17,12 @@
 
 package 
org.apache.shardingsphere.agent.plugin.metrics.core.exporter.impl.proxy;
 
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.ProxyContextRestorer;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorRegistry;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeMetricFamilyMetricsCollector;
 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.MetricsCollectorFixture;
+import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -47,15 +48,12 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
-public final class ProxyStateExporterTest {
-    
-    private final ContextManager originalContextManager = 
ProxyContext.getInstance().getContextManager();
+public final class ProxyStateExporterTest extends ProxyContextRestorer {
     
     @After
     public void reset() {
         MetricConfiguration config = new MetricConfiguration("proxy_state", 
MetricCollectorType.GAUGE_METRIC_FAMILY, null, Collections.emptyList(), 
Collections.emptyMap());
         ((MetricsCollectorFixture) MetricsCollectorRegistry.get(config, 
"FIXTURE")).reset();
-        ProxyContext.init(originalContextManager);
     }
     
     @Test
@@ -73,6 +71,6 @@ public final class ProxyStateExporterTest {
         ProxyContext.init(new ContextManager(metaDataContexts, 
instanceContext));
         Optional<GaugeMetricFamilyMetricsCollector> collector = new 
ProxyStateExporter().export("FIXTURE");
         assertTrue(collector.isPresent());
-        assertThat(((MetricsCollectorFixture) collector.get()).getValue(), 
is(0d));
+        assertThat(collector.get().toString(), is("0"));
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/FixtureCollectorFactory.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/collector/FixtureCollectorFactory.java
similarity index 98%
rename from 
agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/FixtureCollectorFactory.java
rename to 
agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/collector/FixtureCollectorFactory.java
index ee6b32057c1..fa8d7a1ed76 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/FixtureCollectorFactory.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/collector/FixtureCollectorFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.plugin.metrics.core.fixture;
+package org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector;
 
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollector;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorFactory;
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/MetricsCollectorFixture.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/collector/MetricsCollectorFixture.java
similarity index 67%
rename from 
agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/MetricsCollectorFixture.java
rename to 
agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/collector/MetricsCollectorFixture.java
index b0a5438b3bc..aa8089e43b6 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/MetricsCollectorFixture.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/fixture/collector/MetricsCollectorFixture.java
@@ -15,21 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.plugin.metrics.core.fixture;
+package org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector;
 
-import lombok.Getter;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.CounterMetricsCollector;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeMetricFamilyMetricsCollector;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeMetricsCollector;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.HistogramMetricsCollector;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.SummaryMetricsCollector;
 
+import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
-@Getter
 public final class MetricsCollectorFixture implements CounterMetricsCollector, 
GaugeMetricsCollector, HistogramMetricsCollector, SummaryMetricsCollector, 
GaugeMetricFamilyMetricsCollector {
     
-    private double value;
+    private int value;
+    
+    private final Map<String, Integer> labeledValues = new LinkedHashMap<>();
     
     @Override
     public void inc() {
@@ -38,7 +42,8 @@ public final class MetricsCollectorFixture implements 
CounterMetricsCollector, G
     
     @Override
     public void inc(final String... labels) {
-        value++;
+        String key = String.join(".", labels);
+        labeledValues.put(key, labeledValues.getOrDefault(key, 0) + 1);
     }
     
     @Override
@@ -48,17 +53,20 @@ public final class MetricsCollectorFixture implements 
CounterMetricsCollector, G
     
     @Override
     public void dec(final String... labels) {
-        value--;
+        String key = String.join(".", labels);
+        labeledValues.put(key, labeledValues.getOrDefault(key, 0) - 1);
     }
     
     @Override
     public void observe(final double value) {
-        this.value = value;
+        this.value = (int) value;
     }
     
     @Override
     public void addMetric(final List<String> labelValues, final double value) {
-        this.value += value;
+        for (String each : labelValues) {
+            labeledValues.put(each, labeledValues.getOrDefault(each, 0) + 
(int) value);
+        }
     }
     
     @Override
@@ -66,10 +74,20 @@ public final class MetricsCollectorFixture implements 
CounterMetricsCollector, G
         return null;
     }
     
+    @Override
+    public String toString() {
+        return labeledValues.isEmpty() ? value + "" : String.join(", ", 
getLabeledContents());
+    }
+    
+    private Collection<String> getLabeledContents() {
+        return labeledValues.entrySet().stream().map(entry -> 
String.format("%s=%s", entry.getKey(), 
entry.getValue())).collect(Collectors.toList());
+    }
+    
     /**
      * Reset.
      */
     public void reset() {
-        value = 0d;
+        value = 0;
+        labeledValues.clear();
     }
 }
diff --git 
a/agent/plugins/metrics/core/src/test/resources/META-INF/services/org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorFactory
 
b/agent/plugins/metrics/core/src/test/resources/META-INF/services/org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorFactory
index a8cb342f4a6..2fbb22b9d77 100644
--- 
a/agent/plugins/metrics/core/src/test/resources/META-INF/services/org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorFactory
+++ 
b/agent/plugins/metrics/core/src/test/resources/META-INF/services/org.apache.shardingsphere.agent.plugin.metrics.core.collector.MetricsCollectorFactory
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.agent.plugin.metrics.core.fixture.FixtureCollectorFactory
+org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.FixtureCollectorFactory
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/observability/_index.en.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/observability/_index.en.md
index 13d7561d5d5..462b18a2961 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/observability/_index.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/observability/_index.en.md
@@ -162,7 +162,7 @@ services:
 | build_info                        | GAUGE_METRIC_FAMILY | Build information  
                                                                                
                                    |
 | parsed_sql_total                  | COUNTER             | Total count of 
parsed by type (INSERT, UPDATE, DELETE, SELECT, DDL, DCL, DAL, TCL, RQL, RDL, 
RAL, RUL)                                 |
 | routed_sql_total                  | COUNTER             | Total count of 
routed by type (INSERT, UPDATE, DELETE, SELECT)                                 
                                        |
-| routed_result_total               | COUNTER             | Total count of 
routed result. (data source routed, table routed)                               
                                        |
+| routed_result_total               | COUNTER             | Total count of 
routed result (data source routed, table routed)                                
                                        |
 | proxy_state                       | GAUGE_METRIC_FAMILY | Status information 
of ShardingSphere-Proxy. 0 is OK; 1 is CIRCUIT BREAK; 2 is LOCK                 
                                    |
 | proxy_meta_data_info              | GAUGE_METRIC_FAMILY | Meta data 
information of ShardingSphere-Proxy. schema_count is logic number of databases; 
database_count is actual number of databases |
 | proxy_current_connections         | GAUGE               | Current 
connections of ShardingSphere-Proxy                                             
                                               |


Reply via email to