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

liujun pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new 664593c9dc Added metrics for failed request total  (#11315)
664593c9dc is described below

commit 664593c9dcf3c6c0ed813dc4b8c49d539388db49
Author: jojocodeX <[email protected]>
AuthorDate: Tue Jan 17 12:46:02 2023 +0800

    Added metrics for failed request total  (#11315)
---
 .../common/metrics/collector/DefaultMetricsCollector.java      | 10 ++++++++++
 .../common/metrics/collector/stat/MetricsStatComposite.java    |  7 +++++++
 .../org/apache/dubbo/common/metrics/event/RequestEvent.java    |  3 ++-
 .../java/org/apache/dubbo/common/metrics/model/MetricsKey.java |  2 +-
 .../dubbo/metrics/collector/AggregateMetricsCollector.java     |  7 +++++++
 .../apache/dubbo/metrics/filter/MetricsCollectExecutor.java    |  3 +++
 .../org/apache/dubbo/metrics/filter/MetricsFilterTest.java     |  9 ++++++---
 7 files changed, 36 insertions(+), 5 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
index 3aeb48509b..bc034ccff5 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
@@ -119,6 +119,12 @@ public class DefaultMetricsCollector implements 
MetricsCollector {
         });
     }
 
+    public void totalFailedRequests(String interfaceName, String methodName, 
String group, String version) {
+        doExecute(RequestEvent.Type.TOTAL_FAILED,statHandler-> {
+            statHandler.increase(interfaceName, methodName, group, version);
+        });
+    }
+
     public void addRT(String interfaceName, String methodName, String group, 
String version, Long responseTime) {
         stats.addRT(interfaceName, methodName, group, version, responseTime);
     }
@@ -153,6 +159,10 @@ public class DefaultMetricsCollector implements 
MetricsCollector {
 
         doExecute(RequestEvent.Type.REQUEST_LIMIT, 
MetricsStatHandler::get).filter(e->!e.isEmpty())
             .ifPresent(map-> map.forEach((k, v) -> list.add(new 
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_LIMIT_AGG, k.getTags(), 
REQUESTS, v::get))));
+
+        doExecute(RequestEvent.Type.TOTAL_FAILED, 
MetricsStatHandler::get).filter(e->!e.isEmpty())
+            .ifPresent(map-> map.forEach((k, v) -> list.add(new 
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG, 
k.getTags(), REQUESTS, v::get))));
+
     }
 
     private void collectRT(List<MetricSample> list) {
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
index f3ba97f0c5..baed0ad4cc 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
@@ -142,6 +142,13 @@ public class MetricsStatComposite{
                 publishEvent(new RequestEvent(metric, 
RequestEvent.Type.REQUEST_TIMEOUT));
             }
         });
+
+        stats.put(RequestEvent.Type.TOTAL_FAILED, new 
DefaultMetricsStatHandler(applicationName) {
+            @Override
+            public void doNotify(MethodMetric metric) {
+                publishEvent(new RequestEvent(metric, 
RequestEvent.Type.TOTAL_FAILED));
+            }
+        });
     }
 
     private void publishEvent(MetricsEvent event) {
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
index 5501905331..955c67b57d 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
@@ -43,6 +43,7 @@ public class RequestEvent extends MetricsEvent {
         BUSINESS_FAILED,
         REQUEST_TIMEOUT,
         REQUEST_LIMIT,
-        PROCESSING
+        PROCESSING,
+        TOTAL_FAILED
     }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
index b352a187fc..28f19c7c48 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
@@ -32,7 +32,7 @@ public enum MetricsKey {
     
PROVIDER_METRIC_REQUESTS_BUSINESS_FAILED_AGG("dubbo.provider.requests.business.failed.aggregate",
 "Aggregated Business Failed Requests"),
     
PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG("dubbo.provider.requests.timeout.failed.aggregate",
 "Aggregated timeout Failed Requests"),
     
PROVIDER_METRIC_REQUESTS_LIMIT_AGG("dubbo.provider.requests.limit.aggregate", 
"Aggregated limit Requests"),
-
+    
PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG("dubbo.provider.requests.failed.total.aggregate",
 "Aggregated failed total Requests"),
     PROVIDER_METRIC_QPS("dubbo.provider.qps", "Query Per Seconds"),
     PROVIDER_METRIC_RT_LAST("dubbo.provider.rt.last", "Last Response Time"),
     PROVIDER_METRIC_RT_MIN("dubbo.provider.rt.min", "Min Response Time"),
diff --git 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
 
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
index 0f80c89658..1dfaab9ecd 100644
--- 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
+++ 
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
@@ -57,6 +57,7 @@ public class AggregateMetricsCollector implements 
MetricsCollector, MetricsListe
     private final Map<MethodMetric, TimeWindowCounter> businessFailedRequests 
= new ConcurrentHashMap<>();
     private final Map<MethodMetric, TimeWindowCounter> timeoutRequests = new 
ConcurrentHashMap<>();
     private final Map<MethodMetric, TimeWindowCounter> limitRequests = new 
ConcurrentHashMap<>();
+    private final Map<MethodMetric, TimeWindowCounter> totalFailedRequests = 
new ConcurrentHashMap<>();
     private final Map<MethodMetric, TimeWindowCounter> qps = new 
ConcurrentHashMap<>();
     private final Map<MethodMetric, TimeWindowQuantile> rt = new 
ConcurrentHashMap<>();
 
@@ -128,6 +129,10 @@ public class AggregateMetricsCollector implements 
MetricsCollector, MetricsListe
                 counter = limitRequests.computeIfAbsent(metric, k -> new 
TimeWindowCounter(bucketNum, timeWindowSeconds));
                 break;
 
+            case TOTAL_FAILED:
+                counter = totalFailedRequests.computeIfAbsent(metric, k -> new 
TimeWindowCounter(bucketNum, timeWindowSeconds));
+                break;
+
             default:
                 break;
         }
@@ -154,6 +159,8 @@ public class AggregateMetricsCollector implements 
MetricsCollector, MetricsListe
         businessFailedRequests.forEach((k, v) -> list.add(new 
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_BUSINESS_FAILED_AGG, 
k.getTags(), REQUESTS, v::get)));
         timeoutRequests.forEach((k, v) -> list.add(new 
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG, k.getTags(), 
REQUESTS, v::get)));
         limitRequests.forEach((k, v) -> list.add(new 
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_LIMIT_AGG, k.getTags(), 
REQUESTS, v::get)));
+        totalFailedRequests.forEach((k, v) -> list.add(new 
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG, 
k.getTags(), REQUESTS, v::get)));
+
     }
 
     private void collectQPS(List<MetricSample> list) {
diff --git 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
 
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
index e321b00818..cd56b387c2 100644
--- 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
+++ 
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
@@ -82,6 +82,9 @@ public class MetricsCollectExecutor {
                     collector.increaseFailedRequests(interfaceName, 
methodName, group, version);
             }
         }
+
+        collector.totalFailedRequests(interfaceName, methodName, group, 
version);
+
         endExecute(()-> throwable instanceof RpcException && ((RpcException) 
throwable).isBiz());
     }
 
diff --git 
a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
 
b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
index 4f59ab4873..df12399b36 100644
--- 
a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
+++ 
b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
@@ -146,7 +146,7 @@ class MetricsFilterTest {
 
 
     @Test
-    void testTimeoutRequests() {
+    void testTimeoutAndFailedRequests() {
         collector.setCollectEnabled(true);
 
         given(invoker.invoke(invocation)).willThrow(new 
RpcException(RpcException.TIMEOUT_EXCEPTION));
@@ -164,10 +164,13 @@ class MetricsFilterTest {
         }
         Map<String, MetricSample> metricsMap = getMetricsMap();
         
Assertions.assertTrue(metricsMap.containsKey(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG.getName()));
+        
Assertions.assertTrue(metricsMap.containsKey(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG.getName()));
 
-        MetricSample sample = 
metricsMap.get(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG.getName());
+        MetricSample timeoutSample = 
metricsMap.get(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG.getName());
+        Assertions.assertSame(((GaugeMetricSample) 
timeoutSample).getSupplier().get().longValue(), count);
 
-        Assertions.assertSame(((GaugeMetricSample) 
sample).getSupplier().get().longValue(), count);
+        GaugeMetricSample failedSample = 
(GaugeMetricSample)metricsMap.get(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG.getName());
+        Assertions.assertSame(failedSample.getSupplier().get().longValue(), 
count);
     }
 
     @Test

Reply via email to