diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java index 8eede5a0937b..e789239b5589 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java @@ -96,6 +96,7 @@ public class HttpBigQueryRpc implements BigQueryRpc { private static final int HTTP_RESUME_INCOMPLETE = 308; private final BigQueryOptions options; private final Bigquery bigquery; + private final String urlDomain; @InternalApi("Visible for testing") static final Function LIST_TO_DATASET = @@ -117,6 +118,7 @@ public HttpBigQueryRpc(BigQueryOptions options) { HttpTransport transport = transportOptions.getHttpTransportFactory().create(); HttpRequestInitializer initializer = transportOptions.getHttpRequestInitializer(options); this.options = options; + this.urlDomain = new GenericUrl(options.getResolvedApiaryHost("bigquery")).getHost(); if (options.isOpenTelemetryTracingEnabled() && options.getOpenTelemetryTracer() != null @@ -2149,7 +2151,8 @@ private Span createRpcTracingSpan( builder .setAttribute( BigQueryTelemetryTracer.GCP_RESOURCE_DESTINATION_ID, gcpResourceDestinationId) - .setAttribute(BigQueryTelemetryTracer.URL_TEMPLATE, urlTemplate); + .setAttribute(BigQueryTelemetryTracer.URL_TEMPLATE, urlTemplate) + .setAttribute(BigQueryTelemetryTracer.URL_DOMAIN, this.urlDomain); } if (options != null) { diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java index 82c354ef5446..bebc67e3ffde 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java @@ -66,6 +66,7 @@ private BigQueryTelemetryTracer() {} AttributeKey.stringKey("server.address"); public static final AttributeKey SERVER_PORT = AttributeKey.longKey("server.port"); public static final AttributeKey URL_TEMPLATE = AttributeKey.stringKey("url.template"); + public static final AttributeKey URL_DOMAIN = AttributeKey.stringKey("url.domain"); public static void addCommonAttributeToSpan(Span span) { span.setAttribute(GCP_CLIENT_SERVICE, BQ_GCP_CLIENT_SERVICE) diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java index d34409d44028..64f6127ab378 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java @@ -39,7 +39,6 @@ public class HttpTracingRequestInitializer implements HttpRequestInitializer { public static final AttributeKey HTTP_REQUEST_METHOD = AttributeKey.stringKey("http.request.method"); public static final AttributeKey URL_FULL = AttributeKey.stringKey("url.full"); - public static final AttributeKey URL_DOMAIN = AttributeKey.stringKey("url.domain"); public static final AttributeKey HTTP_RESPONSE_STATUS_CODE = AttributeKey.longKey("http.response.status_code"); public static final AttributeKey HTTP_REQUEST_RESEND_COUNT = diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpcTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpcTest.java index acb33d2a1104..8e3caee21529 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpcTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpcTest.java @@ -1140,6 +1140,59 @@ public void testGetUriTemplateValueTelemetry() throws Exception { "projects/{+projectId}/datasets/{+datasetId}", rpcSpan.getAttributes().get(BigQueryTelemetryTracer.URL_TEMPLATE)); } + + @Test + public void testUrlDomain_DefaultValue() throws Exception { + setMockResponse( + "{\"kind\":\"bigquery#dataset\",\"id\":\"" + PROJECT_ID + ":" + DATASET_ID + "\"}"); + + rpc.getDatasetSkipExceptionTranslation(PROJECT_ID, DATASET_ID, new HashMap<>()); + + List spans = spanExporter.getFinishedSpanItems(); + io.opentelemetry.sdk.trace.data.SpanData rpcSpan = + spans.stream() + .filter( + span -> span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.getDataset")) + .findFirst() + .orElse(null); + assertNotNull(rpcSpan); + assertEquals( + "bigquery.googleapis.com", + rpcSpan.getAttributes().get(BigQueryTelemetryTracer.URL_DOMAIN)); + } + + @Test + public void testUrlDomain_OverriddenValue() throws Exception { + setMockResponse( + "{\"kind\":\"bigquery#dataset\",\"id\":\"" + PROJECT_ID + ":" + DATASET_ID + "\"}"); + + BigQueryOptions customOptions = + BigQueryOptions.newBuilder() + .setProjectId(PROJECT_ID) + .setCredentials(NoCredentials.getInstance()) + .setEnableOpenTelemetryTracing(true) + .setOpenTelemetryTracer(tracer) + .setTransportOptions( + BigQueryOptions.getDefaultHttpTransportOptions().toBuilder() + .setHttpTransportFactory(() -> mockTransport) + .build()) + .setHost("https://custom.googleapis.com") + .build(); + HttpBigQueryRpc customRpc = new HttpBigQueryRpc(customOptions); + + customRpc.getDatasetSkipExceptionTranslation(PROJECT_ID, DATASET_ID, new HashMap<>()); + + List spans = spanExporter.getFinishedSpanItems(); + io.opentelemetry.sdk.trace.data.SpanData rpcSpan = + spans.stream() + .filter( + span -> span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.getDataset")) + .findFirst() + .orElse(null); + assertNotNull(rpcSpan); + assertEquals( + "custom.googleapis.com", rpcSpan.getAttributes().get(BigQueryTelemetryTracer.URL_DOMAIN)); + } } @Nested @@ -1190,8 +1243,8 @@ public void testHttpTracingDisabledDoesNotAddAdditionalAttributes() throws Excep assertNull( rpcSpan.getAttributes().get(AttributeKey.stringKey("url.template")), "url.template attribute should not be set"); - assertNull(rpcSpan.getAttributes().get(BigQueryTelemetryTracer.GCP_RESOURCE_DESTINATION_ID)); + assertNull(rpcSpan.getAttributes().get(BigQueryTelemetryTracer.URL_DOMAIN)); } @Test