Skip to content

Commit 5c02a7e

Browse files
authored
Merge pull request #50254 from brunobat/fix-50226-404-with-slash
Fix server requests metrics tags for 404s when initialPath ends with /
2 parents 3909b4e + 9bc7a29 commit 5c02a7e

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

extensions/micrometer/deployment/src/test/java/io/quarkus/micrometer/deployment/binder/HttpTagExplosionPreventionTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,17 @@ public void test() throws Exception {
6363

6464
Assertions.assertEquals(2, registry.find("http.server.requests").tag("uri", "UNKNOWN").timers().size()); // 2 different set of tags
6565
Assertions.assertEquals(1, registry.find("http.server.requests").tag("uri", "/api/failure/{message}").timers().size());
66+
67+
RestAssured.get("/api/not-there").then().statusCode(404);
68+
Util.waitForMeters(registry.find("http.server.requests").timers(), 17);
69+
Assertions.assertEquals(1, registry.find("http.server.requests").tag("uri", "NOT_FOUND").timers().size());
70+
71+
RestAssured.get("/api/not-there/").then().statusCode(404);
72+
Util.waitForMeters(registry.find("http.server.requests").timers(), 18);
73+
// no other uri tags and count should be 2
74+
Assertions.assertEquals(1, registry.find("http.server.requests").tag("uri", "NOT_FOUND").timers().size());
75+
Assertions.assertEquals(2,
76+
registry.find("http.server.requests").tag("uri", "NOT_FOUND").timers().iterator().next().count());
6677
}
6778

6879
@Path("/")

extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/binder/HttpCommonTags.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public static Tag uri(String pathInfo, String initialPath, int code, boolean sup
100100

101101
private static boolean isTemplatedPath(String pathInfo, String initialPath) {
102102
// only include the path info if it has been matched to a template (initialPath != pathInfo) to avoid a metrics explosion with lots of entries
103-
return initialPath != null && !Objects.equals(initialPath, pathInfo);
103+
// /not-there/ must have the same behaviour as /not-there
104+
return initialPath != null && !(Objects.equals(initialPath, pathInfo) ||
105+
Objects.equals(initialPath, pathInfo + "/"));
104106
}
105107
}

extensions/micrometer/runtime/src/test/java/io/quarkus/micrometer/runtime/binder/HttpCommonTagsTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public void testUriDefaults() {
3333
Assertions.assertEquals(HttpCommonTags.URI_ROOT, HttpCommonTags.uri("/", null, 404, false));
3434
Assertions.assertEquals(Tag.of("uri", "/known/ok"), HttpCommonTags.uri("/known/ok", null, 200, false));
3535
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid", null, 404, false));
36+
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid", "/invalid", 404, false));
37+
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid/", "/invalid/", 404, false));
38+
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid", "/invalid/", 404, false));
3639
Assertions.assertEquals(Tag.of("uri", "/invalid/{id}"),
3740
HttpCommonTags.uri("/invalid/{id}", "/invalid/111", 404, false));
3841
Assertions.assertEquals(Tag.of("uri", "/known/bad/request"),
@@ -49,6 +52,10 @@ public void testUriDefaultsWithSuppression() {
4952
Assertions.assertEquals(HttpCommonTags.URI_ROOT, HttpCommonTags.uri("/", null, 404, true));
5053
Assertions.assertEquals(Tag.of("uri", "/known/ok"), HttpCommonTags.uri("/known/ok", null, 200, true));
5154
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid", null, 404, true));
55+
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid/", null, 404, true));
56+
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid", "/invalid", 404, true));
57+
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid/", "/invalid/", 404, true));
58+
Assertions.assertEquals(HttpCommonTags.URI_NOT_FOUND, HttpCommonTags.uri("/invalid", "/invalid/", 404, true));
5259
Assertions.assertEquals(Tag.of("uri", "/invalid/{id}"), HttpCommonTags.uri("/invalid/{id}", "/invalid/111", 404, true));
5360
Assertions.assertEquals(HttpCommonTags.URI_UNKNOWN, HttpCommonTags.uri("/known/bad/request", null, 400, true));
5461
Assertions.assertEquals(Tag.of("uri", "/known/bad/{request}"),

0 commit comments

Comments
 (0)