This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new 1c65617fb1 ✨ add framework metrics (#12576)
1c65617fb1 is described below
commit 1c65617fb1d25a26f54834ab36e42a1644629a91
Author: songxiaosheng <[email protected]>
AuthorDate: Wed Jun 28 20:27:08 2023 +0800
✨ add framework metrics (#12576)
* add framework metric
* :sparkles: add framework metrics
* :sparkles: add framework metrics
---
.../collector/sample/ThreadPoolMetricsSampler.java | 58 ++++++++++++++--------
.../sample/ThreadPoolMetricsSamplerTest.java | 2 +-
2 files changed, 39 insertions(+), 21 deletions(-)
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
index ec4a74b98d..9b6c9b4710 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
@@ -56,6 +56,7 @@ public class ThreadPoolMetricsSampler implements
MetricsSampler {
private DataStore dataStore;
private final Map<String, ThreadPoolExecutor> sampleThreadPoolExecutor =
new ConcurrentHashMap<>();
private final ConcurrentHashMap<String, ThreadPoolMetric>
threadPoolMetricMap = new ConcurrentHashMap<>();
+
public ThreadPoolMetricsSampler(DefaultMetricsCollector collector) {
this.collector = collector;
}
@@ -87,23 +88,29 @@ public class ThreadPoolMetricsSampler implements
MetricsSampler {
list.add(new GaugeMetricSample<>(MetricsKey.THREAD_POOL_ACTIVE_SIZE,
threadPoolMetric.getTags(), THREAD_POOL, threadPoolMetric,
ThreadPoolMetric::getActiveCount));
list.add(new GaugeMetricSample<>(MetricsKey.THREAD_POOL_THREAD_COUNT,
threadPoolMetric.getTags(), THREAD_POOL, threadPoolMetric,
ThreadPoolMetric::getPoolSize));
list.add(new GaugeMetricSample<>(MetricsKey.THREAD_POOL_QUEUE_SIZE,
threadPoolMetric.getTags(), THREAD_POOL, threadPoolMetric,
ThreadPoolMetric::getQueueSize));
-
return list;
}
-
public void registryDefaultSampleThreadPoolExecutor() {
ApplicationModel applicationModel = collector.getApplicationModel();
if (applicationModel == null) {
return;
}
- try {
- if (this.frameworkExecutorRepository == null) {
- this.frameworkExecutorRepository =
collector.getApplicationModel().getBeanFactory()
- .getBean(FrameworkExecutorRepository.class);
+ addRpcExecutors();
+ addFrameworkExecutors();
+ addExecutorRejectMetrics();
+ }
+
+ private void addExecutorRejectMetrics() {
+ ThreadRejectMetricsCountSampler threadRejectMetricsCountSampler = new
ThreadRejectMetricsCountSampler(collector);
+ this.sampleThreadPoolExecutor.entrySet().stream().filter(entry ->
entry.getKey().startsWith(SERVER_THREAD_POOL_NAME)).forEach(entry -> {
+ if (entry.getValue().getRejectedExecutionHandler() instanceof
AbortPolicyWithReport) {
+ MetricThreadPoolExhaustedListener
metricThreadPoolExhaustedListener = new
MetricThreadPoolExhaustedListener(entry.getKey(),
threadRejectMetricsCountSampler);
+ ((AbortPolicyWithReport)
entry.getValue().getRejectedExecutionHandler()).addThreadPoolExhaustedEventListener(metricThreadPoolExhaustedListener);
}
- } catch (Exception ex) {
- logger.warn(COMMON_METRICS_COLLECTOR_EXCEPTION, "", "",
"ThreadPoolMetricsSampler! frameworkExecutorRepository non-init");
- }
+ });
+ }
+
+ private void addRpcExecutors() {
if (this.dataStore == null) {
this.dataStore =
collector.getApplicationModel().getExtensionLoader(DataStore.class).getDefaultExtension();
}
@@ -113,7 +120,7 @@ public class ThreadPoolMetricsSampler implements
MetricsSampler {
for (Map.Entry<String, Object> entry : executors.entrySet()) {
ExecutorService executor = (ExecutorService) entry.getValue();
if (executor instanceof ThreadPoolExecutor) {
- this.addExecutors( SERVER_THREAD_POOL_NAME + "-" +
entry.getKey(), executor);
+ this.addExecutors(SERVER_THREAD_POOL_NAME + "-" +
entry.getKey(), executor);
}
}
executors =
dataStore.get(CONSUMER_SHARED_EXECUTOR_SERVICE_COMPONENT_KEY);
@@ -123,18 +130,29 @@ public class ThreadPoolMetricsSampler implements
MetricsSampler {
this.addExecutors(CLIENT_THREAD_POOL_NAME + "-" +
entry.getKey(), executor);
}
}
+ }
+ }
- ThreadRejectMetricsCountSampler threadRejectMetricsCountSampler =
new ThreadRejectMetricsCountSampler(collector);
-
this.sampleThreadPoolExecutor.entrySet().stream().filter(entry->entry.getKey().startsWith(SERVER_THREAD_POOL_NAME)).forEach(entry->{
- if(entry.getValue().getRejectedExecutionHandler() instanceof
AbortPolicyWithReport) {
- MetricThreadPoolExhaustedListener
metricThreadPoolExhaustedListener=new
MetricThreadPoolExhaustedListener(entry.getKey(),threadRejectMetricsCountSampler);
- ((AbortPolicyWithReport)
entry.getValue().getRejectedExecutionHandler()).addThreadPoolExhaustedEventListener(metricThreadPoolExhaustedListener);
- }
- });
+ private void addFrameworkExecutors() {
+ try {
+ if (this.frameworkExecutorRepository == null) {
+ this.frameworkExecutorRepository =
collector.getApplicationModel().getBeanFactory()
+ .getBean(FrameworkExecutorRepository.class);
+ }
+ } catch (Exception ex) {
+ logger.warn(COMMON_METRICS_COLLECTOR_EXCEPTION, "", "",
"ThreadPoolMetricsSampler! frameworkExecutorRepository non-init");
}
- if (this.frameworkExecutorRepository != null) {
- this.addExecutors("sharedExecutor",
frameworkExecutorRepository.getSharedExecutor());
+ if (this.frameworkExecutorRepository == null) {
+ return;
}
+ this.addExecutors("poolRouterExecutor",
frameworkExecutorRepository.getPoolRouterExecutor());
+ this.addExecutors("metadataRetryExecutor",
frameworkExecutorRepository.getMetadataRetryExecutor());
+ this.addExecutors("internalServiceExecutor",
frameworkExecutorRepository.getInternalServiceExecutor());
+ this.addExecutors("connectivityScheduledExecutor",
frameworkExecutorRepository.getConnectivityScheduledExecutor());
+ this.addExecutors("cacheRefreshingScheduledExecutor",
frameworkExecutorRepository.getCacheRefreshingScheduledExecutor());
+ this.addExecutors("sharedExecutor",
frameworkExecutorRepository.getSharedExecutor());
+ this.addExecutors("sharedScheduledExecutor",
frameworkExecutorRepository.getSharedScheduledExecutor());
+ this.addExecutors("mappingRefreshingExecutor",
frameworkExecutorRepository.getMappingRefreshingExecutor());
}
-
}
+
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSamplerTest.java
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSamplerTest.java
index 2c8e2f984d..dab9485771 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSamplerTest.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSamplerTest.java
@@ -169,7 +169,7 @@ public class ThreadPoolMetricsSamplerTest {
f.setAccessible(true);
Map<String,ThreadPoolExecutor> executors = (Map<String,
ThreadPoolExecutor>) f.get(sampler2);
- Assertions.assertEquals(3, executors.size());
+ Assertions.assertEquals(8, executors.size());
Assertions.assertTrue(executors.containsKey("DubboServerHandler-server1"));
Assertions.assertTrue(executors.containsKey("DubboClientHandler-client1"));
Assertions.assertTrue(executors.containsKey("sharedExecutor"));