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 <wuji...@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();