From 53c9a6c0449a3a049efd7e198e3c01dc331c08e9 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 7 Mar 2024 19:56:35 -0800 Subject: [PATCH 1/2] Support url.query --- .../implementation/SpanDataMapper.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java index 380eaec5d9e1..d6cf2f0967ee 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java @@ -642,19 +642,39 @@ private static String getHttpUrlFromServerSpanStableSemconv(Attributes attribute if (scheme == null) { return null; } - String path = attributes.get(SemanticAttributes.URL_PATH); - if (path == null) { - return null; - } String host = attributes.get(SemanticAttributes.SERVER_ADDRESS); if (host == null) { return null; } Long port = attributes.get(SemanticAttributes.SERVER_PORT); + String path = attributes.get(SemanticAttributes.URL_PATH); + if (path == null) { + return null; + } + String query = attributes.get(SemanticAttributes.URL_QUERY); + + int len = scheme.length() + host.length() + path.length(); + if (port != null) { + len += 6; // max 5 digits for port plus the port separator ":" + } + if (query != null) { + len += query.length() + 1; // including the query separator "?" + } + + StringBuilder sb = new StringBuilder(len); + sb.append(scheme); + sb.append("://"); + sb.append(host); if (port != null && port > 0) { - return scheme + "://" + host + ":" + port + path; + sb.append(':'); + sb.append(port); + } + sb.append(path); + if (query != null) { + sb.append('?'); + sb.append(query); } - return scheme + "://" + host + path; + return sb.toString(); } @Nullable From 54312c4cc69d8eac1c61ebe0416e7f1d3536121d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 11 Mar 2024 07:51:39 -0700 Subject: [PATCH 2/2] Handle default port --- .../exporter/implementation/SpanDataMapper.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java index d6cf2f0967ee..f6f1f6ff0e22 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/SpanDataMapper.java @@ -665,7 +665,7 @@ private static String getHttpUrlFromServerSpanStableSemconv(Attributes attribute sb.append(scheme); sb.append("://"); sb.append(host); - if (port != null && port > 0) { + if (port != null && port > 0 && !isDefaultPortForScheme(port, scheme)) { sb.append(':'); sb.append(port); } @@ -677,6 +677,10 @@ private static String getHttpUrlFromServerSpanStableSemconv(Attributes attribute return sb.toString(); } + private static boolean isDefaultPortForScheme(Long port, String scheme) { + return (port == 80 && scheme.equals("http")) || (port == 443 && scheme.equals("https")); + } + @Nullable private static String getHttpUrlFromServerSpanOldSemconv(Attributes attributes) { String httpUrl = attributes.get(SemanticAttributes.HTTP_URL);