diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java index 720a25e910e..d4751ed24cb 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java @@ -101,7 +101,7 @@ public class MetricFilterAutoConfiguration { // not convertible } if (bestMatchingPattern != null) { - suffix = bestMatchingPattern.toString().replaceAll("[{}]", "-"); + suffix = fixSpecialCharacters(bestMatchingPattern.toString()); } else if (httpStatus.is4xxClientError()) { suffix = UNKNOWN_PATH_SUFFIX; @@ -114,6 +114,20 @@ public class MetricFilterAutoConfiguration { } } + private String fixSpecialCharacters(String value) { + String result = value.replaceAll("[{}]", "-"); + result = result.replace("**", "-star-star-"); + result = result.replace("*", "-star-"); + result = result.replace("/-", "/"); + if (result.endsWith("-")) { + result = result.substring(0, result.length() - 1); + } + if (result.startsWith("-")) { + result = result.substring(1); + } + return result; + } + private int getStatus(HttpServletResponse response) { try { return response.getStatus(); diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfigurationTests.java index 919a5bbed59..f1c17785bc9 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfigurationTests.java @@ -89,9 +89,9 @@ public class MetricFilterAutoConfigurationTests { mvc.perform(get("/templateVarTest/foo")).andExpect(status().isOk()); verify(context.getBean(CounterService.class)).increment( - "status.200.templateVarTest.-someVariable-"); + "status.200.templateVarTest.someVariable"); verify(context.getBean(GaugeService.class)).submit( - eq("response.templateVarTest.-someVariable-"), anyDouble()); + eq("response.templateVarTest.someVariable"), anyDouble()); context.close(); } @@ -106,9 +106,9 @@ public class MetricFilterAutoConfigurationTests { mvc.perform(get("/knownPath/foo")).andExpect(status().isNotFound()); verify(context.getBean(CounterService.class)).increment( - "status.404.knownPath.-someVariable-"); + "status.404.knownPath.someVariable"); verify(context.getBean(GaugeService.class)).submit( - eq("response.knownPath.-someVariable-"), anyDouble()); + eq("response.knownPath.someVariable"), anyDouble()); context.close(); }