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());
+  }
 }

Reply via email to