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

commit 10b916be22f3b0c1fa0fb0b9da2764109f2a4f7e
Author: wujimin <[email protected]>
AuthorDate: Thu Nov 22 09:19:12 2018 +0800

    [SCB-1034][WIP] rest and Prometheus publisher switch to new mechanism
---
 .../demo/springmvc/client/SpringmvcClient.java     |  4 ----
 .../demo/springmvc/server/CodeFirstSpringmvc.java  |  8 ++++++++
 .../foundation/metrics/MetricsBootstrap.java       |  2 +-
 .../metrics/core/MetricsBootListener.java          |  4 ++++
 .../metrics/core/publish/MetricsRestPublisher.java | 22 +++++++++++----------
 .../core/publish/TestMetricsRestPublisher.java     |  5 ++---
 .../metrics/prometheus/PrometheusPublisher.java    | 23 ++++++++++++----------
 .../prometheus/TestPrometheusPublisher.java        |  5 ++---
 8 files changed, 42 insertions(+), 31 deletions(-)

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 e380804..411aa11 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
@@ -125,10 +125,6 @@ public class SpringmvcClient {
 
     //    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/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
index 0ab7487..36adfcb 100644
--- 
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
+++ 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import javax.inject.Inject;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.Part;
 import javax.ws.rs.QueryParam;
@@ -44,6 +45,7 @@ import 
org.apache.servicecomb.demo.ignore.OutputModelForTestIgnore;
 import org.apache.servicecomb.demo.jaxbbean.JAXBPerson;
 import org.apache.servicecomb.demo.server.User;
 import org.apache.servicecomb.demo.springmvc.decoderesponse.DecodeTestResponse;
+import org.apache.servicecomb.metrics.core.MetricsBootListener;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 import org.apache.servicecomb.swagger.extend.annotations.RawJsonRequestBody;
 import org.apache.servicecomb.swagger.extend.annotations.ResponseHeaders;
@@ -361,9 +363,15 @@ public class CodeFirstSpringmvc {
     return form1 + form2;
   }
 
+  @Inject
+  MetricsBootListener metricsBootListener;
+
   //Only for Prometheus integration test
   @RequestMapping(path = "/prometheusForTest", method = RequestMethod.GET)
   public String prometheusForTest() {
+    // just for test, this makes client always can got latest metrics
+    metricsBootListener.getMetricsBootstrap().pollMeters();
+
     RestTemplate defaultRestTemplate = new RestTemplate();
     return defaultRestTemplate.getForObject("http://localhost:9696/metrics";, 
String.class);
   }
diff --git 
a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java
 
b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java
index a63a98d..d2647f0 100644
--- 
a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java
+++ 
b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java
@@ -72,7 +72,7 @@ public class MetricsBootstrap {
         TimeUnit.MILLISECONDS);
   }
 
-  protected void pollMeters() {
+  public synchronized void pollMeters() {
     long secondInterval = 
TimeUnit.MILLISECONDS.toSeconds(config.getMsPollInterval());
     PolledEvent polledEvent = globalRegistry.poll(secondInterval);
     eventBus.post(polledEvent);
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 be8963d..376c502 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
@@ -36,6 +36,10 @@ public class MetricsBootListener implements BootListener {
   @Inject
   private ProducerSchemaFactory producerSchemaFactory;
 
+  public MetricsBootstrap getMetricsBootstrap() {
+    return metricsBootstrap;
+  }
+
   @Override
   public void onBootEvent(BootEvent event) {
     switch (event.getEventType()) {
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
index 2669b37..629b171 100644
--- 
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
@@ -27,20 +27,22 @@ import javax.ws.rs.Path;
 
 import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
 import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
+import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry;
 
 import com.google.common.eventbus.EventBus;
-import com.netflix.spectator.api.CompositeRegistry;
 import com.netflix.spectator.api.Id;
+import com.netflix.spectator.api.Meter;
+import com.netflix.spectator.api.Registry;
 
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 
 @Path("/metrics")
 public class MetricsRestPublisher implements MetricsInitializer {
-  private CompositeRegistry globalRegistry;
+  private GlobalRegistry globalRegistry;
 
   @Override
-  public void init(CompositeRegistry globalRegistry, EventBus eventBus, 
MetricsBootstrapConfig config) {
+  public void init(GlobalRegistry globalRegistry, EventBus eventBus, 
MetricsBootstrapConfig config) {
     this.globalRegistry = globalRegistry;
   }
 
@@ -56,14 +58,14 @@ public class MetricsRestPublisher implements 
MetricsInitializer {
     }
 
     StringBuilder sb = new StringBuilder();
-    globalRegistry
-        .iterator()
-        .forEachRemaining(meter -> {
-          meter.measure().forEach(measurement -> {
-            String key = idToString(measurement.id(), sb);
-            measurements.put(key, measurement.value());
-          });
+    for (Registry registry : globalRegistry.getRegistries()) {
+      for (Meter meter : registry) {
+        meter.measure().forEach(measurement -> {
+          String key = idToString(measurement.id(), sb);
+          measurements.put(key, measurement.value());
         });
+      }
+    }
 
     return measurements;
   }
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
index 83ed66d..40b72f3 100644
--- 
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
@@ -19,16 +19,15 @@ package org.apache.servicecomb.metrics.core.publish;
 import java.util.Map;
 
 import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
+import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry;
 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();
@@ -43,7 +42,7 @@ public class TestMetricsRestPublisher {
   @Test
   public void measure_normal() {
     Clock clock = new ManualClock();
-    CompositeRegistry globalRegistry = 
SpectatorUtils.createCompositeRegistry(clock);
+    GlobalRegistry globalRegistry = new GlobalRegistry();
     Registry registry = new DefaultRegistry(clock);
     registry.timer(registry.createId("name", "t1", "v1", "t2", "v2"));
     globalRegistry.add(registry);
diff --git 
a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
 
b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
index b1eb9c6..af62c09 100644
--- 
a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
+++ 
b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
@@ -24,13 +24,15 @@ import java.util.List;
 import 
org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
 import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
 import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
+import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.eventbus.EventBus;
 import com.netflix.config.DynamicPropertyFactory;
-import com.netflix.spectator.api.CompositeRegistry;
 import com.netflix.spectator.api.Measurement;
+import com.netflix.spectator.api.Meter;
+import com.netflix.spectator.api.Registry;
 import com.netflix.spectator.api.Tag;
 
 import io.prometheus.client.Collector;
@@ -45,10 +47,10 @@ public class PrometheusPublisher extends Collector 
implements Collector.Describa
 
   private HTTPServer httpServer;
 
-  private CompositeRegistry globalRegistry;
+  private GlobalRegistry globalRegistry;
 
   @Override
-  public void init(CompositeRegistry globalRegistry, EventBus eventBus, 
MetricsBootstrapConfig config) {
+  public void init(GlobalRegistry globalRegistry, EventBus eventBus, 
MetricsBootstrapConfig config) {
     this.globalRegistry = globalRegistry;
 
     //prometheus default port allocation is here : 
https://github.com/prometheus/prometheus/wiki/Default-port-allocations
@@ -82,14 +84,15 @@ public class PrometheusPublisher extends Collector 
implements Collector.Describa
     }
 
     List<Sample> samples = new ArrayList<>();
-    globalRegistry
-        .iterator()
-        .forEachRemaining(meter -> {
-          meter.measure().forEach(measurement -> {
-            Sample sample = convertMeasurementToSample(measurement);
-            samples.add(sample);
-          });
+    for (Registry registry : globalRegistry.getRegistries()) {
+      for (Meter meter : registry) {
+        meter.measure().forEach(measurement -> {
+          Sample sample = convertMeasurementToSample(measurement);
+          samples.add(sample);
         });
+      }
+    }
+
     familySamples.add(new MetricFamilySamples("ServiceComb Metrics", 
Type.UNTYPED, "ServiceComb Metrics", samples));
 
     return familySamples;
diff --git 
a/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java
 
b/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java
index c953730..cc10b4e 100644
--- 
a/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java
+++ 
b/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java
@@ -25,6 +25,7 @@ import java.net.URL;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import 
org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
+import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.junit.AfterClass;
 import org.junit.Assert;
@@ -32,19 +33,17 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import com.netflix.spectator.api.CompositeRegistry;
 import com.netflix.spectator.api.Counter;
 import com.netflix.spectator.api.DefaultRegistry;
 import com.netflix.spectator.api.ManualClock;
 import com.netflix.spectator.api.Registry;
-import com.netflix.spectator.api.SpectatorUtils;
 import com.sun.net.httpserver.HttpServer;
 
 import io.prometheus.client.exporter.HTTPServer;
 
 @SuppressWarnings("restriction")
 public class TestPrometheusPublisher {
-  CompositeRegistry globalRegistry = 
SpectatorUtils.createCompositeRegistry(new ManualClock());
+  GlobalRegistry globalRegistry = new GlobalRegistry(new ManualClock());
 
   PrometheusPublisher publisher = new PrometheusPublisher();
 

Reply via email to