You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2019/04/05 15:37:32 UTC

[servicecomb-java-chassis] branch master updated: [SCB-1240] allowed one prometheus cluster support multiple apps

This is an automated email from the ASF dual-hosted git repository.

wujimin 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 7cd450b  [SCB-1240] allowed one prometheus cluster support multiple apps
7cd450b is described below

commit 7cd450b87e77d438a23a7c1e603ae660991ad48a
Author: wujimin <wu...@huawei.com>
AuthorDate: Thu Apr 4 17:00:39 2019 +0800

    [SCB-1240] allowed one prometheus cluster support multiple apps
---
 .../core/executor/TestThreadPoolExecutorEx.java    | 31 +++++++++++++++++-----
 .../demo/springmvc/client/SpringmvcClient.java     | 14 +++++-----
 .../metrics/prometheus/PrometheusPublisher.java    |  4 +++
 .../prometheus/TestPrometheusPublisher.java        | 11 +++++++-
 4 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java b/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java
index 163fbb9..14df261 100644
--- a/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java
+++ b/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java
@@ -21,11 +21,16 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.TimeUnit;
+import java.util.function.IntSupplier;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class TestThreadPoolExecutorEx {
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestThreadPoolExecutorEx.class);
+
   static class TestTask implements Runnable {
     CountDownLatch notify = new CountDownLatch(1);
 
@@ -119,17 +124,15 @@ public class TestThreadPoolExecutorEx {
     t3.quit();
     Assert.assertEquals(4, executorEx.getPoolSize());
     Assert.assertEquals(1, executorEx.getRejectedCount());
-    Assert.assertEquals(3, executorEx.getNotFinished());
-    // multi thread, not sure
-    // Assert.assertEquals(0, executorEx.getQueue().size());
+    waitForResult(3, executorEx::getNotFinished);
+    waitForResult(0, executorEx.getQueue()::size);
 
     // reuse thread
     t3 = submitTask();
     Assert.assertEquals(4, executorEx.getPoolSize());
     Assert.assertEquals(1, executorEx.getRejectedCount());
-    Assert.assertEquals(4, executorEx.getNotFinished());
-    // multi thread, not sure
-    // Assert.assertEquals(1, executorEx.getQueue().size());
+    waitForResult(4, executorEx::getNotFinished);
+    waitForResult(0, executorEx.getQueue()::size);
 
     t3.quit();
     t4.quit();
@@ -137,4 +140,20 @@ public class TestThreadPoolExecutorEx {
     t6.quit();
     executorEx.shutdown();
   }
+
+  private void waitForResult(int expect, IntSupplier supplier) {
+    for (; ; ) {
+      int actual = supplier.getAsInt();
+      if (expect == actual) {
+        return;
+      }
+
+      LOGGER.info("waiting for thread result, expect:{}, actual: {}.", expect, actual);
+      try {
+        TimeUnit.MILLISECONDS.sleep(100);
+      } catch (InterruptedException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+  }
 }
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 411aa11..9b214f7 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
@@ -131,13 +131,13 @@ public class SpringmvcClient {
       String content = restTemplate
           .getForObject("cse://springmvc/codeFirstSpringmvc/prometheusForTest", String.class);
 
-      TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.addDate"));
-      TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.sayHello"));
-      TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.fallbackFromCache"));
-      TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.isTrue"));
-      TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.add"));
-      TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.sayHi2"));
-      TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.saySomething"));
+      TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.addDate"));
+      TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.sayHello"));
+      TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.fallbackFromCache"));
+      TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.isTrue"));
+      TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.add"));
+      TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.sayHi2"));
+      TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.saySomething"));
 
       String[] metricLines = content.split("\n");
       if (metricLines.length > 0) {
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 30633e0..cf48701 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
@@ -25,6 +25,7 @@ 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.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -103,6 +104,9 @@ public class PrometheusPublisher extends Collector implements Collector.Describa
     List<String> labelNames = new ArrayList<>();
     List<String> labelValues = new ArrayList<>();
 
+    labelNames.add("appId");
+    labelValues.add(RegistryUtils.getAppId());
+
     for (Tag tag : measurement.id().tags()) {
       labelNames.add(tag.key());
       labelValues.add(tag.value());
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 8c99c97..899b71e 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
@@ -27,11 +27,13 @@ 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.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.springframework.util.ResourceUtils;
 
 import com.netflix.spectator.api.Counter;
 import com.netflix.spectator.api.DefaultRegistry;
@@ -40,6 +42,7 @@ import com.netflix.spectator.api.Registry;
 import com.sun.net.httpserver.HttpServer;
 
 import io.prometheus.client.exporter.HTTPServer;
+import mockit.Expectations;
 
 @SuppressWarnings("restriction")
 public class TestPrometheusPublisher {
@@ -81,6 +84,12 @@ public class TestPrometheusPublisher {
 
   @Test
   public void collect() throws IllegalAccessException, IOException {
+    new Expectations(RegistryUtils.class){
+      {
+        RegistryUtils.getAppId();
+        result = "testAppId";
+      }
+    };
     ArchaiusUtils.setProperty(PrometheusPublisher.METRICS_PROMETHEUS_ADDRESS, "localhost:0");
     publisher.init(globalRegistry, null, null);
 
@@ -98,7 +107,7 @@ public class TestPrometheusPublisher {
     try (InputStream is = conn.getInputStream()) {
       Assert.assertEquals("# HELP ServiceComb_Metrics ServiceComb Metrics\n" +
           "# TYPE ServiceComb_Metrics untyped\n" +
-          "count_name{tag1=\"tag1v\",tag2=\"tag2v\",} 1.0\n", IOUtils.toString(is));
+          "count_name{appId=\"testAppId\",tag1=\"tag1v\",tag2=\"tag2v\",} 1.0\n", IOUtils.toString(is));
     }
 
     publisher.destroy();