Skip to content

Commit 04c882b

Browse files
wujiminWillemJiang
authored andcommitted
[SCB-1240] allowed one prometheus cluster support multiple apps
1 parent 8b1723e commit 04c882b

File tree

4 files changed

+46
-14
lines changed

4 files changed

+46
-14
lines changed

core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,16 @@
2121
import java.util.concurrent.Future;
2222
import java.util.concurrent.RejectedExecutionException;
2323
import java.util.concurrent.TimeUnit;
24+
import java.util.function.IntSupplier;
2425

2526
import org.junit.Assert;
2627
import org.junit.Test;
28+
import org.slf4j.Logger;
29+
import org.slf4j.LoggerFactory;
2730

2831
public class TestThreadPoolExecutorEx {
32+
private static final Logger LOGGER = LoggerFactory.getLogger(TestThreadPoolExecutorEx.class);
33+
2934
static class TestTask implements Runnable {
3035
CountDownLatch notify = new CountDownLatch(1);
3136

@@ -119,22 +124,36 @@ public void schedule() throws ExecutionException, InterruptedException {
119124
t3.quit();
120125
Assert.assertEquals(4, executorEx.getPoolSize());
121126
Assert.assertEquals(1, executorEx.getRejectedCount());
122-
Assert.assertEquals(3, executorEx.getNotFinished());
123-
// multi thread, not sure
124-
// Assert.assertEquals(0, executorEx.getQueue().size());
127+
waitForResult(3, executorEx::getNotFinished);
128+
waitForResult(0, executorEx.getQueue()::size);
125129

126130
// reuse thread
127131
t3 = submitTask();
128132
Assert.assertEquals(4, executorEx.getPoolSize());
129133
Assert.assertEquals(1, executorEx.getRejectedCount());
130-
Assert.assertEquals(4, executorEx.getNotFinished());
131-
// multi thread, not sure
132-
// Assert.assertEquals(1, executorEx.getQueue().size());
134+
waitForResult(4, executorEx::getNotFinished);
135+
waitForResult(0, executorEx.getQueue()::size);
133136

134137
t3.quit();
135138
t4.quit();
136139
t5.quit();
137140
t6.quit();
138141
executorEx.shutdown();
139142
}
143+
144+
private void waitForResult(int expect, IntSupplier supplier) {
145+
for (; ; ) {
146+
int actual = supplier.getAsInt();
147+
if (expect == actual) {
148+
return;
149+
}
150+
151+
LOGGER.info("waiting for thread result, expect:{}, actual: {}.", expect, actual);
152+
try {
153+
TimeUnit.MILLISECONDS.sleep(100);
154+
} catch (InterruptedException e) {
155+
throw new IllegalStateException(e);
156+
}
157+
}
158+
}
140159
}

demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ public static void run() {
131131
String content = restTemplate
132132
.getForObject("cse://springmvc/codeFirstSpringmvc/prometheusForTest", String.class);
133133

134-
TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.addDate"));
135-
TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.sayHello"));
136-
TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.fallbackFromCache"));
137-
TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.isTrue"));
138-
TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.add"));
139-
TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.sayHi2"));
140-
TestMgr.check(true, content.contains("servicecomb_invocation{operation=\"springmvc.codeFirst.saySomething"));
134+
TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.addDate"));
135+
TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.sayHello"));
136+
TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.fallbackFromCache"));
137+
TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.isTrue"));
138+
TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.add"));
139+
TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.sayHi2"));
140+
TestMgr.check(true, content.contains("servicecomb_invocation{appId=\"springmvctest\",operation=\"springmvc.codeFirst.saySomething"));
141141

142142
String[] metricLines = content.split("\n");
143143
if (metricLines.length > 0) {

metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
2626
import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
2727
import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry;
28+
import org.apache.servicecomb.serviceregistry.RegistryUtils;
2829
import org.slf4j.Logger;
2930
import org.slf4j.LoggerFactory;
3031

@@ -103,6 +104,9 @@ protected Sample convertMeasurementToSample(Measurement measurement) {
103104
List<String> labelNames = new ArrayList<>();
104105
List<String> labelValues = new ArrayList<>();
105106

107+
labelNames.add("appId");
108+
labelValues.add(RegistryUtils.getAppId());
109+
106110
for (Tag tag : measurement.id().tags()) {
107111
labelNames.add(tag.key());
108112
labelValues.add(tag.value());

metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@
2727
import org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
2828
import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry;
2929
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
30+
import org.apache.servicecomb.serviceregistry.RegistryUtils;
3031
import org.junit.AfterClass;
3132
import org.junit.Assert;
3233
import org.junit.Rule;
3334
import org.junit.Test;
3435
import org.junit.rules.ExpectedException;
36+
import org.springframework.util.ResourceUtils;
3537

3638
import com.netflix.spectator.api.Counter;
3739
import com.netflix.spectator.api.DefaultRegistry;
@@ -40,6 +42,7 @@
4042
import com.sun.net.httpserver.HttpServer;
4143

4244
import io.prometheus.client.exporter.HTTPServer;
45+
import mockit.Expectations;
4346

4447
@SuppressWarnings("restriction")
4548
public class TestPrometheusPublisher {
@@ -81,6 +84,12 @@ public void testBadPublishAddress_TooLargePort() {
8184

8285
@Test
8386
public void collect() throws IllegalAccessException, IOException {
87+
new Expectations(RegistryUtils.class){
88+
{
89+
RegistryUtils.getAppId();
90+
result = "testAppId";
91+
}
92+
};
8493
ArchaiusUtils.setProperty(PrometheusPublisher.METRICS_PROMETHEUS_ADDRESS, "localhost:0");
8594
publisher.init(globalRegistry, null, null);
8695

@@ -98,7 +107,7 @@ public void collect() throws IllegalAccessException, IOException {
98107
try (InputStream is = conn.getInputStream()) {
99108
Assert.assertEquals("# HELP ServiceComb_Metrics ServiceComb Metrics\n" +
100109
"# TYPE ServiceComb_Metrics untyped\n" +
101-
"count_name{tag1=\"tag1v\",tag2=\"tag2v\",} 1.0\n", IOUtils.toString(is));
110+
"count_name{appId=\"testAppId\",tag1=\"tag1v\",tag2=\"tag2v\",} 1.0\n", IOUtils.toString(is));
102111
}
103112

104113
publisher.destroy();

0 commit comments

Comments
 (0)