From c45e4c39bb160851d968db889c159662da5746d9 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Tue, 4 Sep 2018 00:26:36 +0900 Subject: [PATCH] Use InvalidEndpointRequestException for MetricsEndpoint --- .../boot/actuate/metrics/MetricsEndpoint.java | 9 ++++++--- .../boot/actuate/metrics/MetricsEndpointTests.java | 13 +++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java index 2e2ebd7e8e25..b2b9d6bbee90 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java @@ -34,11 +34,11 @@ import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; +import org.springframework.boot.actuate.endpoint.InvalidEndpointRequestException; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.annotation.Selector; import org.springframework.lang.Nullable; -import org.springframework.util.Assert; /** * An {@link Endpoint} for exposing the metrics held by a {@link MeterRegistry}. @@ -80,8 +80,6 @@ private String getName(Meter meter) { @ReadOperation public MetricResponse metric(@Selector String requiredMetricName, @Nullable List tag) { - Assert.isTrue(tag == null || tag.stream().allMatch((t) -> t.contains(":")), - "Each tag parameter must be in the form key:value"); List tags = parseTags(tag); List meters = new ArrayList<>(); collectMeters(meters, this.registry, requiredMetricName, tags); @@ -106,6 +104,11 @@ private List parseTags(List tags) { private Tag parseTag(String tag) { String[] parts = tag.split(":", 2); + if (parts.length != 2) { + throw new InvalidEndpointRequestException( + "Each tag parameter must be in the form 'key:value' but was: " + tag, + "Each tag parameter must be in the form 'key:value'"); + } return Tag.of(parts[0], parts[1]); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java index caf2227a34de..3fe4279a3864 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java @@ -27,7 +27,11 @@ import io.micrometer.core.instrument.composite.CompositeMeterRegistry; import io.micrometer.core.instrument.simple.SimpleConfig; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; + +import org.springframework.boot.actuate.endpoint.InvalidEndpointRequestException; import static org.assertj.core.api.Assertions.assertThat; @@ -39,6 +43,9 @@ */ public class MetricsEndpointTests { + @Rule + public ExpectedException thrown = ExpectedException.none(); + private final MeterRegistry registry = new SimpleMeterRegistry(SimpleConfig.DEFAULT, new MockClock()); @@ -109,6 +116,12 @@ public void metricWithSpaceInTagValue() { assertThat(getCount(response)).hasValue(2.0); } + @Test + public void metricWithInvalidTag() { + this.thrown.expect(InvalidEndpointRequestException.class); + this.endpoint.metric("counter", Collections.singletonList("key")); + } + @Test public void metricPresentInOneRegistryOfACompositeAndNotAnother() { CompositeMeterRegistry composite = new CompositeMeterRegistry();