[SCB-2588]circuit breaker provider a name to distinguish metrics (#3102)
diff --git a/governance/pom.xml b/governance/pom.xml
index 90f7eef..60eb64d 100644
--- a/governance/pom.xml
+++ b/governance/pom.xml
@@ -31,6 +31,10 @@
<dependencies>
<dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>foundation-common</artifactId>
+ </dependency>
+ <dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-all</artifactId>
</dependency>
@@ -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 5048618..65f2711 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 @@
.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 8ab3333..ade1987 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 @@
.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 86b19bf..a97c3c6 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 @@
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 67f94c2..12ba905 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 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 @@
private boolean hasStart = false;
@Inject
- private List<MonitorDaraProvider> dataProviders;
+ private List<MonitorDataProvider> dataProviders;
@Inject
private MonitorDataPublisher publisher;
@@ -54,7 +54,7 @@
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 @@
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 @@
}
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 70b6e44..de350f7 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.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 @@
}
@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 7f0c9dd..1a00cc5 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 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 @@
* 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 6c0b4c7..ea8f2de 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.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 @@
/**
* 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 98%
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 bfe2155..ced4598 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.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 a5b1012..7876c2e 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 c3a1a55..c5411fe 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 @@
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 64a191b..ef37c4f 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.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.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 @@
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()));
}
}