You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/07/01 05:07:48 UTC

[james-project] 02/03: JAMES-3170 MetricFactory::decoratePublisherWithTimerMetric should rely on Flux::using

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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit f46871bf1ecaed70d30b1d2495480506fc72d70d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jun 30 13:04:54 2020 +0700

    JAMES-3170 MetricFactory::decoratePublisherWithTimerMetric should rely on Flux::using
---
 .../james/metrics/dropwizard/DropWizardMetricFactory.java   | 13 ++++++-------
 .../metrics/dropwizard/DropWizardMetricFactoryTest.java     |  2 --
 .../apache/james/metrics/logger/DefaultMetricFactory.java   | 13 ++++++-------
 .../apache/james/metrics/tests/RecordingMetricFactory.java  | 13 ++++++-------
 4 files changed, 18 insertions(+), 23 deletions(-)

diff --git a/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java b/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
index 78f8a65..8a87b88 100644
--- a/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
+++ b/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
@@ -36,7 +36,6 @@ import com.codahale.metrics.SlidingTimeWindowMovingAverages;
 import com.codahale.metrics.jmx.JmxReporter;
 
 import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
 
 public class DropWizardMetricFactory implements MetricFactory, Startable {
 
@@ -62,16 +61,16 @@ public class DropWizardMetricFactory implements MetricFactory, Startable {
 
     @Override
     public <T> Publisher<T> decoratePublisherWithTimerMetric(String name, Publisher<T> publisher) {
-        return Mono.fromCallable(() -> timer(name))
-            .flatMapMany(timer ->  Flux.from(publisher)
-                .doOnComplete(timer::stopAndPublish));
+        return Flux.using(() -> timer(name),
+            any -> Flux.from(publisher),
+            DropWizardTimeMetric::stopAndPublish);
     }
 
     @Override
     public <T> Publisher<T> decoratePublisherWithTimerMetricLogP99(String name, Publisher<T> publisher) {
-        return Mono.fromCallable(() -> timer(name))
-            .flatMapMany(timer ->  Flux.from(publisher)
-                .doOnComplete(() -> timer.stopAndPublish().logWhenExceedP99(DEFAULT_100_MS_THRESHOLD)));
+        return Flux.using(() -> timer(name),
+            any -> Flux.from(publisher),
+            timer -> timer.stopAndPublish().logWhenExceedP99(DEFAULT_100_MS_THRESHOLD));
     }
 
     @PostConstruct
diff --git a/metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java b/metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java
index 87455bf..2aba50c 100644
--- a/metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java
+++ b/metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java
@@ -28,7 +28,6 @@ import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.metrics.api.MetricFactoryContract;
 import org.assertj.core.api.SoftAssertions;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import com.codahale.metrics.MetricRegistry;
@@ -71,7 +70,6 @@ class DropWizardMetricFactoryTest implements MetricFactoryContract {
             .isGreaterThan(duration.get(ChronoUnit.NANOS));
     }
 
-    @Disabled("Recorded timing is 0")
     @Test
     void decoratePublisherWithTimerMetricShouldRecordAtLeastTheMonoDelayWhenWrappedInAMono() {
         Duration duration = Duration.ofMillis(100);
diff --git a/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java b/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
index e0aa75f..b253392 100644
--- a/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
+++ b/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
@@ -28,7 +28,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
 
 public class DefaultMetricFactory implements MetricFactory {
 
@@ -46,15 +45,15 @@ public class DefaultMetricFactory implements MetricFactory {
 
     @Override
     public <T> Publisher<T> decoratePublisherWithTimerMetric(String name, Publisher<T> publisher) {
-        return Mono.fromCallable(() -> timer(name))
-            .flatMapMany(timer ->  Flux.from(publisher)
-                .doOnComplete(timer::stopAndPublish));
+        return Flux.using(() -> timer(name),
+            any -> Flux.from(publisher),
+            TimeMetric::stopAndPublish);
     }
 
     @Override
     public <T> Publisher<T> decoratePublisherWithTimerMetricLogP99(String name, Publisher<T> publisher) {
-        return Mono.fromCallable(() -> timer(name))
-            .flatMapMany(timer ->  Flux.from(publisher)
-                .doOnComplete(() -> timer.stopAndPublish().logWhenExceedP99(DEFAULT_100_MS_THRESHOLD)));
+        return Flux.using(() -> timer(name),
+            any -> Flux.from(publisher),
+            timer -> timer.stopAndPublish().logWhenExceedP99(DEFAULT_100_MS_THRESHOLD));
     }
 }
diff --git a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
index 78aeecd..f355e56 100644
--- a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
+++ b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
@@ -38,7 +38,6 @@ import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
 
 import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
 
 public class RecordingMetricFactory implements MetricFactory {
     private final Multimap<String, Duration> executionTimes = Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
@@ -64,16 +63,16 @@ public class RecordingMetricFactory implements MetricFactory {
 
     @Override
     public <T> Publisher<T> decoratePublisherWithTimerMetric(String name, Publisher<T> publisher) {
-        return Mono.fromCallable(() -> timer(name))
-            .flatMapMany(timer ->  Flux.from(publisher)
-                .doOnComplete(timer::stopAndPublish));
+        return Flux.using(() -> timer(name),
+            any -> Flux.from(publisher),
+            TimeMetric::stopAndPublish);
     }
 
     @Override
     public <T> Publisher<T> decoratePublisherWithTimerMetricLogP99(String name, Publisher<T> publisher) {
-        return Mono.fromCallable(() -> timer(name))
-            .flatMapMany(timer ->  Flux.from(publisher)
-                .doOnComplete(() -> timer.stopAndPublish().logWhenExceedP99(DEFAULT_100_MS_THRESHOLD)));
+        return Flux.using(() -> timer(name),
+            any -> Flux.from(publisher),
+            timer -> timer.stopAndPublish().logWhenExceedP99(DEFAULT_100_MS_THRESHOLD));
     }
 
     public Collection<Duration> executionTimesFor(String name) {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org