From c544f4aef63ce00ccd2122cde33d2b0fef2361d4 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 28 Sep 2017 18:20:11 -0400 Subject: [PATCH] Move zuul metrics to micrometer. fixes gh-2317 --- spring-cloud-netflix-core/pom.xml | 5 ++ .../zuul/ZuulServerAutoConfiguration.java | 11 ++-- .../zuul/metrics/DefaultCounterFactory.java | 13 ++--- .../metrics/DefaultCounterFactoryTests.java | 13 +++-- .../ZuulEmptyMetricsApplicationTests.java | 11 ++-- .../metrics/ZuulMetricsApplicationTests.java | 54 ++++++------------- 6 files changed, 49 insertions(+), 58 deletions(-) diff --git a/spring-cloud-netflix-core/pom.xml b/spring-cloud-netflix-core/pom.xml index 6532a4e3..19ff932a 100644 --- a/spring-cloud-netflix-core/pom.xml +++ b/spring-cloud-netflix-core/pom.xml @@ -186,6 +186,11 @@ okhttp true + + io.micrometer + micrometer-core + true + org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration.java index d02325a0..44547a7a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration.java @@ -64,6 +64,8 @@ import com.netflix.zuul.http.ZuulServlet; import com.netflix.zuul.monitoring.CounterFactory; import com.netflix.zuul.monitoring.TracerFactory; +import io.micrometer.core.instrument.MeterRegistry; + /** * @author Spencer Gibb * @author Dave Syer @@ -197,14 +199,13 @@ public class ZuulServerAutoConfiguration { } @Configuration - //FIXME: 2.0.0 - // @ConditionalOnClass(CounterService.class) + @ConditionalOnClass(MeterRegistry.class) protected static class ZuulCounterFactoryConfiguration { @Bean - // @ConditionalOnBean(CounterService.class) - public CounterFactory counterFactory(/*CounterService counterService*/) { - return new DefaultCounterFactory(/*counterService*/); + @ConditionalOnBean(MeterRegistry.class) + public CounterFactory counterFactory(MeterRegistry meterRegistry) { + return new DefaultCounterFactory(meterRegistry); } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactory.java index 5c3fa2cc..e6dda312 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactory.java @@ -18,22 +18,23 @@ package org.springframework.cloud.netflix.zuul.metrics; import com.netflix.zuul.monitoring.CounterFactory; +import io.micrometer.core.instrument.MeterRegistry; + /** - * A counter based monitoring factory that uses {@link CounterService} to increment counters. + * A counter based monitoring factory that uses {@link MeterRegistry} to increment counters. * * @author Anastasiia Smirnova */ public class DefaultCounterFactory extends CounterFactory { - //FIXME: 2.0.0 - // private final CounterService counterService; + private final MeterRegistry meterRegistry; - public DefaultCounterFactory(/*CounterService counterService*/) { - /*this.counterService = counterService;*/ + public DefaultCounterFactory(MeterRegistry meterRegistry) { + this.meterRegistry = meterRegistry; } @Override public void increment(String name) { - // counterService.increment(name); + this.meterRegistry.counter(name).increment(); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactoryTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactoryTests.java index ad85999b..95e74f04 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactoryTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/DefaultCounterFactoryTests.java @@ -19,21 +19,28 @@ package org.springframework.cloud.netflix.zuul.metrics; import com.netflix.zuul.monitoring.CounterFactory; +import io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.MeterRegistry; import org.junit.Test; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class DefaultCounterFactoryTests { private static final String NAME = "my-super-metric-name"; - // private final CounterService counterService = mock(CounterService.class); - private final CounterFactory factory = new DefaultCounterFactory(/*counterService*/); @Test public void shouldIncrement() throws Exception { + MeterRegistry meterRegistry = mock(MeterRegistry.class); + CounterFactory factory = new DefaultCounterFactory(meterRegistry); + + Counter counter = mock(Counter.class); + when(meterRegistry.counter(NAME)).thenReturn(counter); + factory.increment(NAME); - //FIXME 2.0.0 verify(counterService).increment(NAME); + verify(counter).increment(); } } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulEmptyMetricsApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulEmptyMetricsApplicationTests.java index 3b02df65..e8c9b9d1 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulEmptyMetricsApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulEmptyMetricsApplicationTests.java @@ -17,11 +17,13 @@ package org.springframework.cloud.netflix.zuul.metrics; -import org.junit.Ignore; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.springframework.boot.autoconfigure.web.ServerProperties; -import org.springframework.cloud.test.ClassPathExclusions; import org.springframework.cloud.netflix.zuul.ZuulServerAutoConfiguration; import org.springframework.cloud.netflix.zuul.ZuulServerMarkerConfiguration; +import org.springframework.cloud.test.ClassPathExclusions; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,10 +31,6 @@ import org.springframework.context.annotation.Configuration; import com.netflix.zuul.monitoring.CounterFactory; import com.netflix.zuul.monitoring.TracerFactory; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - import static org.junit.Assert.assertEquals; @ClassPathExclusions({ "spring-boot-starter-actuator-*.jar", @@ -59,7 +57,6 @@ public class ZuulEmptyMetricsApplicationTests { } @Test - @Ignore //FIXME: 2.0.0 public void shouldSetupDefaultCounterFactoryIfCounterServiceIsPresent() throws Exception { CounterFactory factory = this.context.getBean(CounterFactory.class); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulMetricsApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulMetricsApplicationTests.java index 90ad94ab..231cad04 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulMetricsApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/metrics/ZuulMetricsApplicationTests.java @@ -17,10 +17,8 @@ package org.springframework.cloud.netflix.zuul.metrics; -import java.util.HashMap; -import java.util.Map; - -import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; @@ -34,12 +32,12 @@ import com.netflix.zuul.exception.ZuulException; import com.netflix.zuul.monitoring.CounterFactory; import com.netflix.zuul.monitoring.TracerFactory; -import org.junit.Test; -import org.junit.runner.RunWith; - import static org.junit.Assert.assertEquals; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; + @RunWith(SpringRunner.class) @SpringBootTest(classes = { ZuulMetricsApplicationTests.ZuulMetricsApplicationTestsConfiguration.class, @@ -47,12 +45,12 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @DirtiesContext public class ZuulMetricsApplicationTests { - private static final Map counters = new HashMap<>(); - @Autowired - CounterFactory counterFactory; + private CounterFactory counterFactory; @Autowired - TracerFactory tracerFactory; + private TracerFactory tracerFactory; + @Autowired + private MeterRegistry meterRegistry; @Test public void shouldSetupDefaultCounterFactoryIfCounterServiceIsPresent() @@ -66,18 +64,19 @@ public class ZuulMetricsApplicationTests { } @Test - @Ignore //FIXME: 2.0.0 public void shouldIncrementCounters() throws Exception { new ZuulException("any", 500, "cause"); new ZuulException("any", 500, "cause"); - assertEquals((long) counters.get("ZUUL::EXCEPTION:cause:500"), 2L); + Double count = meterRegistry.counter("ZUUL::EXCEPTION:cause:500").count(); + assertEquals(count.longValue(), 2L); new ZuulException("any", 404, "cause2"); new ZuulException("any", 404, "cause2"); new ZuulException("any", 404, "cause2"); - assertEquals((long) counters.get("ZUUL::EXCEPTION:cause2:404"), 3L); + count = meterRegistry.counter("ZUUL::EXCEPTION:cause2:404").count(); + assertEquals(count.longValue(), 3L); } // Don't use @SpringBootApplication because we don't want to component scan @@ -91,28 +90,9 @@ public class ZuulMetricsApplicationTests { @Configuration static class ZuulMetricsApplicationTestsConfiguration { - //FIXME: 2.0.0 - /*@Bean - public CounterService counterService() { - return new CounterService() { - // not thread safe, but we are ok with it in tests - @Override - public void increment(String metricName) { - Long counter = counters.get(metricName); - if (counter == null) { - counter = 0L; - } - counters.put(metricName, ++counter); - } - - @Override - public void decrement(String metricName) { - } - - @Override - public void reset(String metricName) { - } - }; - }*/ + @Bean + public MeterRegistry meterRegistry() { + return new SimpleMeterRegistry(); + } } }