[ 
https://issues.apache.org/jira/browse/SCB-385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16423652#comment-16423652
 ] 

ASF GitHub Bot commented on SCB-385:
------------------------------------

wujimin closed pull request #628: [SCB-385] Metrics publisher switch to new 
mechanism
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/628
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index 42d543752..fa53abc16 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -96,20 +96,14 @@ public static void run() {
     }
 
     //0.5.0 later version metrics integration test
-    try {
-      Thread.sleep(1000);
-      @SuppressWarnings("unchecked")
-      Map<String, Double> metrics = restTemplate.getForObject(prefix + 
"/metrics", Map.class);
-
-      TestMgr
-          .check(true, metrics.get("jvm(name=heapUsed,statistic=gauge)") != 0);
-      TestMgr.check(true, metrics.size() > 0);
-      TestMgr.check(true,
-          metrics.get(
-              
"servicecomb.invocation(operation=springmvc.codeFirst.saySomething,role=producer,stage=total,statistic=count,status=200)")
 >= 0);
-    } catch (Exception e) {
-      TestMgr.check("true", "false");
-    }
+    @SuppressWarnings("unchecked")
+    Map<String, Double> metrics = restTemplate.getForObject(prefix + 
"/metrics", Map.class);
+
+//    TestMgr.check(true, metrics.get("jvm(name=heapUsed,statistic=gauge)") != 
0);
+    TestMgr.check(true, metrics.size() > 0);
+    TestMgr.check(true,
+        metrics.get(
+            
"servicecomb.invocation(operation=springmvc.codeFirst.saySomething,role=PRODUCER,stage=total,statistic=count,status=200,transport=highway)")
 >= 0);
 
     //prometheus integration test
     try {
diff --git 
a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml 
b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
index be64c9e6c..fbe42c314 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
+++ b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
@@ -82,6 +82,3 @@ ssl.keyStoreValue: Changeme_123
 ssl.crl: revoke.crl
 ssl.sslCustomClass: org.apache.servicecomb.demo.DemoSSLCustom
 
-servicecomb:
-  metrics:
-    window_time: 1000
diff --git a/metrics/metrics-core/pom.xml b/metrics/metrics-core/pom.xml
index f4d1e761b..360c0b6d7 100644
--- a/metrics/metrics-core/pom.xml
+++ b/metrics/metrics-core/pom.xml
@@ -30,16 +30,16 @@
 
   <dependencies>
     <dependency>
-      <groupId>com.netflix.servo</groupId>
-      <artifactId>servo-core</artifactId>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>foundation-metrics</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
-      <artifactId>foundation-metrics</artifactId>
+      <artifactId>java-chassis-core</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
-      <artifactId>provider-springmvc</artifactId>
+      <artifactId>swagger-generator-jaxrs</artifactId>
     </dependency>
 
     <dependency>
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 48c2837b3..289c8796f 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
@@ -16,9 +16,18 @@
  */
 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.foundation.common.event.EventManager;
+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.metrics.core.publish.HealthCheckerRestPublisher;
+import org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
+import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import org.springframework.stereotype.Component;
 
 import com.netflix.spectator.api.Spectator;
@@ -27,12 +36,36 @@
 public class MetricsBootListener implements BootListener {
   private MetricsBootstrap metricsBootstrap = new MetricsBootstrap();
 
+  @Inject
+  private ProducerSchemaFactory producerSchemaFactory;
+
   @Override
   public void onBootEvent(BootEvent event) {
-    if (!EventType.AFTER_REGISTRY.equals(event.getEventType())) {
-      return;
+    switch (event.getEventType()) {
+      case BEFORE_PRODUCER_PROVIDER:
+        registerSchemas();
+        break;
+      case AFTER_REGISTRY:
+        metricsBootstrap.start(Spectator.globalRegistry(), 
EventManager.getEventBus());
+        break;
+      default:
+        break;
     }
+  }
+
+  private void registerSchemas() {
+    Microservice microservice = RegistryUtils.getMicroservice();
+
+    
producerSchemaFactory.getOrCreateProducerSchema(microservice.getServiceName(),
+        "healthEndpoint",
+        HealthCheckerRestPublisher.class,
+        new HealthCheckerRestPublisher());
 
-    metricsBootstrap.start(Spectator.globalRegistry(), 
EventManager.getEventBus());
+    MetricsRestPublisher metricsRestPublisher =
+        SPIServiceUtils.getTargetService(MetricsInitializer.class, 
MetricsRestPublisher.class);
+    
producerSchemaFactory.getOrCreateProducerSchema(microservice.getServiceName(),
+        "metricsEndpoint",
+        metricsRestPublisher.getClass(),
+        metricsRestPublisher);
   }
 }
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerRestPublisher.java
similarity index 73%
rename from 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
rename to 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerRestPublisher.java
index fba4f44e2..ccc76438e 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerRestPublisher.java
@@ -19,18 +19,16 @@
 
 import java.util.Map;
 
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckResult;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckerManager;
-import org.apache.servicecomb.provider.rest.common.RestSchema;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 
-@RestSchema(schemaId = "healthEndpoint")
-@RequestMapping(path = "/health")
-public class HealthCheckerPublisher {
-  @RequestMapping(path = "/", method = RequestMethod.GET)
-  @CrossOrigin
+@Path("/health")
+public class HealthCheckerRestPublisher {
+  @Path("/")
+  @GET
   public boolean checkHealth() {
     Map<String, HealthCheckResult> results = 
HealthCheckerManager.getInstance().check();
     for (HealthCheckResult result : results.values()) {
@@ -41,8 +39,8 @@ public boolean checkHealth() {
     return true;
   }
 
-  @RequestMapping(path = "/details", method = RequestMethod.GET)
-  @CrossOrigin
+  @Path("/details")
+  @GET
   public Map<String, HealthCheckResult> checkHealthDetails() {
     return HealthCheckerManager.getInstance().check();
   }
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsPublisher.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsPublisher.java
deleted file mode 100644
index 56a5cb017..000000000
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsPublisher.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.publish;
-
-import java.util.Map;
-
-import org.apache.servicecomb.metrics.core.MonitorManager;
-import org.apache.servicecomb.provider.rest.common.RestSchema;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-
-@RestSchema(schemaId = "metricsEndpoint")
-@RequestMapping(path = "/metrics")
-public class MetricsPublisher {
-  @ApiResponses({
-      @ApiResponse(code = 400, response = String.class, message = "illegal 
request content"),
-  })
-  @RequestMapping(path = "/", method = RequestMethod.GET)
-  @CrossOrigin
-  public Map<String, Double> measure() {
-    return MonitorManager.getInstance().measure();
-  }
-}
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsRestPublisher.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsRestPublisher.java
new file mode 100644
index 000000000..2669b375f
--- /dev/null
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsRestPublisher.java
@@ -0,0 +1,87 @@
+/*
+ * 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.publish;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
+import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
+
+import com.google.common.eventbus.EventBus;
+import com.netflix.spectator.api.CompositeRegistry;
+import com.netflix.spectator.api.Id;
+
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+
+@Path("/metrics")
+public class MetricsRestPublisher implements MetricsInitializer {
+  private CompositeRegistry globalRegistry;
+
+  @Override
+  public void init(CompositeRegistry globalRegistry, EventBus eventBus, 
MetricsBootstrapConfig config) {
+    this.globalRegistry = globalRegistry;
+  }
+
+  @ApiResponses({
+      @ApiResponse(code = 400, response = String.class, message = "illegal 
request content"),
+  })
+  @GET
+  @Path("/")
+  public Map<String, Double> measure() {
+    Map<String, Double> measurements = new LinkedHashMap<>();
+    if (globalRegistry == null) {
+      return measurements;
+    }
+
+    StringBuilder sb = new StringBuilder();
+    globalRegistry
+        .iterator()
+        .forEachRemaining(meter -> {
+          meter.measure().forEach(measurement -> {
+            String key = idToString(measurement.id(), sb);
+            measurements.put(key, measurement.value());
+          });
+        });
+
+    return measurements;
+  }
+
+  // format id to string:
+  // idName(tag1=value1,tag2=value2)
+  protected String idToString(Id id, StringBuilder sb) {
+    sb.setLength(0);
+    sb.append(id.name()).append('(');
+    sb.append(StreamSupport
+        .stream(id
+            .tags()
+            .spliterator(), false)
+        .map(Object::toString)
+        .collect(
+            Collectors.joining(",")));
+    sb.append(')');
+
+    return sb.toString();
+  }
+}
diff --git 
a/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer
 
b/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer
index 293334974..fb6c4662b 100644
--- 
a/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer
+++ 
b/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer
@@ -16,4 +16,5 @@
 #
 
 org.apache.servicecomb.metrics.core.DefaultMetricsInitializer
-org.apache.servicecomb.metrics.core.publish.DefaultLogPublisher
\ No newline at end of file
+org.apache.servicecomb.metrics.core.publish.DefaultLogPublisher
+org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher
\ 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
new file mode 100644
index 000000000..ce2d4627a
--- /dev/null
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsBootListener.java
@@ -0,0 +1,85 @@
+/*
+ * 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.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.metrics.core.publish.HealthCheckerRestPublisher;
+import org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
+import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
+import org.junit.Assert;
+import org.junit.Test;
+
+import mockit.Deencapsulation;
+import mockit.Expectations;
+import mockit.Mock;
+import mockit.MockUp;
+
+public class TestMetricsBootListener {
+  MetricsBootListener listener = new MetricsBootListener();
+
+  @Test
+  public void registerSchemas() {
+    List<Object[]> argsList = new ArrayList<>();
+
+    ProducerSchemaFactory producerSchemaFactory = new 
MockUp<ProducerSchemaFactory>() {
+      @Mock
+      SchemaMeta getOrCreateProducerSchema(String microserviceName, String 
schemaId,
+          Class<?> producerClass,
+          Object producerInstance) {
+        argsList.add(new Object[] {microserviceName, schemaId, producerClass, 
producerInstance});
+        return null;
+      }
+    }.getMockInstance();
+    Deencapsulation.setField(listener, "producerSchemaFactory", 
producerSchemaFactory);
+
+    Microservice microservice = new Microservice();
+    microservice.setServiceName("name");
+    new Expectations(RegistryUtils.class) {
+      {
+        RegistryUtils.getMicroservice();
+        result = microservice;
+      }
+    };
+
+    BootEvent event = new BootEvent();
+    event.setEventType(EventType.BEFORE_PRODUCER_PROVIDER);
+    listener.onBootEvent(event);
+
+    Object[] args = argsList.get(0);
+    Assert.assertEquals("name", args[0]);
+    Assert.assertEquals("healthEndpoint", args[1]);
+    Assert.assertEquals(HealthCheckerRestPublisher.class, args[2]);
+    Assert.assertEquals(HealthCheckerRestPublisher.class, args[3].getClass());
+
+    MetricsRestPublisher metricsRestPublisher =
+        SPIServiceUtils.getTargetService(MetricsInitializer.class, 
MetricsRestPublisher.class);
+    args = argsList.get(1);
+    Assert.assertEquals("name", args[0]);
+    Assert.assertEquals("metricsEndpoint", args[1]);
+    Assert.assertEquals(MetricsRestPublisher.class, args[2]);
+    Assert.assertSame(metricsRestPublisher, args[3]);
+  }
+}
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
deleted file mode 100644
index a38a0a97a..000000000
--- 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.Map;
-
-import org.apache.servicecomb.metrics.core.publish.MetricsPublisher;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestMetricsPublisher {
-  @Test
-  public void testMeasure() {
-    System.getProperties().setProperty(MetricsConfig.METRICS_WINDOW_TIME, 
"2000");
-
-    MetricsPublisher publisher = new MetricsPublisher();
-    Map<String, Double> metrics = publisher.measure();
-    //10 jvm metrics get
-    Assert.assertEquals(10, metrics.size());
-  }
-}
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestHealthCheckerPublisher.java
similarity index 90%
rename from 
metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
rename to 
metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestHealthCheckerPublisher.java
index d0c182e2d..bf8a14619 100644
--- 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestHealthCheckerPublisher.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.metrics.core;
+package org.apache.servicecomb.metrics.core.publish;
 
 import java.util.Map;
 
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckResult;
 import org.apache.servicecomb.foundation.metrics.health.HealthChecker;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckerManager;
-import org.apache.servicecomb.metrics.core.publish.HealthCheckerPublisher;
+import org.apache.servicecomb.metrics.core.publish.HealthCheckerRestPublisher;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -62,7 +62,7 @@ public void reset() {
   @Test
   public void checkHealthGood() {
     HealthCheckerManager.getInstance().register(good);
-    HealthCheckerPublisher publisher = new HealthCheckerPublisher();
+    HealthCheckerRestPublisher publisher = new HealthCheckerRestPublisher();
     Assert.assertEquals(true, publisher.checkHealth());
   }
 
@@ -70,7 +70,7 @@ public void checkHealthGood() {
   public void checkHealthBad() {
     HealthCheckerManager.getInstance().register(good);
     HealthCheckerManager.getInstance().register(bad);
-    HealthCheckerPublisher publisher = new HealthCheckerPublisher();
+    HealthCheckerRestPublisher publisher = new HealthCheckerRestPublisher();
     Assert.assertEquals(false, publisher.checkHealth());
   }
 
@@ -78,7 +78,7 @@ public void checkHealthBad() {
   public void checkHealthDetails() {
     HealthCheckerManager.getInstance().register(good);
     HealthCheckerManager.getInstance().register(bad);
-    HealthCheckerPublisher publisher = new HealthCheckerPublisher();
+    HealthCheckerRestPublisher publisher = new HealthCheckerRestPublisher();
     Map<String, HealthCheckResult> content = publisher.checkHealthDetails();
     Assert.assertEquals(true, content.get("test").isHealthy());
     Assert.assertEquals("info", content.get("test").getInformation());
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestMetricsRestPublisher.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestMetricsRestPublisher.java
new file mode 100644
index 000000000..4278eae93
--- /dev/null
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestMetricsRestPublisher.java
@@ -0,0 +1,61 @@
+/*
+ * 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.publish;
+
+import java.util.Map;
+
+import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.google.common.eventbus.EventBus;
+import com.netflix.spectator.api.Clock;
+import com.netflix.spectator.api.CompositeRegistry;
+import com.netflix.spectator.api.DefaultRegistry;
+import com.netflix.spectator.api.ManualClock;
+import com.netflix.spectator.api.Registry;
+import com.netflix.spectator.api.SpectatorUtils;
+
+public class TestMetricsRestPublisher {
+  MetricsRestPublisher publisher = new MetricsRestPublisher();
+
+  @Test
+  public void measure_globalRegistryNull() {
+    Map<String, Double> result = publisher.measure();
+
+    Assert.assertEquals(0, result.size());
+  }
+
+  @Test
+  public void measure_normal() {
+    Clock clock = new ManualClock();
+    CompositeRegistry globalRegistry = 
SpectatorUtils.createCompositeRegistry(clock);
+    Registry registry = new DefaultRegistry(clock);
+    registry.timer(registry.createId("name", "t1", "v1", "t2", "v2"));
+    globalRegistry.add(registry);
+
+    EventBus eventBus = new EventBus();
+
+    publisher.init(globalRegistry, eventBus, new MetricsBootstrapConfig());
+    Map<String, Double> result = publisher.measure();
+
+
+    Assert.assertEquals(2, result.size());
+    Assert.assertEquals(0, result.get("name(statistic=count,t1=v1,t2=v2)"), 0);
+    Assert.assertEquals(0, 
result.get("name(statistic=totalTime,t1=v1,t2=v2)"), 0);
+  }
+}
diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
index e30bf6fbd..a3c25f923 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
@@ -195,16 +195,11 @@ private boolean needSetFrameworkVersion() {
     if (serviceCenterInfo == null) {
       LOGGER.warn("Server startup when service center not started and cannot 
retrieve version info, assume latest.");
       return true;
-    } else {
-      Version scVersion = 
VersionUtils.getOrCreate(serviceCenterInfo.getVersion());
-      Version frameworkVersion = 
VersionUtils.getOrCreate(Const.SERVICECENTER_FRAMEWORK_VERSION);
-
-      if (scVersion.compareTo(frameworkVersion) >= 0) {
-        return true;
-      } else {
-        return false;
-      }
     }
+
+    Version scVersion = 
VersionUtils.getOrCreate(serviceCenterInfo.getVersion());
+    Version frameworkVersion = 
VersionUtils.getOrCreate(Const.SERVICECENTER_FRAMEWORK_VERSION);
+    return scVersion.compareTo(frameworkVersion) >= 0;
   }
 
   private void loadStaticConfiguration() {


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> metrics publisher switch to new mechanism
> -----------------------------------------
>
>                 Key: SCB-385
>                 URL: https://issues.apache.org/jira/browse/SCB-385
>             Project: Apache ServiceComb
>          Issue Type: Sub-task
>          Components: Java-Chassis
>            Reporter: wujimin
>            Assignee: wujimin
>            Priority: Major
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to