Merge pull request #13817 from jkschneider:metrics-anon-exception
* pr/13817: Polish "Make sure exception tag values are not empty in web metrics" Make sure exception tag values are not empty in web metrics
This commit is contained in:
@@ -19,6 +19,7 @@ package org.springframework.boot.actuate.metrics.web.reactive.server;
|
||||
import io.micrometer.core.instrument.Tag;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.reactive.HandlerMapping;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.util.pattern.PathPattern;
|
||||
@@ -109,7 +110,9 @@ public final class WebFluxTags {
|
||||
*/
|
||||
public static Tag exception(Throwable exception) {
|
||||
if (exception != null) {
|
||||
return Tag.of("exception", exception.getClass().getSimpleName());
|
||||
String simpleName = exception.getClass().getSimpleName();
|
||||
return Tag.of("exception", StringUtils.hasText(simpleName) ? simpleName
|
||||
: exception.getClass().getName());
|
||||
}
|
||||
return EXCEPTION_NONE;
|
||||
}
|
||||
|
||||
@@ -134,9 +134,12 @@ public final class WebMvcTags {
|
||||
* @return the exception tag derived from the exception
|
||||
*/
|
||||
public static Tag exception(Throwable exception) {
|
||||
return (exception != null
|
||||
? Tag.of("exception", exception.getClass().getSimpleName())
|
||||
: EXCEPTION_NONE);
|
||||
if (exception != null) {
|
||||
String simpleName = exception.getClass().getSimpleName();
|
||||
return Tag.of("exception", StringUtils.hasText(simpleName) ? simpleName
|
||||
: exception.getClass().getName());
|
||||
}
|
||||
return EXCEPTION_NONE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -77,6 +77,24 @@ public class MetricsWebFilterTests {
|
||||
}).block();
|
||||
assertMetricsContainsTag("uri", "/projects/{project}");
|
||||
assertMetricsContainsTag("status", "500");
|
||||
assertMetricsContainsTag("exception", "IllegalStateException");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void filterAddsNonEmptyTagsToRegistryForAnonymousExceptions() {
|
||||
final Exception anonymous = new Exception("test error") {
|
||||
};
|
||||
|
||||
MockServerWebExchange exchange = createExchange("/projects/spring-boot",
|
||||
"/projects/{project}");
|
||||
this.webFilter.filter(exchange, (serverWebExchange) -> Mono.error(anonymous))
|
||||
.onErrorResume((t) -> {
|
||||
exchange.getResponse().setStatusCodeValue(500);
|
||||
return exchange.getResponse().setComplete();
|
||||
}).block();
|
||||
assertMetricsContainsTag("uri", "/projects/{project}");
|
||||
assertMetricsContainsTag("status", "500");
|
||||
assertMetricsContainsTag("exception", anonymous.getClass().getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -188,6 +188,18 @@ public class WebMvcMetricsFilterTests {
|
||||
.tags("exception", "RuntimeException").timer().count()).isEqualTo(1L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void anonymousError() {
|
||||
try {
|
||||
this.mvc.perform(get("/api/c1/anonymousError/10"));
|
||||
}
|
||||
catch (Throwable ignore) {
|
||||
}
|
||||
assertThat(this.registry.get("http.server.requests")
|
||||
.tag("uri", "/api/c1/anonymousError/{id}").timer().getId()
|
||||
.getTag("exception")).endsWith("$1");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void asyncCallableRequest() throws Exception {
|
||||
AtomicReference<MvcResult> result = new AtomicReference<>();
|
||||
@@ -440,6 +452,14 @@ public class WebMvcMetricsFilterTests {
|
||||
throw new IllegalStateException("Boom on " + id + "!");
|
||||
}
|
||||
|
||||
@Timed
|
||||
@GetMapping("/anonymousError/{id}")
|
||||
public String alwaysThrowsAnonymousException(@PathVariable Long id)
|
||||
throws Exception {
|
||||
throw new Exception("this exception won't have a simple class name") {
|
||||
};
|
||||
}
|
||||
|
||||
@Timed
|
||||
@GetMapping("/unhandledError/{id}")
|
||||
public String alwaysThrowsUnhandledException(@PathVariable Long id) {
|
||||
|
||||
Reference in New Issue
Block a user