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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 222999ff8 [SCB-2588]circuit breaker provider a name to distinguish 
metrics (#3102)
222999ff8 is described below

commit 222999ff8298078b1d00ddafb67d7b8c7cb42876
Author: liubao68 <[email protected]>
AuthorDate: Mon Jun 20 21:48:16 2022 +0800

    [SCB-2588]circuit breaker provider a name to distinguish metrics (#3102)
---
 governance/pom.xml                                 | 11 +++++--
 .../governance/handler/CircuitBreakerHandler.java  |  3 +-
 .../handler/InstanceIsolationHandler.java          |  4 ++-
 .../governance/InstanceIsolationTest.java          | 16 ++++-----
 .../huaweicloud/dashboard/monitor/DataFactory.java | 10 +++---
 .../monitor/DefaultMonitorDataPublisher.java       |  4 +--
 .../monitor/HealthMonitorDataProvider.java         |  4 +--
 .../monitor/MetricsMonitorDataProvider.java        |  4 +--
 ...rDaraProvider.java => MonitorDataProvider.java} |  2 +-
 .../monitor/model/MonitorDataPublisher.java        |  2 +-
 ...st.java => MetricsMonitorDataProviderTest.java} |  2 +-
 .../publish/TestThreadPoolPublishModelFactory.java | 38 +++++-----------------
 12 files changed, 44 insertions(+), 56 deletions(-)

diff --git a/governance/pom.xml b/governance/pom.xml
index 90f7eef30..60eb64d55 100644
--- a/governance/pom.xml
+++ b/governance/pom.xml
@@ -30,6 +30,10 @@
   <name>Java Chassis::Governance</name>
 
   <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>foundation-common</artifactId>
+    </dependency>
     <dependency>
       <groupId>io.github.resilience4j</groupId>
       <artifactId>resilience4j-all</artifactId>
@@ -40,7 +44,7 @@
     </dependency>
     <dependency>
       <groupId>io.micrometer</groupId>
-      <artifactId>micrometer-registry-prometheus</artifactId>
+      <artifactId>micrometer-core</artifactId>
     </dependency>
     <dependency>
       <groupId>org.aspectj</groupId>
@@ -86,8 +90,9 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>foundation-common</artifactId>
+      <groupId>io.micrometer</groupId>
+      <artifactId>micrometer-registry-prometheus</artifactId>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 </project>
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
index 50486183c..65f271188 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
@@ -78,6 +78,7 @@ public class CircuitBreakerHandler extends 
AbstractGovernanceHandler<CircuitBrea
           .ofCircuitBreakerRegistry(circuitBreakerRegistry)
           .bindTo(meterRegistry);
     }
-    return circuitBreakerRegistry.circuitBreaker(policy.getName(), 
circuitBreakerConfig);
+    return circuitBreakerRegistry.circuitBreaker(
+        CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + "." + 
policy.getName(), circuitBreakerConfig);
   }
 }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
index 8ab3333b2..ade19871d 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
@@ -106,6 +106,8 @@ public class InstanceIsolationHandler extends 
AbstractGovernanceHandler<CircuitB
           .ofCircuitBreakerRegistry(circuitBreakerRegistry)
           .bindTo(meterRegistry);
     }
-    return 
circuitBreakerRegistry.circuitBreaker(governanceRequest.getInstanceId(), 
circuitBreakerConfig);
+    return 
circuitBreakerRegistry.circuitBreaker(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY
+        + "." + governanceRequest.getServiceName()
+        + "." + governanceRequest.getInstanceId(), circuitBreakerConfig);
   }
 }
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
index 86b19bf76..a97c3c6f0 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
@@ -111,24 +111,24 @@ public class InstanceIsolationTest {
   private void assertMetricsNotFinish() {
     String result = ((PrometheusMeterRegistry) meterRegistry).scrape();
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_state{name=\"instance01\",state=\"open\",} 1.0"));
+        
"resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance01\",state=\"open\",}
 1.0"));
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_state{name=\"instance02\",state=\"closed\",} 
1.0"));
+        
"resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance02\",state=\"closed\",}
 1.0"));
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance01\",}
 1.0"));
+        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance01\",}
 1.0"));
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance02\",}
 4.0"));
+        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance02\",}
 4.0"));
   }
 
   private void assertMetricsFinish() {
     String result = ((PrometheusMeterRegistry) meterRegistry).scrape();
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_state{name=\"instance01\",state=\"closed\",} 
1.0"));
+        
"resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance01\",state=\"closed\",}
 1.0"));
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_state{name=\"instance02\",state=\"closed\",} 
1.0"));
+        
"resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance02\",state=\"closed\",}
 1.0"));
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance01\",}
 3.0"));
+        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance01\",}
 3.0"));
     Assertions.assertTrue(result.contains(
-        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance02\",}
 6.0"));
+        
"resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance02\",}
 6.0"));
   }
 }
diff --git 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java
 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java
index 67f94c220..12ba9052a 100644
--- 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java
+++ 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java
@@ -26,7 +26,7 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 
 import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.data.MonitorConstant;
-import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataPublisher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,7 +41,7 @@ public class DataFactory {
   private boolean hasStart = false;
 
   @Inject
-  private List<MonitorDaraProvider> dataProviders;
+  private List<MonitorDataProvider> dataProviders;
 
   @Inject
   private MonitorDataPublisher publisher;
@@ -54,7 +54,7 @@ public class DataFactory {
     executorService = Executors.newScheduledThreadPool(CORE_SIZE, 
threadFactory);
   }
 
-  public void setMonitorDataProviders(List<MonitorDaraProvider> dataProviders) 
{
+  public void setMonitorDataProviders(List<MonitorDataProvider> dataProviders) 
{
     this.dataProviders = dataProviders;
   }
 
@@ -68,7 +68,7 @@ public class DataFactory {
 
       StringBuilder sb = new StringBuilder();
       sb.append("Monitor data sender started. Configured data providers is {");
-      for (MonitorDaraProvider provider : dataProviders) {
+      for (MonitorDataProvider provider : dataProviders) {
         sb.append(provider.getClass().getName());
         sb.append(",");
       }
@@ -87,7 +87,7 @@ public class DataFactory {
   }
 
   void sendData() {
-    for (MonitorDaraProvider provider : this.dataProviders) {
+    for (MonitorDataProvider provider : this.dataProviders) {
       if (provider.enabled()) {
         this.publisher.publish(provider);
       }
diff --git 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java
 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java
index 70b6e4495..de350f787 100644
--- 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java
+++ 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java
@@ -42,7 +42,7 @@ import 
org.apache.servicecomb.http.client.auth.RequestAuthHeaderProvider;
 import org.apache.servicecomb.http.client.common.HttpTransport;
 import org.apache.servicecomb.http.client.common.HttpTransportFactory;
 import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.data.MonitorConstant;
-import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataPublisher;
 
 public class DefaultMonitorDataPublisher implements MonitorDataPublisher {
@@ -118,7 +118,7 @@ public class DefaultMonitorDataPublisher implements 
MonitorDataPublisher {
   }
 
   @Override
-  public void publish(MonitorDaraProvider provider) {
+  public void publish(MonitorDataProvider provider) {
     dashboardClient.sendData(provider.getURL(), provider.getData());
   }
 }
diff --git 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java
 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java
index 7f0c9ddbf..1a00cc5c1 100644
--- 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java
+++ 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java
@@ -23,7 +23,7 @@ import java.util.Collection;
 
 import org.apache.servicecomb.dashboard.client.model.InterfaceInfo;
 import org.apache.servicecomb.dashboard.client.model.MonitorData;
-import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 
 import com.netflix.config.DynamicPropertyFactory;
 import com.netflix.hystrix.HystrixCircuitBreaker;
@@ -34,7 +34,7 @@ import com.netflix.hystrix.HystrixEventType;
  * This provider depends on bizkeeper. Because Bizkeeper depends on Hystrix
  * and it is not in maintainence, will keep it here for compatible reason.
  */
-public class HealthMonitorDataProvider implements MonitorDaraProvider {
+public class HealthMonitorDataProvider implements MonitorDataProvider {
   @Override
   public boolean enabled() {
     return DynamicPropertyFactory.getInstance()
diff --git 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java
 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java
index 6c0b4c714..ea8f2de38 100644
--- 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java
+++ 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java
@@ -24,7 +24,7 @@ import 
org.apache.servicecomb.dashboard.client.model.InterfaceInfo;
 import org.apache.servicecomb.dashboard.client.model.MonitorData;
 import org.apache.servicecomb.foundation.common.event.EventManager;
 import org.apache.servicecomb.foundation.metrics.PolledEvent;
-import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import 
org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 import 
org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst;
 import org.apache.servicecomb.metrics.core.publish.PublishModelFactory;
 import org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel;
@@ -40,7 +40,7 @@ import com.netflix.spectator.api.Meter;
 /**
  * Monitor data based on metrics-core module.
  */
-public class MetricsMonitorDataProvider implements MonitorDaraProvider {
+public class MetricsMonitorDataProvider implements MonitorDataProvider {
 
   public static final String CODE_SUCCESS = "2[0-9]{2}";
 
diff --git 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDaraProvider.java
 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataProvider.java
similarity index 99%
rename from 
huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDaraProvider.java
rename to 
huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataProvider.java
index bfe2155ec..ced459830 100644
--- 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDaraProvider.java
+++ 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataProvider.java
@@ -33,7 +33,7 @@ import 
org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 
-public interface MonitorDaraProvider {
+public interface MonitorDataProvider {
   boolean enabled();
 
   default String getURL() {
diff --git 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java
 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java
index a5b101215..7876c2e3f 100644
--- 
a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java
+++ 
b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java
@@ -18,7 +18,7 @@
 package org.apache.servicecomb.huaweicloud.dashboard.monitor.model;
 
 public interface MonitorDataPublisher {
-  void publish(MonitorDaraProvider provider);
+  void publish(MonitorDataProvider provider);
 
   default void init() {
 
diff --git 
a/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDaraProviderTest.java
 
b/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProviderTest.java
similarity index 96%
rename from 
huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDaraProviderTest.java
rename to 
huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProviderTest.java
index c3a1a550e..c5411febd 100644
--- 
a/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDaraProviderTest.java
+++ 
b/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProviderTest.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.huaweicloud.dashboard.monitor;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-public class MetricsMonitorDaraProviderTest {
+public class MetricsMonitorDataProviderTest {
   @Test
   public void testCodeMatch() {
     
Assertions.assertTrue("200".matches(MetricsMonitorDataProvider.CODE_SUCCESS));
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java
index 64a191b25..ef37c4f93 100644
--- 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java
@@ -17,8 +17,6 @@
 package org.apache.servicecomb.metrics.core.publish;
 
 import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.RunnableScheduledFuture;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.ThreadPoolExecutor;
 
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
@@ -28,9 +26,7 @@ import org.junit.Test;
 import org.junit.jupiter.api.Assertions;
 import org.junit.runners.MethodSorters;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.Lists;
-import com.google.common.eventbus.EventBus;
 import com.netflix.spectator.api.DefaultRegistry;
 import com.netflix.spectator.api.ManualClock;
 import com.netflix.spectator.api.Registry;
@@ -38,24 +34,18 @@ import com.netflix.spectator.api.patterns.PolledMeter;
 import com.netflix.spectator.api.patterns.ThreadPoolMonitor;
 
 import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
+import mockit.Injectable;
 import mockit.Mocked;
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class TestThreadPoolPublishModelFactory {
-  protected EventBus eventBus = new EventBus();
-
   protected Registry registry = new DefaultRegistry(new ManualClock());
 
-  @Mocked
-  ThreadPoolExecutor threadPoolExecutor;
-
   @Mocked
   BlockingQueue<Runnable> queue;
 
   @Test
-  public void createDefaultPublishModel() throws JsonProcessingException {
+  public void createDefaultPublishModel(@Injectable ThreadPoolExecutor 
threadPoolExecutor) throws Exception {
     new Expectations() {
       {
         threadPoolExecutor.getQueue();
@@ -64,25 +54,15 @@ public class TestThreadPoolPublishModelFactory {
         result = 10d;
       }
     };
-    new MockUp<ScheduledThreadPoolExecutor>() {
-      @Mock
-      void delayedExecute(RunnableScheduledFuture<?> task) {
 
-      }
-    };
-    try {
-      ThreadPoolMonitor.attach(registry, threadPoolExecutor, "test");
+    ThreadPoolMonitor.attach(registry, threadPoolExecutor, "test");
 
-      PolledMeter.update(registry);
-      PublishModelFactory factory = new 
PublishModelFactory(Lists.newArrayList(registry.iterator()));
-      DefaultPublishModel model = factory.createDefaultPublishModel();
+    PolledMeter.update(registry);
+    PublishModelFactory factory = new 
PublishModelFactory(Lists.newArrayList(registry.iterator()));
+    DefaultPublishModel model = factory.createDefaultPublishModel();
 
-      Assertions.assertEquals(
-          
"{\"test\":{\"avgTaskCount\":0.0,\"avgCompletedTaskCount\":0.0,\"currentThreadsBusy\":0,\"maxThreads\":0,\"poolSize\":0,\"corePoolSize\":0,\"queueSize\":10,\"rejected\":\"NaN\"}}",
-          JsonUtils.writeValueAsString(model.getThreadPools()));
-    } catch (Throwable e) {
-      e.printStackTrace();
-      Assertions.fail("unexpected error happen. " + e.getMessage());
-    }
+    Assertions.assertEquals(
+        
"{\"test\":{\"avgTaskCount\":0.0,\"avgCompletedTaskCount\":0.0,\"currentThreadsBusy\":0,\"maxThreads\":0,\"poolSize\":0,\"corePoolSize\":0,\"queueSize\":10,\"rejected\":\"NaN\"}}",
+        JsonUtils.writeValueAsString(model.getThreadPools()));
   }
 }

Reply via email to