This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch 1.3.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/1.3.x by this push:
new d4e2a7c [SCB-2082] add separated switches for metricsEndpoint and
healthEndpoint (#1957)
d4e2a7c is described below
commit d4e2a7c156f940e54f1072e0516ef7137c17aad5
Author: yhs0092 <[email protected]>
AuthorDate: Wed Sep 16 18:04:39 2020 +0800
[SCB-2082] add separated switches for metricsEndpoint and healthEndpoint
(#1957)
---
.../metrics/core/HealthBootListener.java | 49 +++++++++++++++++
.../metrics/core/MetricsBootListener.java | 9 ++--
...otListener.java => TestHealthBootListener.java} | 63 ++++++++++++++--------
.../metrics/core/TestMetricsBootListener.java | 46 +++++++++++++---
4 files changed, 134 insertions(+), 33 deletions(-)
diff --git
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/HealthBootListener.java
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/HealthBootListener.java
new file mode 100644
index 0000000..b703b47
--- /dev/null
+++
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/HealthBootListener.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.metrics.core;
+
+import javax.inject.Inject;
+
+import org.apache.servicecomb.core.BootListener;
+import org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory;
+import org.apache.servicecomb.metrics.core.publish.HealthCheckerRestPublisher;
+import org.springframework.stereotype.Component;
+
+import com.netflix.config.DynamicPropertyFactory;
+
+@Component
+public class HealthBootListener implements BootListener {
+ @Inject
+ ProducerSchemaFactory producerSchemaFactory;
+
+ @Override
+ public void onBootEvent(BootEvent event) {
+ if (event.getEventType() == EventType.BEFORE_PRODUCER_PROVIDER) {
+ registerSchemas();
+ }
+ }
+
+ private void registerSchemas() {
+ if
(!DynamicPropertyFactory.getInstance().getBooleanProperty("servicecomb.health.endpoint.enabled",
true).get()) {
+ return;
+ }
+
+ producerSchemaFactory.getOrCreateProducerSchema("healthEndpoint",
+ HealthCheckerRestPublisher.class,
+ new HealthCheckerRestPublisher());
+ }
+}
diff --git
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java
index d599fa6..d897281 100644
---
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java
+++
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java
@@ -25,11 +25,12 @@ import
org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.apache.servicecomb.foundation.metrics.MetricsBootstrap;
import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry;
-import org.apache.servicecomb.metrics.core.publish.HealthCheckerRestPublisher;
import org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher;
import org.apache.servicecomb.metrics.core.publish.SlowInvocationLogger;
import org.springframework.stereotype.Component;
+import com.netflix.config.DynamicPropertyFactory;
+
@Component
public class MetricsBootListener implements BootListener {
private MetricsBootstrap metricsBootstrap = new MetricsBootstrap();
@@ -66,9 +67,9 @@ public class MetricsBootListener implements BootListener {
}
private void registerSchemas() {
- producerSchemaFactory.getOrCreateProducerSchema("healthEndpoint",
- HealthCheckerRestPublisher.class,
- new HealthCheckerRestPublisher());
+ if
(!DynamicPropertyFactory.getInstance().getBooleanProperty("servicecomb.metrics.endpoint.enabled",
true).get()) {
+ return;
+ }
MetricsRestPublisher metricsRestPublisher =
SPIServiceUtils.getTargetService(MetricsInitializer.class,
MetricsRestPublisher.class);
diff --git
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthBootListener.java
similarity index 60%
copy from
metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
copy to
metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthBootListener.java
index 75eabe8..366dfb5 100644
---
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
+++
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthBootListener.java
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.servicecomb.metrics.core;
import java.util.ArrayList;
@@ -23,26 +24,35 @@ import org.apache.servicecomb.core.BootListener.BootEvent;
import org.apache.servicecomb.core.BootListener.EventType;
import org.apache.servicecomb.core.definition.SchemaMeta;
import org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory;
-import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
-import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
+import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.metrics.core.publish.HealthCheckerRestPublisher;
-import org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher;
-import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
+import org.hamcrest.Matchers;
+import org.junit.After;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
-import mockit.Deencapsulation;
import mockit.Mock;
import mockit.MockUp;
-public class TestMetricsBootListener {
- MetricsBootListener listener = new MetricsBootListener();
+public class TestHealthBootListener {
+ HealthBootListener listener = new HealthBootListener();
+
+ @Before
+ public void setUp() {
+ ArchaiusUtils.resetConfig();
+ }
+
+ @After
+ public void tearDown() {
+ ArchaiusUtils.resetConfig();
+ }
@Test
- public void registerSchemas() {
+ public void
onBootEvent_on_BEFORE_PRODUCER_PROVIDER_event_health_endpoint_enabled_by_default()
{
List<Object[]> argsList = new ArrayList<>();
- ProducerSchemaFactory producerSchemaFactory = new
MockUp<ProducerSchemaFactory>() {
+ listener.producerSchemaFactory = new MockUp<ProducerSchemaFactory>() {
@Mock
SchemaMeta getOrCreateProducerSchema(String schemaId,
Class<?> producerClass,
@@ -51,27 +61,38 @@ public class TestMetricsBootListener {
return null;
}
}.getMockInstance();
- Deencapsulation.setField(listener, "producerSchemaFactory",
producerSchemaFactory);
-
- Microservice microservice = new Microservice();
- microservice.setServiceName("name");
BootEvent event = new BootEvent();
event.setEventType(EventType.BEFORE_PRODUCER_PROVIDER);
listener.onBootEvent(event);
+ Assert.assertEquals(1, argsList.size());
Object[] args = argsList.get(0);
//we have remove parameter microserviceName
Assert.assertEquals("healthEndpoint", args[0]);
Assert.assertEquals(HealthCheckerRestPublisher.class, args[1]);
Assert.assertEquals(HealthCheckerRestPublisher.class, args[2].getClass());
+ }
- MetricsRestPublisher metricsRestPublisher =
- SPIServiceUtils.getTargetService(MetricsInitializer.class,
MetricsRestPublisher.class);
- args = argsList.get(1);
- //we have remove parameter microserviceName
- Assert.assertEquals("metricsEndpoint", args[0]);
- Assert.assertEquals(MetricsRestPublisher.class, args[1]);
- Assert.assertSame(metricsRestPublisher, args[2]);
+ @Test
+ public void
onBootEvent_on_BEFORE_PRODUCER_PROVIDER_event_health_endpoint_disabled() {
+ ArchaiusUtils.setProperty("servicecomb.health.endpoint.enabled", false);
+ List<Object[]> argsList = new ArrayList<>();
+
+ listener.producerSchemaFactory = new MockUp<ProducerSchemaFactory>() {
+ @Mock
+ SchemaMeta getOrCreateProducerSchema(String schemaId,
+ Class<?> producerClass,
+ Object producerInstance) {
+ argsList.add(new Object[] {schemaId, producerClass, producerInstance});
+ return null;
+ }
+ }.getMockInstance();
+
+ BootEvent event = new BootEvent();
+ event.setEventType(EventType.BEFORE_PRODUCER_PROVIDER);
+ listener.onBootEvent(event);
+
+ Assert.assertThat(argsList, Matchers.empty());
}
-}
+}
\ No newline at end of file
diff --git
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
index 75eabe8..70133ff 100644
---
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
+++
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
@@ -25,10 +25,13 @@ import org.apache.servicecomb.core.definition.SchemaMeta;
import org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory;
import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
-import org.apache.servicecomb.metrics.core.publish.HealthCheckerRestPublisher;
+import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher;
import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
+import org.hamcrest.Matchers;
+import org.junit.After;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
import mockit.Deencapsulation;
@@ -38,6 +41,16 @@ import mockit.MockUp;
public class TestMetricsBootListener {
MetricsBootListener listener = new MetricsBootListener();
+ @Before
+ public void setUp() {
+ ArchaiusUtils.resetConfig();
+ }
+
+ @After
+ public void tearDown() {
+ ArchaiusUtils.resetConfig();
+ }
+
@Test
public void registerSchemas() {
List<Object[]> argsList = new ArrayList<>();
@@ -60,18 +73,35 @@ public class TestMetricsBootListener {
event.setEventType(EventType.BEFORE_PRODUCER_PROVIDER);
listener.onBootEvent(event);
- Object[] args = argsList.get(0);
- //we have remove parameter microserviceName
- Assert.assertEquals("healthEndpoint", args[0]);
- Assert.assertEquals(HealthCheckerRestPublisher.class, args[1]);
- Assert.assertEquals(HealthCheckerRestPublisher.class, args[2].getClass());
-
MetricsRestPublisher metricsRestPublisher =
SPIServiceUtils.getTargetService(MetricsInitializer.class,
MetricsRestPublisher.class);
- args = argsList.get(1);
+ Object[] args = argsList.get(0);
//we have remove parameter microserviceName
Assert.assertEquals("metricsEndpoint", args[0]);
Assert.assertEquals(MetricsRestPublisher.class, args[1]);
Assert.assertSame(metricsRestPublisher, args[2]);
}
+
+ @Test
+ public void registerSchemas_health_endpoint_disabled() {
+ ArchaiusUtils.setProperty("servicecomb.metrics.endpoint.enabled", false);
+ List<Object[]> argsList = new ArrayList<>();
+
+ ProducerSchemaFactory producerSchemaFactory = new
MockUp<ProducerSchemaFactory>() {
+ @Mock
+ SchemaMeta getOrCreateProducerSchema(String schemaId,
+ Class<?> producerClass,
+ Object producerInstance) {
+ argsList.add(new Object[] {schemaId, producerClass, producerInstance});
+ return null;
+ }
+ }.getMockInstance();
+ Deencapsulation.setField(listener, "producerSchemaFactory",
producerSchemaFactory);
+
+ BootEvent event = new BootEvent();
+ event.setEventType(EventType.BEFORE_PRODUCER_PROVIDER);
+ listener.onBootEvent(event);
+
+ Assert.assertThat(argsList, Matchers.empty());
+ }
}