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