From ed7b18967e69209f4d5dc40e6a22e459a5d467a2 Mon Sep 17 00:00:00 2001 From: Sanket Mundra <97032782+sanket-mundra@users.noreply.github.com> Date: Mon, 5 Feb 2024 21:54:03 +0530 Subject: [PATCH] fix: path fetching for home paths Urls (#448) --- .../http/HttpSemanticConventionUtils.java | 25 ++++++++++++++----- .../http/HttpSemanticConventionUtilsTest.java | 16 ++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/semantic-convention-utils/src/main/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtils.java b/semantic-convention-utils/src/main/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtils.java index 3a25a1386..f2346d324 100644 --- a/semantic-convention-utils/src/main/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtils.java +++ b/semantic-convention-utils/src/main/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtils.java @@ -438,7 +438,7 @@ public static boolean isValidUrl(String url) { } public static URL getNormalizedUrl(String url) throws MalformedURLException, URISyntaxException { - String sanitizedUrl = StringUtils.stripStart(url, SLASH); + String sanitizedUrl = removeInitialSlashes(url); URL absoluteUrl = new URL(new URL(RELATIVE_URL_CONTEXT), sanitizedUrl); return absoluteUrl.toURI().normalize().toURL(); } @@ -510,7 +510,7 @@ public static Optional getHttpPath(Event event) { if (StringUtils.isBlank(pathVal)) { pathVal = SLASH; } - return Optional.of(removeTrailingSlash(pathVal)); + return Optional.of(removeTrailingSlashes(pathVal)); } catch (MalformedURLException | URISyntaxException e) { LOGGER.debug( "On extracting httpPath, received an invalid URL: {}, {}", url.get(), e.getMessage()); @@ -530,7 +530,7 @@ private static Optional getHttpPathFromRawAttributes(Event event) { if (attributeValueMap.get(path) != null) { String s = attributeValueMap.get(path).getValue(); if (StringUtils.isNotBlank(s) && s.startsWith(SLASH)) { - return getPathFromUrlObject(s).map(HttpSemanticConventionUtils::removeTrailingSlash); + return getPathFromUrlObject(s).map(HttpSemanticConventionUtils::removeTrailingSlashes); } } } @@ -897,9 +897,22 @@ static Optional getPathFromUrlObject(String urlPath) { return Optional.empty(); } - private static String removeTrailingSlash(String s) { - // Ends with "/" and it's not home page path - return s.endsWith(SLASH) && s.length() > 1 ? s.substring(0, s.length() - 1) : s; + private static String removeTrailingSlashes(String url) { + // if it's home page path, then return / + String updatedUrl = StringUtils.stripEnd(url, SLASH); + if (updatedUrl.isEmpty()) { + return SLASH; + } + return updatedUrl; + } + + private static String removeInitialSlashes(String url) { + // if it's home page path, then return / + String updatedUrl = StringUtils.stripStart(url, SLASH); + if (updatedUrl.isEmpty()) { + return SLASH; + } + return updatedUrl; } @Nullable diff --git a/semantic-convention-utils/src/test/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtilsTest.java b/semantic-convention-utils/src/test/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtilsTest.java index 712223c08..dc5facd69 100644 --- a/semantic-convention-utils/src/test/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtilsTest.java +++ b/semantic-convention-utils/src/test/java/org/hypertrace/semantic/convention/utils/http/HttpSemanticConventionUtilsTest.java @@ -665,4 +665,20 @@ public void testGetPrimaryDomain() { Assertions.assertEquals(HttpSemanticConventionUtils.getPrimaryDomain("10.0.0.0"), "10.0.0.0"); } + + @Test + void testGetPathFromUrlObject() { + Optional path = + HttpSemanticConventionUtils.getPathFromUrlObject("http://app.test.com:9191/"); + Assertions.assertTrue(path.isPresent()); + Assertions.assertEquals("/", path.get()); + + path = HttpSemanticConventionUtils.getPathFromUrlObject("http://app.test.com:9191//"); + Assertions.assertTrue(path.isPresent()); + Assertions.assertEquals("/", path.get()); + + path = HttpSemanticConventionUtils.getPathFromUrlObject("http://app.test.com:9191//abc/def"); + Assertions.assertTrue(path.isPresent()); + Assertions.assertEquals("/abc/def", path.get()); + } }