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 6472199  [SCB-2082] add separated switches for metricsEndpoint and 
healthEndpoint (#1953)
6472199 is described below

commit 6472199807de48ac523e0e1bd3f71470c358c1ff
Author: yhs0092 <[email protected]>
AuthorDate: Tue Sep 15 19:28:08 2020 +0800

    [SCB-2082] add separated switches for metricsEndpoint and healthEndpoint 
(#1953)
---
 .../metrics/core/HealthBootListener.java           |  36 +++++++
 .../metrics/core/MetricsBootListener.java          |   4 -
 .../metrics/core/TestHealthBootListener.java       | 104 +++++++++++++++++++++
 .../metrics/core/TestMetricsBootListener.java      |  83 +++++++++++++---
 4 files changed, 209 insertions(+), 18 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..cef2eea
--- /dev/null
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/HealthBootListener.java
@@ -0,0 +1,36 @@
+/*
+ * 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 org.apache.servicecomb.core.BootListener;
+import org.apache.servicecomb.metrics.core.publish.HealthCheckerRestPublisher;
+import org.springframework.stereotype.Component;
+
+import com.netflix.config.DynamicPropertyFactory;
+
+@Component
+public class HealthBootListener implements BootListener {
+  @Override
+  public void onBeforeProducerProvider(BootEvent event) {
+    if 
(!DynamicPropertyFactory.getInstance().getBooleanProperty("servicecomb.health.endpoint.enabled",
 true).get()) {
+      return;
+    }
+
+    event.getScbEngine().getProducerProviderManager()
+        .addProducerMeta("healthEndpoint", 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 9786661..365867a 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
@@ -22,7 +22,6 @@ 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;
 
@@ -47,9 +46,6 @@ public class MetricsBootListener implements BootListener {
       return;
     }
 
-    event.getScbEngine().getProducerProviderManager()
-        .addProducerMeta("healthEndpoint", new HealthCheckerRestPublisher());
-
     MetricsRestPublisher metricsRestPublisher =
         SPIServiceUtils.getTargetService(MetricsInitializer.class, 
MetricsRestPublisher.class);
     event.getScbEngine().getProducerProviderManager()
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthBootListener.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthBootListener.java
new file mode 100644
index 0000000..aad86e4
--- /dev/null
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthBootListener.java
@@ -0,0 +1,104 @@
+/*
+ * 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 java.util.ArrayList;
+import java.util.List;
+
+import org.apache.servicecomb.core.BootListener.BootEvent;
+import org.apache.servicecomb.core.SCBEngine;
+import org.apache.servicecomb.core.provider.producer.ProducerMeta;
+import org.apache.servicecomb.core.provider.producer.ProducerProviderManager;
+import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
+import org.apache.servicecomb.metrics.core.publish.HealthCheckerRestPublisher;
+import org.hamcrest.Matchers;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestHealthBootListener {
+
+  @Before
+  public void setUp() {
+    ArchaiusUtils.resetConfig();
+  }
+
+  @After
+  public void tearDown() {
+    ArchaiusUtils.resetConfig();
+  }
+
+  @Test
+  public void onBeforeProducerProvider_health_endpoint_enabled_by_default() {
+    final HealthBootListener listener = new HealthBootListener();
+
+    final List<ProducerMeta> producerMetas = new ArrayList<>();
+    final BootEvent event = new BootEvent();
+    final ProducerMeta producerMeta = new ProducerMeta();
+    final SCBEngine scbEngine = new SCBEngine() {
+      final public ProducerProviderManager producerProviderManager = new 
ProducerProviderManager(this) {
+
+        @Override
+        public void addProducerMeta(String schemaId, Object instance) {
+          producerMeta.setSchemaId(schemaId);
+          producerMeta.setInstance(instance);
+          producerMetas.add(producerMeta);
+        }
+      };
+
+      @Override
+      public ProducerProviderManager getProducerProviderManager() {
+        return producerProviderManager;
+      }
+    };
+    event.setScbEngine(scbEngine);
+    listener.onBeforeProducerProvider(event);
+
+    Assert.assertThat(producerMetas, Matchers.contains(producerMeta));
+    Assert.assertThat(producerMeta.getSchemaId(), 
Matchers.equalTo("healthEndpoint"));
+    Assert.assertThat(producerMeta.getInstance(), 
Matchers.instanceOf(HealthCheckerRestPublisher.class));
+  }
+
+  @Test
+  public void onBeforeProducerProvider_health_endpoint_disabled() {
+    ArchaiusUtils.setProperty("servicecomb.health.endpoint.enabled", false);
+    final HealthBootListener listener = new HealthBootListener();
+
+    final List<ProducerMeta> producerMetas = new ArrayList<>();
+    final BootEvent event = new BootEvent();
+    final SCBEngine scbEngine = new SCBEngine() {
+      final public ProducerProviderManager producerProviderManager = new 
ProducerProviderManager(this) {
+
+        @Override
+        public void addProducerMeta(String schemaId, Object instance) {
+          producerMetas.add(new ProducerMeta(schemaId, instance));
+        }
+      };
+
+      @Override
+      public ProducerProviderManager getProducerProviderManager() {
+        return producerProviderManager;
+      }
+    };
+    event.setScbEngine(scbEngine);
+    listener.onBeforeProducerProvider(event);
+
+    Assert.assertThat(producerMetas, 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 e8335e3..6e64ef4 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
@@ -16,32 +16,87 @@
  */
 package org.apache.servicecomb.metrics.core;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.servicecomb.core.BootListener.BootEvent;
 import org.apache.servicecomb.core.SCBEngine;
-import org.apache.servicecomb.core.bootstrap.SCBBootstrap;
-import org.apache.servicecomb.foundation.common.utils.BeanUtils;
-import org.apache.servicecomb.registry.RegistrationManager;
-import org.apache.servicecomb.registry.api.registry.Microservice;
+import org.apache.servicecomb.core.provider.producer.ProducerMeta;
+import org.apache.servicecomb.core.provider.producer.ProducerProviderManager;
+import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
+import org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher;
+import org.hamcrest.Matchers;
+import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
 public class TestMetricsBootListener {
   @Before
   public void setUp() {
-    // Metrics boot depends on executor bean. Old test will fail but event 
handling not throw the error.
-    BeanUtils.init();
+    ArchaiusUtils.resetConfig();
+  }
+
+  @After
+  public void tearDown() {
+    ArchaiusUtils.resetConfig();
   }
 
   @Test
-  public void registerSchemas() {
-    SCBBootstrap.createSCBEngineForTest().run();
+  public void onBeforeProducerProvider_metrics_endpoint_enabled_by_default() {
+    final MetricsBootListener listener = new MetricsBootListener();
+
+    final List<ProducerMeta> producerMetas = new ArrayList<>();
+    final BootEvent event = new BootEvent();
+    final ProducerMeta producerMeta = new ProducerMeta();
+    final SCBEngine scbEngine = new SCBEngine() {
+      final public ProducerProviderManager producerProviderManager = new 
ProducerProviderManager(this) {
+
+        @Override
+        public void addProducerMeta(String schemaId, Object instance) {
+          producerMeta.setSchemaId(schemaId);
+          producerMeta.setInstance(instance);
+          producerMetas.add(producerMeta);
+        }
+      };
+
+      @Override
+      public ProducerProviderManager getProducerProviderManager() {
+        return producerProviderManager;
+      }
+    };
+    event.setScbEngine(scbEngine);
+    listener.onBeforeProducerProvider(event);
+
+    Assert.assertThat(producerMetas, Matchers.contains(producerMeta));
+    Assert.assertThat(producerMeta.getSchemaId(), 
Matchers.equalTo("metricsEndpoint"));
+    Assert.assertThat(producerMeta.getInstance(), 
Matchers.instanceOf(MetricsRestPublisher.class));
+  }
+
+  @Test
+  public void onBeforeProducerProvider_metrics_endpoint_disabled() {
+    ArchaiusUtils.setProperty("servicecomb.metrics.endpoint.enabled", false);
+    final MetricsBootListener listener = new MetricsBootListener();
+
+    final List<ProducerMeta> producerMetas = new ArrayList<>();
+    final BootEvent event = new BootEvent();
+    final SCBEngine scbEngine = new SCBEngine() {
+      final public ProducerProviderManager producerProviderManager = new 
ProducerProviderManager(this) {
 
-    Microservice microservice = RegistrationManager.INSTANCE.getMicroservice();
-    microservice.getSchemas().contains("healthEndpoint");
-    microservice.getSchemaMap().containsKey("healthEndpoint");
+        @Override
+        public void addProducerMeta(String schemaId, Object instance) {
+          producerMetas.add(new ProducerMeta(schemaId, instance));
+        }
+      };
 
-    microservice.getSchemas().contains("metricsEndpoint");
-    microservice.getSchemaMap().containsKey("metricsEndpoint");
+      @Override
+      public ProducerProviderManager getProducerProviderManager() {
+        return producerProviderManager;
+      }
+    };
+    event.setScbEngine(scbEngine);
+    listener.onBeforeProducerProvider(event);
 
-    SCBEngine.getInstance().destroy();
+    Assert.assertThat(producerMetas, Matchers.empty());
   }
 }

Reply via email to