Update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.3.0-alpha (#1267)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
This commit is contained in:
renovate[bot] 2024-04-16 09:29:38 -07:00 committed by GitHub
parent 425bfb99fb
commit baf0eaa36e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
39 changed files with 383 additions and 309 deletions

View File

@ -12,6 +12,7 @@ dependencies {
api("io.opentelemetry:opentelemetry-sdk")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.25.0-alpha")
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")

View File

@ -5,13 +5,21 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_VERSION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_ELASTIC_BEANSTALK;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_INSTANCE_ID;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_NAMESPACE;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
@ -58,7 +66,7 @@ public final class BeanstalkResource {
if (!parser.isExpectedStartObjectToken()) {
logger.log(Level.WARNING, "Invalid Beanstalk config: ", configPath);
return Resource.create(attrBuilders.build(), ResourceAttributes.SCHEMA_URL);
return Resource.create(attrBuilders.build(), SchemaUrls.V1_25_0);
}
while (parser.nextToken() != JsonToken.END_OBJECT) {
@ -66,13 +74,13 @@ public final class BeanstalkResource {
String value = parser.getText();
switch (parser.currentName()) {
case DEVELOPMENT_ID:
attrBuilders.put(ResourceAttributes.SERVICE_INSTANCE_ID, value);
attrBuilders.put(SERVICE_INSTANCE_ID, value);
break;
case VERSION_LABEL:
attrBuilders.put(ResourceAttributes.SERVICE_VERSION, value);
attrBuilders.put(SERVICE_VERSION, value);
break;
case ENVIRONMENT_NAME:
attrBuilders.put(ResourceAttributes.SERVICE_NAMESPACE, value);
attrBuilders.put(SERVICE_NAMESPACE, value);
break;
default:
parser.skipChildren();
@ -83,12 +91,10 @@ public final class BeanstalkResource {
return Resource.empty();
}
attrBuilders.put(ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.AWS);
attrBuilders.put(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.AWS_ELASTIC_BEANSTALK);
attrBuilders.put(CLOUD_PROVIDER, AWS);
attrBuilders.put(CLOUD_PLATFORM, AWS_ELASTIC_BEANSTALK);
return Resource.create(attrBuilders.build(), ResourceAttributes.SCHEMA_URL);
return Resource.create(attrBuilders.build(), SchemaUrls.V1_25_0);
}
private BeanstalkResource() {}

View File

@ -5,13 +5,25 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_EC2;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_IMAGE_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_TYPE;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import io.opentelemetry.semconv.incubating.CloudIncubatingAttributes;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
@ -78,9 +90,8 @@ public final class Ec2Resource {
String hostname = fetchHostname(hostnameUrl, token);
AttributesBuilder attrBuilders = Attributes.builder();
attrBuilders.put(ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.AWS);
attrBuilders.put(
ResourceAttributes.CLOUD_PLATFORM, ResourceAttributes.CloudPlatformValues.AWS_EC2);
attrBuilders.put(CLOUD_PROVIDER, CloudIncubatingAttributes.CloudProviderValues.AWS);
attrBuilders.put(CLOUD_PLATFORM, AWS_EC2);
try (JsonParser parser = JSON_FACTORY.createParser(identity)) {
parser.nextToken();
@ -93,22 +104,22 @@ public final class Ec2Resource {
String value = parser.nextTextValue();
switch (parser.currentName()) {
case "instanceId":
attrBuilders.put(ResourceAttributes.HOST_ID, value);
attrBuilders.put(HOST_ID, value);
break;
case "availabilityZone":
attrBuilders.put(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, value);
attrBuilders.put(CLOUD_AVAILABILITY_ZONE, value);
break;
case "instanceType":
attrBuilders.put(ResourceAttributes.HOST_TYPE, value);
attrBuilders.put(HOST_TYPE, value);
break;
case "imageId":
attrBuilders.put(ResourceAttributes.HOST_IMAGE_ID, value);
attrBuilders.put(HOST_IMAGE_ID, value);
break;
case "accountId":
attrBuilders.put(ResourceAttributes.CLOUD_ACCOUNT_ID, value);
attrBuilders.put(CLOUD_ACCOUNT_ID, value);
break;
case "region":
attrBuilders.put(ResourceAttributes.CLOUD_REGION, value);
attrBuilders.put(CLOUD_REGION, value);
break;
default:
parser.skipChildren();
@ -119,9 +130,9 @@ public final class Ec2Resource {
return Resource.empty();
}
attrBuilders.put(ResourceAttributes.HOST_NAME, hostname);
attrBuilders.put(HOST_NAME, hostname);
return Resource.create(attrBuilders.build(), ResourceAttributes.SCHEMA_URL);
return Resource.create(attrBuilders.build(), SchemaUrls.V1_25_0);
}
private static String fetchToken(URL tokenUrl) {

View File

@ -5,13 +5,34 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_CONTAINER_ARN;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_LAUNCHTYPE;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_ARN;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_FAMILY;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_REVISION;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_GROUP_ARNS;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_GROUP_NAMES;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_STREAM_ARNS;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_STREAM_NAMES;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_ECS;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_IMAGE_NAME;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_NAME;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.io.IOException;
import java.util.Collections;
import java.util.Locale;
@ -58,7 +79,7 @@ public final class EcsResource {
// For TaskARN, Family, Revision.
// May put the same attribute twice but that shouldn't matter.
fetchMetadata(httpClient, ecsMetadataUrl + "/task", attrBuilders);
return Resource.create(attrBuilders.build(), ResourceAttributes.SCHEMA_URL);
return Resource.create(attrBuilders.build(), SchemaUrls.V1_25_0);
}
// Not running on ECS
return Resource.empty();
@ -70,9 +91,8 @@ public final class EcsResource {
if (json.isEmpty()) {
return;
}
attrBuilders.put(ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.AWS);
attrBuilders.put(
ResourceAttributes.CLOUD_PLATFORM, ResourceAttributes.CloudPlatformValues.AWS_ECS);
attrBuilders.put(CLOUD_PROVIDER, AWS);
attrBuilders.put(CLOUD_PLATFORM, AWS_ECS);
try (JsonParser parser = JSON_FACTORY.createParser(json)) {
parser.nextToken();
LogArnBuilder logArnBuilder = new LogArnBuilder();
@ -82,17 +102,14 @@ public final class EcsResource {
.getLogGroupArn()
.ifPresent(
logGroupArn -> {
attrBuilders.put(
ResourceAttributes.AWS_LOG_GROUP_ARNS, Collections.singletonList(logGroupArn));
attrBuilders.put(AWS_LOG_GROUP_ARNS, Collections.singletonList(logGroupArn));
});
logArnBuilder
.getLogStreamArn()
.ifPresent(
logStreamArn -> {
attrBuilders.put(
ResourceAttributes.AWS_LOG_STREAM_ARNS,
Collections.singletonList(logStreamArn));
attrBuilders.put(AWS_LOG_STREAM_ARNS, Collections.singletonList(logStreamArn));
});
} catch (IOException e) {
logger.log(Level.WARNING, "Can't get ECS metadata", e);
@ -151,26 +168,28 @@ public final class EcsResource {
String value = parser.nextTextValue();
switch (parser.currentName()) {
case "AvailabilityZone":
attrBuilders.put(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, value);
attrBuilders.put(CLOUD_AVAILABILITY_ZONE, value);
break;
case "DockerId":
attrBuilders.put(ResourceAttributes.CONTAINER_ID, value);
attrBuilders.put(CONTAINER_ID, value);
break;
case "DockerName":
attrBuilders.put(ResourceAttributes.CONTAINER_NAME, value);
attrBuilders.put(CONTAINER_NAME, value);
break;
case "ContainerARN":
arn = value;
attrBuilders.put(ResourceAttributes.AWS_ECS_CONTAINER_ARN, value);
attrBuilders.put(ResourceAttributes.CLOUD_RESOURCE_ID, value);
attrBuilders.put(AWS_ECS_CONTAINER_ARN, value);
attrBuilders.put(CLOUD_RESOURCE_ID, value);
logArnBuilder.setContainerArn(value);
break;
case "Image":
DockerImage parsedImage = DockerImage.parse(value);
if (parsedImage != null) {
attrBuilders.put(ResourceAttributes.CONTAINER_IMAGE_NAME, parsedImage.getRepository());
attrBuilders.put(CONTAINER_IMAGE_NAME, parsedImage.getRepository());
// TODO: CONTAINER_IMAGE_TAG has been replaced with CONTAINER_IMAGE_TAGS
attrBuilders.put(ResourceAttributes.CONTAINER_IMAGE_TAG, parsedImage.getTag());
attrBuilders.put(
io.opentelemetry.semconv.ResourceAttributes.CONTAINER_IMAGE_TAG,
parsedImage.getTag());
}
break;
case "ImageID":
@ -181,11 +200,11 @@ public final class EcsResource {
parseResponse(parser, attrBuilders, logArnBuilder);
break;
case "awslogs-group":
attrBuilders.put(ResourceAttributes.AWS_LOG_GROUP_NAMES, value);
attrBuilders.put(AWS_LOG_GROUP_NAMES, value);
logArnBuilder.setLogGroupName(value);
break;
case "awslogs-stream":
attrBuilders.put(ResourceAttributes.AWS_LOG_STREAM_NAMES, value);
attrBuilders.put(AWS_LOG_STREAM_NAMES, value);
logArnBuilder.setLogStreamName(value);
break;
case "awslogs-region":
@ -193,16 +212,16 @@ public final class EcsResource {
break;
case "TaskARN":
arn = value;
attrBuilders.put(ResourceAttributes.AWS_ECS_TASK_ARN, value);
attrBuilders.put(AWS_ECS_TASK_ARN, value);
break;
case "LaunchType":
attrBuilders.put(ResourceAttributes.AWS_ECS_LAUNCHTYPE, value.toLowerCase(Locale.ROOT));
attrBuilders.put(AWS_ECS_LAUNCHTYPE, value.toLowerCase(Locale.ROOT));
break;
case "Family":
attrBuilders.put(ResourceAttributes.AWS_ECS_TASK_FAMILY, value);
attrBuilders.put(AWS_ECS_TASK_FAMILY, value);
break;
case "Revision":
attrBuilders.put(ResourceAttributes.AWS_ECS_TASK_REVISION, value);
attrBuilders.put(AWS_ECS_TASK_REVISION, value);
break;
default:
parser.skipChildren();
@ -210,9 +229,8 @@ public final class EcsResource {
}
}
getRegion(arn).ifPresent(region -> attrBuilders.put(ResourceAttributes.CLOUD_REGION, region));
getAccountId(arn)
.ifPresent(accountId -> attrBuilders.put(ResourceAttributes.CLOUD_ACCOUNT_ID, accountId));
getRegion(arn).ifPresent(region -> attrBuilders.put(CLOUD_REGION, region));
getAccountId(arn).ifPresent(accountId -> attrBuilders.put(CLOUD_ACCOUNT_ID, accountId));
}
private EcsResource() {}

View File

@ -5,13 +5,20 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_EKS;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.semconv.incubating.K8sIncubatingAttributes.K8S_CLUSTER_NAME;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@ -65,21 +72,20 @@ public final class EksResource {
}
AttributesBuilder attrBuilders = Attributes.builder();
attrBuilders.put(ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.AWS);
attrBuilders.put(
ResourceAttributes.CLOUD_PLATFORM, ResourceAttributes.CloudPlatformValues.AWS_EKS);
attrBuilders.put(CLOUD_PROVIDER, AWS);
attrBuilders.put(CLOUD_PLATFORM, AWS_EKS);
String clusterName = getClusterName(httpClient);
if (clusterName != null && !clusterName.isEmpty()) {
attrBuilders.put(ResourceAttributes.K8S_CLUSTER_NAME, clusterName);
attrBuilders.put(K8S_CLUSTER_NAME, clusterName);
}
String containerId = dockerHelper.getContainerId();
if (containerId != null && !containerId.isEmpty()) {
attrBuilders.put(ResourceAttributes.CONTAINER_ID, containerId);
attrBuilders.put(CONTAINER_ID, containerId);
}
return Resource.create(attrBuilders.build(), ResourceAttributes.SCHEMA_URL);
return Resource.create(attrBuilders.build(), SchemaUrls.V1_25_0);
}
private static boolean isEks(

View File

@ -5,10 +5,18 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_LAMBDA;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_VERSION;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.util.Map;
import java.util.stream.Stream;
@ -39,23 +47,20 @@ public final class LambdaResource {
return Resource.empty();
}
AttributesBuilder builder =
Attributes.builder()
.put(ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.AWS);
builder.put(
ResourceAttributes.CLOUD_PLATFORM, ResourceAttributes.CloudPlatformValues.AWS_LAMBDA);
AttributesBuilder builder = Attributes.builder().put(CLOUD_PROVIDER, AWS);
builder.put(CLOUD_PLATFORM, AWS_LAMBDA);
if (!region.isEmpty()) {
builder.put(ResourceAttributes.CLOUD_REGION, region);
builder.put(CLOUD_REGION, region);
}
if (!functionName.isEmpty()) {
builder.put(ResourceAttributes.FAAS_NAME, functionName);
builder.put(FAAS_NAME, functionName);
}
if (!functionVersion.isEmpty()) {
builder.put(ResourceAttributes.FAAS_VERSION, functionVersion);
builder.put(FAAS_VERSION, functionVersion);
}
return Resource.create(builder.build(), ResourceAttributes.SCHEMA_URL);
return Resource.create(builder.build(), SchemaUrls.V1_25_0);
}
private static boolean isLambda(String... envVariables) {

View File

@ -6,6 +6,11 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_VERSION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_INSTANCE_ID;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_NAMESPACE;
import static org.assertj.core.api.Assertions.entry;
import com.google.common.base.Charsets;
@ -13,7 +18,7 @@ import com.google.common.io.Files;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.io.File;
import java.io.IOException;
import java.util.ServiceLoader;
@ -33,12 +38,12 @@ class BeanstalkResourceTest {
Attributes attributes = resource.getAttributes();
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_elastic_beanstalk"),
entry(ResourceAttributes.SERVICE_INSTANCE_ID, "4"),
entry(ResourceAttributes.SERVICE_VERSION, "2"),
entry(ResourceAttributes.SERVICE_NAMESPACE, "HttpSubscriber-env"));
assertThat(resource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_elastic_beanstalk"),
entry(SERVICE_INSTANCE_ID, "4"),
entry(SERVICE_VERSION, "2"),
entry(SERVICE_NAMESPACE, "HttpSubscriber-env"));
assertThat(resource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
}
@Test

View File

@ -6,6 +6,15 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_IMAGE_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_TYPE;
import static org.assertj.core.api.Assertions.entry;
import com.linecorp.armeria.common.AggregatedHttpRequest;
@ -16,7 +25,7 @@ import com.linecorp.armeria.testing.junit5.server.mock.MockWebServerExtension;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.util.ServiceLoader;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@ -53,20 +62,20 @@ class Ec2ResourceTest {
server.enqueue(HttpResponse.of("ec2-1-2-3-4"));
Resource resource = Ec2Resource.buildResource("localhost:" + server.httpPort());
assertThat(resource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
assertThat(resource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
Attributes attributes = resource.getAttributes();
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_ec2"),
entry(ResourceAttributes.HOST_ID, "i-1234567890abcdef0"),
entry(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, "us-west-2b"),
entry(ResourceAttributes.HOST_TYPE, "t2.micro"),
entry(ResourceAttributes.HOST_IMAGE_ID, "ami-5fb8c835"),
entry(ResourceAttributes.CLOUD_ACCOUNT_ID, "123456789012"),
entry(ResourceAttributes.CLOUD_REGION, "us-west-2"),
entry(ResourceAttributes.HOST_NAME, "ec2-1-2-3-4"));
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_ec2"),
entry(HOST_ID, "i-1234567890abcdef0"),
entry(CLOUD_AVAILABILITY_ZONE, "us-west-2b"),
entry(HOST_TYPE, "t2.micro"),
entry(HOST_IMAGE_ID, "ami-5fb8c835"),
entry(CLOUD_ACCOUNT_ID, "123456789012"),
entry(CLOUD_REGION, "us-west-2"),
entry(HOST_NAME, "ec2-1-2-3-4"));
AggregatedHttpRequest request1 = server.takeRequest().request();
assertThat(request1.path()).isEqualTo("/latest/api/token");
@ -88,20 +97,20 @@ class Ec2ResourceTest {
server.enqueue(HttpResponse.of("ec2-1-2-3-4"));
Resource resource = Ec2Resource.buildResource("localhost:" + server.httpPort());
assertThat(resource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
assertThat(resource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
Attributes attributes = resource.getAttributes();
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_ec2"),
entry(ResourceAttributes.HOST_ID, "i-1234567890abcdef0"),
entry(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, "us-west-2b"),
entry(ResourceAttributes.HOST_TYPE, "t2.micro"),
entry(ResourceAttributes.HOST_IMAGE_ID, "ami-5fb8c835"),
entry(ResourceAttributes.CLOUD_ACCOUNT_ID, "123456789012"),
entry(ResourceAttributes.CLOUD_REGION, "us-west-2"),
entry(ResourceAttributes.HOST_NAME, "ec2-1-2-3-4"));
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_ec2"),
entry(HOST_ID, "i-1234567890abcdef0"),
entry(CLOUD_AVAILABILITY_ZONE, "us-west-2b"),
entry(HOST_TYPE, "t2.micro"),
entry(HOST_IMAGE_ID, "ami-5fb8c835"),
entry(CLOUD_ACCOUNT_ID, "123456789012"),
entry(CLOUD_REGION, "us-west-2"),
entry(HOST_NAME, "ec2-1-2-3-4"));
AggregatedHttpRequest request1 = server.takeRequest().request();
assertThat(request1.path()).isEqualTo("/latest/api/token");

View File

@ -6,6 +6,24 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_CONTAINER_ARN;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_LAUNCHTYPE;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_ARN;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_FAMILY;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_REVISION;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_GROUP_ARNS;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_GROUP_NAMES;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_STREAM_ARNS;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_STREAM_NAMES;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_IMAGE_NAME;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_NAME;
import static org.assertj.core.api.Assertions.entry;
import static org.mockito.Mockito.when;
@ -14,7 +32,7 @@ import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
@ -48,28 +66,26 @@ class EcsResourceTest {
Resource resource = EcsResource.buildResource(mockSysEnv, mockHttpClient);
Attributes attributes = resource.getAttributes();
assertThat(resource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
assertThat(resource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_ecs"),
entry(ResourceAttributes.CLOUD_ACCOUNT_ID, "012345678910"),
entry(ResourceAttributes.CLOUD_REGION, "us-east-2"),
entry(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, "us-east-2b"),
entry(ResourceAttributes.CONTAINER_NAME, "ecs-nginx-5-nginx-curl-ccccb9f49db0dfe0d901"),
entry(
ResourceAttributes.CONTAINER_ID,
"43481a6ce4842eec8fe72fc28500c6b52edcc0917f105b83379f88cac1ff3946"),
entry(ResourceAttributes.CONTAINER_IMAGE_NAME, "nrdlngr/nginx-curl"),
entry(ResourceAttributes.CONTAINER_IMAGE_TAG, "latest"),
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_ecs"),
entry(CLOUD_ACCOUNT_ID, "012345678910"),
entry(CLOUD_REGION, "us-east-2"),
entry(CLOUD_AVAILABILITY_ZONE, "us-east-2b"),
entry(CONTAINER_NAME, "ecs-nginx-5-nginx-curl-ccccb9f49db0dfe0d901"),
entry(CONTAINER_ID, "43481a6ce4842eec8fe72fc28500c6b52edcc0917f105b83379f88cac1ff3946"),
entry(CONTAINER_IMAGE_NAME, "nrdlngr/nginx-curl"),
entry(io.opentelemetry.semconv.ResourceAttributes.CONTAINER_IMAGE_TAG, "latest"),
entry(
AttributeKey.stringKey("aws.ecs.container.image.id"),
"sha256:2e00ae64383cfc865ba0a2ba37f61b50a120d2d9378559dcd458dc0de47bc165"),
entry(
ResourceAttributes.AWS_ECS_TASK_ARN,
AWS_ECS_TASK_ARN,
"arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3"),
entry(ResourceAttributes.AWS_ECS_TASK_FAMILY, "nginx"),
entry(ResourceAttributes.AWS_ECS_TASK_REVISION, "5"));
entry(AWS_ECS_TASK_FAMILY, "nginx"),
entry(AWS_ECS_TASK_REVISION, "5"));
}
// Suppression is required for CONTAINER_IMAGE_TAG until we are ready to upgrade.
@ -87,50 +103,45 @@ class EcsResourceTest {
Resource resource = EcsResource.buildResource(mockSysEnv, mockHttpClient);
Attributes attributes = resource.getAttributes();
assertThat(resource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
assertThat(resource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_ecs"),
entry(ResourceAttributes.CLOUD_ACCOUNT_ID, "111122223333"),
entry(ResourceAttributes.CLOUD_REGION, "us-west-2"),
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_ecs"),
entry(CLOUD_ACCOUNT_ID, "111122223333"),
entry(CLOUD_REGION, "us-west-2"),
entry(
ResourceAttributes.CLOUD_RESOURCE_ID,
CLOUD_RESOURCE_ID,
"arn:aws:ecs:us-west-2:111122223333:container/0206b271-b33f-47ab-86c6-a0ba208a70a9"),
entry(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, "us-west-2d"),
entry(ResourceAttributes.CONTAINER_NAME, "ecs-curltest-26-curl-cca48e8dcadd97805600"),
entry(
ResourceAttributes.CONTAINER_ID,
"ea32192c8553fbff06c9340478a2ff089b2bb5646fb718b4ee206641c9086d66"),
entry(
ResourceAttributes.CONTAINER_IMAGE_NAME,
"111122223333.dkr.ecr.us-west-2.amazonaws.com/curltest"),
entry(ResourceAttributes.CONTAINER_IMAGE_TAG, "latest"),
entry(CLOUD_AVAILABILITY_ZONE, "us-west-2d"),
entry(CONTAINER_NAME, "ecs-curltest-26-curl-cca48e8dcadd97805600"),
entry(CONTAINER_ID, "ea32192c8553fbff06c9340478a2ff089b2bb5646fb718b4ee206641c9086d66"),
entry(CONTAINER_IMAGE_NAME, "111122223333.dkr.ecr.us-west-2.amazonaws.com/curltest"),
entry(io.opentelemetry.semconv.ResourceAttributes.CONTAINER_IMAGE_TAG, "latest"),
entry(
AttributeKey.stringKey("aws.ecs.container.image.id"),
"sha256:d691691e9652791a60114e67b365688d20d19940dde7c4736ea30e660d8d3553"),
entry(
ResourceAttributes.AWS_ECS_CONTAINER_ARN,
AWS_ECS_CONTAINER_ARN,
"arn:aws:ecs:us-west-2:111122223333:container/0206b271-b33f-47ab-86c6-a0ba208a70a9"),
entry(AWS_LOG_GROUP_NAMES, Collections.singletonList("/ecs/metadata")),
entry(
ResourceAttributes.AWS_LOG_GROUP_NAMES, Collections.singletonList("/ecs/metadata")),
entry(
ResourceAttributes.AWS_LOG_GROUP_ARNS,
AWS_LOG_GROUP_ARNS,
Collections.singletonList(
"arn:aws:logs:us-west-2:111122223333:log-group:/ecs/metadata")),
entry(
ResourceAttributes.AWS_LOG_STREAM_NAMES,
AWS_LOG_STREAM_NAMES,
Collections.singletonList("ecs/curl/8f03e41243824aea923aca126495f665")),
entry(
ResourceAttributes.AWS_LOG_STREAM_ARNS,
AWS_LOG_STREAM_ARNS,
Collections.singletonList(
"arn:aws:logs:us-west-2:111122223333:log-group:/ecs/metadata:log-stream:ecs/curl/8f03e41243824aea923aca126495f665")),
entry(
ResourceAttributes.AWS_ECS_TASK_ARN,
AWS_ECS_TASK_ARN,
"arn:aws:ecs:us-west-2:111122223333:task/default/158d1c8083dd49d6b527399fd6414f5c"),
entry(ResourceAttributes.AWS_ECS_LAUNCHTYPE, "ec2"),
entry(ResourceAttributes.AWS_ECS_TASK_FAMILY, "curltest"),
entry(ResourceAttributes.AWS_ECS_TASK_REVISION, "26"));
entry(AWS_ECS_LAUNCHTYPE, "ec2"),
entry(AWS_ECS_TASK_FAMILY, "curltest"),
entry(AWS_ECS_TASK_REVISION, "26"));
}
@Test

View File

@ -9,6 +9,10 @@ import static io.opentelemetry.contrib.aws.resource.EksResource.AUTH_CONFIGMAP_P
import static io.opentelemetry.contrib.aws.resource.EksResource.CW_CONFIGMAP_PATH;
import static io.opentelemetry.contrib.aws.resource.EksResource.K8S_SVC_URL;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.semconv.incubating.K8sIncubatingAttributes.K8S_CLUSTER_NAME;
import static org.assertj.core.api.Assertions.entry;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@ -18,7 +22,7 @@ import com.google.common.io.Files;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.io.File;
import java.io.IOException;
import java.util.ServiceLoader;
@ -59,13 +63,13 @@ public class EksResourceTest {
mockK8sKeystoreFile.getPath());
Attributes attributes = eksResource.getAttributes();
assertThat(eksResource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
assertThat(eksResource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_eks"),
entry(ResourceAttributes.K8S_CLUSTER_NAME, "my-cluster"),
entry(ResourceAttributes.CONTAINER_ID, "0123456789A"));
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_eks"),
entry(K8S_CLUSTER_NAME, "my-cluster"),
entry(CONTAINER_ID, "0123456789A"));
}
@Test

View File

@ -6,6 +6,11 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_VERSION;
import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonMap;
import static org.assertj.core.api.Assertions.entry;
@ -13,7 +18,7 @@ import static org.assertj.core.api.Assertions.entry;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import io.opentelemetry.semconv.SchemaUrls;
import java.util.HashMap;
import java.util.Map;
import java.util.ServiceLoader;
@ -32,12 +37,12 @@ class LambdaResourceTest {
LambdaResource.buildResource(singletonMap("AWS_LAMBDA_FUNCTION_NAME", "my-function"));
Attributes attributes = resource.getAttributes();
assertThat(resource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
assertThat(resource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_lambda"),
entry(ResourceAttributes.FAAS_NAME, "my-function"));
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_lambda"),
entry(FAAS_NAME, "my-function"));
}
@Test
@ -50,14 +55,14 @@ class LambdaResourceTest {
Resource resource = LambdaResource.buildResource(envVars);
Attributes attributes = resource.getAttributes();
assertThat(resource.getSchemaUrl()).isEqualTo(ResourceAttributes.SCHEMA_URL);
assertThat(resource.getSchemaUrl()).isEqualTo(SchemaUrls.V1_25_0);
assertThat(attributes)
.containsOnly(
entry(ResourceAttributes.CLOUD_PROVIDER, "aws"),
entry(ResourceAttributes.CLOUD_PLATFORM, "aws_lambda"),
entry(ResourceAttributes.CLOUD_REGION, "us-east-1"),
entry(ResourceAttributes.FAAS_NAME, "my-function"),
entry(ResourceAttributes.FAAS_VERSION, "1.2.3"));
entry(CLOUD_PROVIDER, "aws"),
entry(CLOUD_PLATFORM, "aws_lambda"),
entry(CLOUD_REGION, "us-east-1"),
entry(FAAS_NAME, "my-function"),
entry(FAAS_VERSION, "1.2.3"));
}
@Test

View File

@ -13,7 +13,7 @@ val DEPENDENCY_BOMS = listOf(
"com.linecorp.armeria:armeria-bom:1.28.1",
"org.junit:junit-bom:5.10.2",
"io.grpc:grpc-bom:1.63.0",
"io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.2.0-alpha",
"io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.3.0-alpha",
"org.testcontainers:testcontainers-bom:1.19.7"
)

View File

@ -15,6 +15,7 @@ dependencies {
implementation("com.google.cloud.opentelemetry:detector-resources-support:0.28.0")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.25.0-alpha")
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")

View File

@ -27,6 +27,26 @@ import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_INSTANCE_ID;
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_NAME;
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_REVISION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_APP_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_CLOUD_FUNCTIONS;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_CLOUD_RUN;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_KUBERNETES_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.GCP;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INSTANCE;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_VERSION;
import static io.opentelemetry.semconv.incubating.GcpIncubatingAttributes.GCP_GCE_INSTANCE_HOSTNAME;
import static io.opentelemetry.semconv.incubating.GcpIncubatingAttributes.GCP_GCE_INSTANCE_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_TYPE;
import static io.opentelemetry.semconv.incubating.K8sIncubatingAttributes.K8S_CLUSTER_NAME;
import com.google.cloud.opentelemetry.detection.DetectedPlatform;
import com.google.cloud.opentelemetry.detection.GCPPlatformDetector;
@ -35,7 +55,6 @@ import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Logger;
@ -69,8 +88,8 @@ public class GCPResourceProvider implements ResourceProvider {
// This is running on some sort of GCPCompute - figure out the platform
AttributesBuilder attrBuilder = Attributes.builder();
attrBuilder.put(ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.GCP);
attrBuilder.put(ResourceAttributes.CLOUD_ACCOUNT_ID, detectedPlatform.getProjectId());
attrBuilder.put(CLOUD_PROVIDER, GCP);
attrBuilder.put(CLOUD_ACCOUNT_ID, detectedPlatform.getProjectId());
switch (detectedPlatform.getSupportedPlatform()) {
case GOOGLE_KUBERNETES_ENGINE:
@ -108,28 +127,25 @@ public class GCPResourceProvider implements ResourceProvider {
*/
private static void addGceAttributes(
AttributesBuilder attrBuilder, Map<String, String> attributesMap) {
attrBuilder.put(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE);
attrBuilder.put(CLOUD_PLATFORM, GCP_COMPUTE_ENGINE);
Optional.ofNullable(attributesMap.get(GCE_AVAILABILITY_ZONE))
.ifPresent(zone -> attrBuilder.put(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, zone));
.ifPresent(zone -> attrBuilder.put(CLOUD_AVAILABILITY_ZONE, zone));
Optional.ofNullable(attributesMap.get(GCE_CLOUD_REGION))
.ifPresent(region -> attrBuilder.put(ResourceAttributes.CLOUD_REGION, region));
.ifPresent(region -> attrBuilder.put(CLOUD_REGION, region));
Optional.ofNullable(attributesMap.get(GCE_INSTANCE_ID))
.ifPresent(instanceId -> attrBuilder.put(ResourceAttributes.HOST_ID, instanceId));
.ifPresent(instanceId -> attrBuilder.put(HOST_ID, instanceId));
Optional.ofNullable(attributesMap.get(GCE_INSTANCE_NAME))
.ifPresent(
instanceName -> {
attrBuilder.put(ResourceAttributes.HOST_NAME, instanceName);
attrBuilder.put(ResourceAttributes.GCP_GCE_INSTANCE_NAME, instanceName);
attrBuilder.put(HOST_NAME, instanceName);
attrBuilder.put(GCP_GCE_INSTANCE_NAME, instanceName);
});
Optional.ofNullable(attributesMap.get(GCE_INSTANCE_HOSTNAME))
.ifPresent(
instanceHostname ->
attrBuilder.put(ResourceAttributes.GCP_GCE_INSTANCE_HOSTNAME, instanceHostname));
instanceHostname -> attrBuilder.put(GCP_GCE_INSTANCE_HOSTNAME, instanceHostname));
Optional.ofNullable(attributesMap.get(GCE_MACHINE_TYPE))
.ifPresent(machineType -> attrBuilder.put(ResourceAttributes.HOST_TYPE, machineType));
.ifPresent(machineType -> attrBuilder.put(HOST_TYPE, machineType));
}
/**
@ -141,28 +157,23 @@ public class GCPResourceProvider implements ResourceProvider {
*/
private static void addGkeAttributes(
AttributesBuilder attrBuilder, Map<String, String> attributesMap) {
attrBuilder.put(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_KUBERNETES_ENGINE);
attrBuilder.put(CLOUD_PLATFORM, GCP_KUBERNETES_ENGINE);
Optional.ofNullable(attributesMap.get(GKE_CLUSTER_NAME))
.ifPresent(
clusterName -> attrBuilder.put(ResourceAttributes.K8S_CLUSTER_NAME, clusterName));
.ifPresent(clusterName -> attrBuilder.put(K8S_CLUSTER_NAME, clusterName));
Optional.ofNullable(attributesMap.get(GKE_HOST_ID))
.ifPresent(hostId -> attrBuilder.put(ResourceAttributes.HOST_ID, hostId));
.ifPresent(hostId -> attrBuilder.put(HOST_ID, hostId));
Optional.ofNullable(attributesMap.get(GKE_CLUSTER_LOCATION_TYPE))
.ifPresent(
locationType -> {
if (attributesMap.get(GKE_CLUSTER_LOCATION) != null) {
switch (locationType) {
case GKE_LOCATION_TYPE_REGION:
attrBuilder.put(
ResourceAttributes.CLOUD_REGION, attributesMap.get(GKE_CLUSTER_LOCATION));
attrBuilder.put(CLOUD_REGION, attributesMap.get(GKE_CLUSTER_LOCATION));
break;
case GKE_LOCATION_TYPE_ZONE:
attrBuilder.put(
ResourceAttributes.CLOUD_AVAILABILITY_ZONE,
attributesMap.get(GKE_CLUSTER_LOCATION));
CLOUD_AVAILABILITY_ZONE, attributesMap.get(GKE_CLUSTER_LOCATION));
break;
default:
// TODO: Figure out how to handle unexpected conditions like this
@ -184,8 +195,7 @@ public class GCPResourceProvider implements ResourceProvider {
*/
private static void addGcrAttributes(
AttributesBuilder attrBuilder, Map<String, String> attributesMap) {
attrBuilder.put(
ResourceAttributes.CLOUD_PLATFORM, ResourceAttributes.CloudPlatformValues.GCP_CLOUD_RUN);
attrBuilder.put(CLOUD_PLATFORM, GCP_CLOUD_RUN);
addCommonAttributesForServerlessCompute(attrBuilder, attributesMap);
}
@ -198,9 +208,7 @@ public class GCPResourceProvider implements ResourceProvider {
*/
private static void addGcfAttributes(
AttributesBuilder attrBuilder, Map<String, String> attributesMap) {
attrBuilder.put(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_CLOUD_FUNCTIONS);
attrBuilder.put(CLOUD_PLATFORM, GCP_CLOUD_FUNCTIONS);
addCommonAttributesForServerlessCompute(attrBuilder, attributesMap);
}
@ -213,21 +221,19 @@ public class GCPResourceProvider implements ResourceProvider {
*/
private static void addGaeAttributes(
AttributesBuilder attrBuilder, Map<String, String> attributesMap) {
attrBuilder.put(
ResourceAttributes.CLOUD_PLATFORM, ResourceAttributes.CloudPlatformValues.GCP_APP_ENGINE);
attrBuilder.put(CLOUD_PLATFORM, GCP_APP_ENGINE);
Optional.ofNullable(attributesMap.get(GAE_MODULE_NAME))
.ifPresent(appName -> attrBuilder.put(ResourceAttributes.FAAS_NAME, appName));
.ifPresent(appName -> attrBuilder.put(FAAS_NAME, appName));
Optional.ofNullable(attributesMap.get(GAE_APP_VERSION))
.ifPresent(appVersion -> attrBuilder.put(ResourceAttributes.FAAS_VERSION, appVersion));
.ifPresent(appVersion -> attrBuilder.put(FAAS_VERSION, appVersion));
Optional.ofNullable(attributesMap.get(GAE_INSTANCE_ID))
.ifPresent(
appInstanceId -> attrBuilder.put(ResourceAttributes.FAAS_INSTANCE, appInstanceId));
.ifPresent(appInstanceId -> attrBuilder.put(FAAS_INSTANCE, appInstanceId));
Optional.ofNullable(attributesMap.get(GAE_CLOUD_REGION))
.ifPresent(cloudRegion -> attrBuilder.put(ResourceAttributes.CLOUD_REGION, cloudRegion));
.ifPresent(cloudRegion -> attrBuilder.put(CLOUD_REGION, cloudRegion));
Optional.ofNullable(attributesMap.get(GAE_AVAILABILITY_ZONE))
.ifPresent(
cloudAvailabilityZone ->
attrBuilder.put(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, cloudAvailabilityZone));
attrBuilder.put(CLOUD_AVAILABILITY_ZONE, cloudAvailabilityZone));
}
/**
@ -240,14 +246,14 @@ public class GCPResourceProvider implements ResourceProvider {
private static void addCommonAttributesForServerlessCompute(
AttributesBuilder attrBuilder, Map<String, String> attributesMap) {
Optional.ofNullable(attributesMap.get(SERVERLESS_COMPUTE_NAME))
.ifPresent(name -> attrBuilder.put(ResourceAttributes.FAAS_NAME, name));
.ifPresent(name -> attrBuilder.put(FAAS_NAME, name));
Optional.ofNullable(attributesMap.get(SERVERLESS_COMPUTE_REVISION))
.ifPresent(revision -> attrBuilder.put(ResourceAttributes.FAAS_VERSION, revision));
.ifPresent(revision -> attrBuilder.put(FAAS_VERSION, revision));
Optional.ofNullable(attributesMap.get(SERVERLESS_COMPUTE_INSTANCE_ID))
.ifPresent(instanceId -> attrBuilder.put(ResourceAttributes.FAAS_INSTANCE, instanceId));
.ifPresent(instanceId -> attrBuilder.put(FAAS_INSTANCE, instanceId));
Optional.ofNullable(attributesMap.get(SERVERLESS_COMPUTE_AVAILABILITY_ZONE))
.ifPresent(zone -> attrBuilder.put(ResourceAttributes.CLOUD_AVAILABILITY_ZONE, zone));
.ifPresent(zone -> attrBuilder.put(CLOUD_AVAILABILITY_ZONE, zone));
Optional.ofNullable(attributesMap.get(SERVERLESS_COMPUTE_CLOUD_REGION))
.ifPresent(region -> attrBuilder.put(ResourceAttributes.CLOUD_REGION, region));
.ifPresent(region -> attrBuilder.put(CLOUD_REGION, region));
}
}

View File

@ -28,6 +28,26 @@ import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_NAME;
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_REVISION;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_APP_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_CLOUD_FUNCTIONS;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_CLOUD_RUN;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_KUBERNETES_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.GCP;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INSTANCE;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_VERSION;
import static io.opentelemetry.semconv.incubating.GcpIncubatingAttributes.GCP_GCE_INSTANCE_HOSTNAME;
import static io.opentelemetry.semconv.incubating.GcpIncubatingAttributes.GCP_GCE_INSTANCE_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_TYPE;
import static io.opentelemetry.semconv.incubating.K8sIncubatingAttributes.K8S_CLUSTER_NAME;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.Mockito.verify;
@ -37,7 +57,6 @@ import com.google.common.collect.ImmutableMap;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
@ -157,24 +176,16 @@ class GCPResourceProviderTest {
assertThat(gotResource.getAttributes())
.hasSize(10)
.containsEntry(
ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.GCP)
.containsEntry(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(ResourceAttributes.HOST_ID, detectedAttributes.get(GCE_INSTANCE_ID))
.containsEntry(ResourceAttributes.HOST_NAME, detectedAttributes.get(GCE_INSTANCE_NAME))
.containsEntry(
ResourceAttributes.GCP_GCE_INSTANCE_NAME, detectedAttributes.get(GCE_INSTANCE_NAME))
.containsEntry(
ResourceAttributes.GCP_GCE_INSTANCE_HOSTNAME,
detectedAttributes.get(GCE_INSTANCE_HOSTNAME))
.containsEntry(ResourceAttributes.HOST_TYPE, detectedAttributes.get(GCE_MACHINE_TYPE))
.containsEntry(
ResourceAttributes.CLOUD_AVAILABILITY_ZONE,
detectedAttributes.get(GCE_AVAILABILITY_ZONE))
.containsEntry(ResourceAttributes.CLOUD_REGION, detectedAttributes.get(GCE_CLOUD_REGION));
.containsEntry(CLOUD_PROVIDER, GCP)
.containsEntry(CLOUD_PLATFORM, GCP_COMPUTE_ENGINE)
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(HOST_ID, detectedAttributes.get(GCE_INSTANCE_ID))
.containsEntry(HOST_NAME, detectedAttributes.get(GCE_INSTANCE_NAME))
.containsEntry(GCP_GCE_INSTANCE_NAME, detectedAttributes.get(GCE_INSTANCE_NAME))
.containsEntry(GCP_GCE_INSTANCE_HOSTNAME, detectedAttributes.get(GCE_INSTANCE_HOSTNAME))
.containsEntry(HOST_TYPE, detectedAttributes.get(GCE_MACHINE_TYPE))
.containsEntry(CLOUD_AVAILABILITY_ZONE, detectedAttributes.get(GCE_AVAILABILITY_ZONE))
.containsEntry(CLOUD_REGION, detectedAttributes.get(GCE_CLOUD_REGION));
}
@Test
@ -189,10 +200,9 @@ class GCPResourceProviderTest {
verifyGkeMapping(gotResource, mockPlatform);
assertThat(gotResource.getAttributes())
.hasSize(6)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(
ResourceAttributes.CLOUD_REGION, mockPlatform.getAttributes().get(GKE_CLUSTER_LOCATION))
.doesNotContainKey(ResourceAttributes.CLOUD_AVAILABILITY_ZONE);
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(CLOUD_REGION, mockPlatform.getAttributes().get(GKE_CLUSTER_LOCATION))
.doesNotContainKey(CLOUD_AVAILABILITY_ZONE);
}
@Test
@ -207,11 +217,10 @@ class GCPResourceProviderTest {
verifyGkeMapping(gotResource, mockPlatform);
assertThat(gotResource.getAttributes())
.hasSize(6)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(
ResourceAttributes.CLOUD_AVAILABILITY_ZONE,
mockPlatform.getAttributes().get(GKE_CLUSTER_LOCATION))
.doesNotContainKey(ResourceAttributes.CLOUD_REGION);
CLOUD_AVAILABILITY_ZONE, mockPlatform.getAttributes().get(GKE_CLUSTER_LOCATION))
.doesNotContainKey(CLOUD_REGION);
}
@Test
@ -234,9 +243,9 @@ class GCPResourceProviderTest {
verify(mockPlatform, Mockito.times(1)).getProjectId();
assertThat(gotResource.getAttributes())
.hasSize(5)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.doesNotContainKey(ResourceAttributes.CLOUD_REGION)
.doesNotContainKey(ResourceAttributes.CLOUD_AVAILABILITY_ZONE);
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.doesNotContainKey(CLOUD_REGION)
.doesNotContainKey(CLOUD_AVAILABILITY_ZONE);
}
@Test
@ -250,22 +259,18 @@ class GCPResourceProviderTest {
verifyGkeMapping(gotResource, mockPlatform);
assertThat(gotResource.getAttributes())
.hasSize(5)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.doesNotContainKey(ResourceAttributes.CLOUD_REGION)
.doesNotContainKey(ResourceAttributes.CLOUD_AVAILABILITY_ZONE);
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.doesNotContainKey(CLOUD_REGION)
.doesNotContainKey(CLOUD_AVAILABILITY_ZONE);
}
private static void verifyGkeMapping(Resource gotResource, DetectedPlatform detectedPlatform) {
Map<String, String> detectedAttributes = detectedPlatform.getAttributes();
assertThat(gotResource.getAttributes())
.containsEntry(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_KUBERNETES_ENGINE)
.containsEntry(
ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.GCP)
.containsEntry(ResourceAttributes.HOST_ID, detectedAttributes.get(GKE_HOST_ID))
.containsEntry(
ResourceAttributes.K8S_CLUSTER_NAME, detectedAttributes.get(GKE_CLUSTER_NAME));
.containsEntry(CLOUD_PLATFORM, GCP_KUBERNETES_ENGINE)
.containsEntry(CLOUD_PROVIDER, GCP)
.containsEntry(HOST_ID, detectedAttributes.get(GKE_HOST_ID))
.containsEntry(K8S_CLUSTER_NAME, detectedAttributes.get(GKE_CLUSTER_NAME));
}
@Test
@ -281,9 +286,8 @@ class GCPResourceProviderTest {
verifyServerlessMapping(gotResource, mockPlatform);
assertThat(gotResource.getAttributes())
.hasSize(8)
.containsEntry(
ResourceAttributes.CLOUD_PLATFORM, ResourceAttributes.CloudPlatformValues.GCP_CLOUD_RUN)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID);
.containsEntry(CLOUD_PLATFORM, GCP_CLOUD_RUN)
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID);
}
@Test
@ -300,31 +304,21 @@ class GCPResourceProviderTest {
verifyServerlessMapping(gotResource, mockPlatform);
assertThat(gotResource.getAttributes())
.hasSize(8)
.containsEntry(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_CLOUD_FUNCTIONS)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID);
.containsEntry(CLOUD_PLATFORM, GCP_CLOUD_FUNCTIONS)
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID);
}
private static void verifyServerlessMapping(
Resource gotResource, DetectedPlatform detectedPlatform) {
Map<String, String> detectedAttributes = detectedPlatform.getAttributes();
assertThat(gotResource.getAttributes())
.containsEntry(CLOUD_PROVIDER, GCP)
.containsEntry(FAAS_NAME, detectedAttributes.get(SERVERLESS_COMPUTE_NAME))
.containsEntry(FAAS_VERSION, detectedAttributes.get(SERVERLESS_COMPUTE_REVISION))
.containsEntry(FAAS_INSTANCE, detectedAttributes.get(SERVERLESS_COMPUTE_INSTANCE_ID))
.containsEntry(
ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.GCP)
.containsEntry(
ResourceAttributes.FAAS_NAME, detectedAttributes.get(SERVERLESS_COMPUTE_NAME))
.containsEntry(
ResourceAttributes.FAAS_VERSION, detectedAttributes.get(SERVERLESS_COMPUTE_REVISION))
.containsEntry(
ResourceAttributes.FAAS_INSTANCE,
detectedAttributes.get(SERVERLESS_COMPUTE_INSTANCE_ID))
.containsEntry(
ResourceAttributes.CLOUD_AVAILABILITY_ZONE,
detectedAttributes.get(SERVERLESS_COMPUTE_AVAILABILITY_ZONE))
.containsEntry(
ResourceAttributes.CLOUD_REGION,
detectedAttributes.get(SERVERLESS_COMPUTE_CLOUD_REGION));
CLOUD_AVAILABILITY_ZONE, detectedAttributes.get(SERVERLESS_COMPUTE_AVAILABILITY_ZONE))
.containsEntry(CLOUD_REGION, detectedAttributes.get(SERVERLESS_COMPUTE_CLOUD_REGION));
}
@Test
@ -339,19 +333,14 @@ class GCPResourceProviderTest {
assertThat(gotResource.getAttributes())
.hasSize(8)
.containsEntry(
ResourceAttributes.CLOUD_PROVIDER, ResourceAttributes.CloudProviderValues.GCP)
.containsEntry(
ResourceAttributes.CLOUD_PLATFORM,
ResourceAttributes.CloudPlatformValues.GCP_APP_ENGINE)
.containsEntry(ResourceAttributes.CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(ResourceAttributes.FAAS_NAME, detectedAttributes.get(GAE_MODULE_NAME))
.containsEntry(ResourceAttributes.FAAS_VERSION, detectedAttributes.get(GAE_APP_VERSION))
.containsEntry(ResourceAttributes.FAAS_INSTANCE, detectedAttributes.get(GAE_INSTANCE_ID))
.containsEntry(
ResourceAttributes.CLOUD_AVAILABILITY_ZONE,
detectedAttributes.get(GAE_AVAILABILITY_ZONE))
.containsEntry(ResourceAttributes.CLOUD_REGION, detectedAttributes.get(GAE_CLOUD_REGION));
.containsEntry(CLOUD_PROVIDER, GCP)
.containsEntry(CLOUD_PLATFORM, GCP_APP_ENGINE)
.containsEntry(CLOUD_ACCOUNT_ID, DUMMY_PROJECT_ID)
.containsEntry(FAAS_NAME, detectedAttributes.get(GAE_MODULE_NAME))
.containsEntry(FAAS_VERSION, detectedAttributes.get(GAE_APP_VERSION))
.containsEntry(FAAS_INSTANCE, detectedAttributes.get(GAE_INSTANCE_ID))
.containsEntry(CLOUD_AVAILABILITY_ZONE, detectedAttributes.get(GAE_AVAILABILITY_ZONE))
.containsEntry(CLOUD_REGION, detectedAttributes.get(GAE_CLOUD_REGION));
}
@Test

View File

@ -16,7 +16,6 @@ dependencies {
implementation("org.codehaus.plexus:plexus-component-annotations:2.1.1")
implementation("io.opentelemetry:opentelemetry-api")
implementation("io.opentelemetry:opentelemetry-api-events")
implementation("io.opentelemetry:opentelemetry-sdk")
implementation("io.opentelemetry:opentelemetry-sdk-trace")
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")

View File

@ -9,7 +9,7 @@ otelJava.moduleName.set("io.opentelemetry.contrib.metrics.micrometer")
dependencies {
api("io.opentelemetry:opentelemetry-api")
api("io.opentelemetry:opentelemetry-sdk-metrics")
api("io.opentelemetry:opentelemetry-extension-incubator")
api("io.opentelemetry:opentelemetry-api-incubator")
compileOnly("io.micrometer:micrometer-core:1.5.0") // do not auto-update this version
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")

View File

@ -11,6 +11,14 @@ import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounterBuilder;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
import io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder;
import io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder;
import io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
import io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import io.opentelemetry.api.metrics.DoubleCounter;
import io.opentelemetry.api.metrics.DoubleCounterBuilder;
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
@ -33,14 +41,6 @@ import io.opentelemetry.api.metrics.ObservableDoubleUpDownCounter;
import io.opentelemetry.api.metrics.ObservableLongCounter;
import io.opentelemetry.api.metrics.ObservableLongGauge;
import io.opentelemetry.api.metrics.ObservableLongUpDownCounter;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleCounterBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongGaugeBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongHistogramBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;

View File

@ -6,13 +6,13 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounterBuilder;
import io.opentelemetry.api.metrics.DoubleCounter;
import io.opentelemetry.api.metrics.DoubleCounterBuilder;
import io.opentelemetry.api.metrics.ObservableDoubleCounter;
import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
import io.opentelemetry.context.Context;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleCounterBuilder;
import java.util.function.Consumer;
final class MicrometerDoubleCounter extends AbstractCounter

View File

@ -6,14 +6,14 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.DoubleGauge;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder;
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import io.opentelemetry.api.metrics.LongGaugeBuilder;
import io.opentelemetry.api.metrics.ObservableDoubleGauge;
import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.DoubleGauge;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
import java.util.function.Consumer;
public final class MicrometerDoubleGauge extends AbstractGauge

View File

@ -6,13 +6,13 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import io.opentelemetry.api.metrics.LongHistogramBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
import java.util.List;
public final class MicrometerDoubleHistogram extends AbstractHistogram implements DoubleHistogram {

View File

@ -6,13 +6,13 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
import io.opentelemetry.api.metrics.DoubleUpDownCounter;
import io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
import io.opentelemetry.api.metrics.ObservableDoubleUpDownCounter;
import io.opentelemetry.context.Context;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
import java.util.function.Consumer;
final class MicrometerDoubleUpDownCounter extends AbstractUpDownCounter

View File

@ -6,6 +6,7 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder;
import io.opentelemetry.api.metrics.DoubleCounterBuilder;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.LongCounterBuilder;
@ -14,7 +15,6 @@ import io.opentelemetry.api.metrics.ObservableLongMeasurement;
import io.opentelemetry.context.Context;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder;
import java.util.function.Consumer;
public final class MicrometerLongCounter extends AbstractCounter

View File

@ -6,12 +6,12 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder;
import io.opentelemetry.api.incubator.metrics.LongGauge;
import io.opentelemetry.api.metrics.LongGaugeBuilder;
import io.opentelemetry.api.metrics.ObservableLongGauge;
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongGaugeBuilder;
import io.opentelemetry.extension.incubator.metrics.LongGauge;
import java.util.function.Consumer;
public final class MicrometerLongGauge extends AbstractGauge

View File

@ -6,11 +6,11 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
import io.opentelemetry.api.metrics.LongHistogram;
import io.opentelemetry.api.metrics.LongHistogramBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongHistogramBuilder;
import java.util.List;
final class MicrometerLongHistogram extends AbstractHistogram implements LongHistogram {

View File

@ -6,6 +6,7 @@
package io.opentelemetry.contrib.metrics.micrometer.internal.instruments;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
import io.opentelemetry.api.metrics.LongUpDownCounter;
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
@ -14,7 +15,6 @@ import io.opentelemetry.api.metrics.ObservableLongUpDownCounter;
import io.opentelemetry.context.Context;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.InstrumentState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import java.util.function.Consumer;
public final class MicrometerLongUpDownCounter extends AbstractUpDownCounter

View File

@ -14,6 +14,7 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounterBuilder;
import io.opentelemetry.api.metrics.DoubleCounter;
import io.opentelemetry.api.metrics.DoubleCounterBuilder;
import io.opentelemetry.api.metrics.ObservableDoubleCounter;
@ -22,7 +23,6 @@ import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleCounterBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

View File

@ -13,13 +13,13 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder;
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import io.opentelemetry.api.metrics.ObservableDoubleGauge;
import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

View File

@ -15,6 +15,7 @@ import io.micrometer.core.instrument.distribution.HistogramSnapshot;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import io.opentelemetry.context.Context;
@ -22,7 +23,6 @@ import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
import java.util.Arrays;
import java.util.Collections;
import org.junit.jupiter.api.BeforeEach;

View File

@ -13,6 +13,7 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
import io.opentelemetry.api.metrics.DoubleUpDownCounter;
import io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
import io.opentelemetry.api.metrics.ObservableDoubleUpDownCounter;
@ -21,7 +22,6 @@ import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

View File

@ -14,6 +14,7 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.LongCounterBuilder;
import io.opentelemetry.api.metrics.ObservableLongCounter;
@ -22,7 +23,6 @@ import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

View File

@ -13,13 +13,13 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder;
import io.opentelemetry.api.metrics.LongGaugeBuilder;
import io.opentelemetry.api.metrics.ObservableLongGauge;
import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongGaugeBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

View File

@ -15,6 +15,7 @@ import io.micrometer.core.instrument.distribution.HistogramSnapshot;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
import io.opentelemetry.api.metrics.LongHistogram;
import io.opentelemetry.api.metrics.LongHistogramBuilder;
import io.opentelemetry.context.Context;
@ -22,7 +23,6 @@ import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongHistogramBuilder;
import java.util.Arrays;
import java.util.Collections;
import org.junit.jupiter.api.BeforeEach;

View File

@ -13,6 +13,7 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import io.opentelemetry.api.metrics.LongUpDownCounter;
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.api.metrics.ObservableLongUpDownCounter;
@ -21,7 +22,6 @@ import io.opentelemetry.contrib.metrics.micrometer.TestCallbackRegistrar;
import io.opentelemetry.contrib.metrics.micrometer.internal.Constants;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterProviderSharedState;
import io.opentelemetry.contrib.metrics.micrometer.internal.state.MeterSharedState;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

View File

@ -5,7 +5,7 @@
package io.opentelemetry.contrib.resourceproviders;
import static io.opentelemetry.semconv.ResourceAttributes.SERVICE_NAME;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import static java.util.logging.Level.FINE;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;

View File

@ -5,6 +5,7 @@
package io.opentelemetry.contrib.resourceproviders;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ -12,7 +13,6 @@ import static org.mockito.Mockito.when;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ResourceAttributes;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
@ -55,9 +55,7 @@ class AppServerServiceNameProviderTest {
@Test
void shouldApply() {
Resource existing =
Resource.builder()
.put(ResourceAttributes.SERVICE_NAME.getKey(), "unknown_service:java")
.build();
Resource.builder().put(SERVICE_NAME.getKey(), "unknown_service:java").build();
ConfigProperties config = mock(ConfigProperties.class);
@ -82,8 +80,7 @@ class AppServerServiceNameProviderTest {
@Test
void shouldApply_serviceNameAlreadyInResource() {
Resource existing =
Resource.builder().put(ResourceAttributes.SERVICE_NAME.getKey(), "shemp").build();
Resource existing = Resource.builder().put(SERVICE_NAME.getKey(), "shemp").build();
ConfigProperties config = mock(ConfigProperties.class);

View File

@ -8,7 +8,8 @@ otelJava.moduleName.set("io.opentelemetry.contrib.sampler")
dependencies {
api("io.opentelemetry:opentelemetry-sdk")
api("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.25.0-alpha")
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.contrib.sampler;
import static io.opentelemetry.semconv.SemanticAttributes.THREAD_NAME;
import static io.opentelemetry.semconv.incubating.ThreadIncubatingAttributes.THREAD_NAME;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.api.common.Attributes;

View File

@ -5,9 +5,9 @@
package io.opentelemetry.contrib.sampler;
import static io.opentelemetry.semconv.SemanticAttributes.THREAD_NAME;
import static io.opentelemetry.semconv.SemanticAttributes.URL_FULL;
import static io.opentelemetry.semconv.SemanticAttributes.URL_PATH;
import static io.opentelemetry.semconv.UrlAttributes.URL_FULL;
import static io.opentelemetry.semconv.UrlAttributes.URL_PATH;
import static io.opentelemetry.semconv.incubating.ThreadIncubatingAttributes.THREAD_NAME;
import static java.util.Collections.emptyList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;