Commit 21102155 authored by Andy Wilkinson's avatar Andy Wilkinson

Provide more detailed uri tag for calls to Data REST repositories

Closes gh-14872
parent d838787e
...@@ -24,6 +24,7 @@ import io.micrometer.core.instrument.Tag; ...@@ -24,6 +24,7 @@ import io.micrometer.core.instrument.Tag;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.util.pattern.PathPattern;
/** /**
* Factory methods for {@link Tag Tags} associated with a request-response exchange that * Factory methods for {@link Tag Tags} associated with a request-response exchange that
...@@ -36,6 +37,8 @@ import org.springframework.web.servlet.HandlerMapping; ...@@ -36,6 +37,8 @@ import org.springframework.web.servlet.HandlerMapping;
*/ */
public final class WebMvcTags { public final class WebMvcTags {
private static final String DATA_REST_PATH_PATTERN_ATTRIBUTE = "org.springframework.data.rest.webmvc.RepositoryRestHandlerMapping.EFFECTIVE_REPOSITORY_RESOURCE_LOOKUP_PATH";
private static final Tag URI_NOT_FOUND = Tag.of("uri", "NOT_FOUND"); private static final Tag URI_NOT_FOUND = Tag.of("uri", "NOT_FOUND");
private static final Tag URI_REDIRECTION = Tag.of("uri", "REDIRECTION"); private static final Tag URI_REDIRECTION = Tag.of("uri", "REDIRECTION");
...@@ -119,6 +122,11 @@ public final class WebMvcTags { ...@@ -119,6 +122,11 @@ public final class WebMvcTags {
} }
private static String getMatchingPattern(HttpServletRequest request) { private static String getMatchingPattern(HttpServletRequest request) {
PathPattern dataRestPathPattern = (PathPattern) request
.getAttribute(DATA_REST_PATH_PATTERN_ATTRIBUTE);
if (dataRestPathPattern != null) {
return dataRestPathPattern.getPatternString();
}
return (String) request return (String) request
.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); .getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
} }
......
...@@ -23,6 +23,7 @@ import org.springframework.boot.actuate.metrics.web.servlet.WebMvcTags; ...@@ -23,6 +23,7 @@ import org.springframework.boot.actuate.metrics.web.servlet.WebMvcTags;
import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.util.pattern.PathPatternParser;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
...@@ -38,6 +39,17 @@ public class WebMvcTagsTests { ...@@ -38,6 +39,17 @@ public class WebMvcTagsTests {
private final MockHttpServletResponse response = new MockHttpServletResponse(); private final MockHttpServletResponse response = new MockHttpServletResponse();
@Test
public void uriTagIsDataRestsEffectiveRepositoryLookupPathWhenAvailable() {
this.request.setAttribute(
"org.springframework.data.rest.webmvc.RepositoryRestHandlerMapping.EFFECTIVE_REPOSITORY_RESOURCE_LOOKUP_PATH",
new PathPatternParser().parse("/api/cities"));
this.request.setAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE,
"/api/{repository}");
Tag tag = WebMvcTags.uri(this.request, this.response);
assertThat(tag.getValue()).isEqualTo("/api/cities");
}
@Test @Test
public void uriTagValueIsBestMatchingPatternWhenAvailable() { public void uriTagValueIsBestMatchingPatternWhenAvailable() {
this.request.setAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE, this.request.setAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment