From 786512b79250a4ca80c05e6350180be07d87cdb0 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Wed, 19 Mar 2025 22:51:48 -0400 Subject: [PATCH] Add scope name to metadata (#13531) --- docs/instrumentation-list.yaml | 591 ++++++++++++++++-- instrumentation-docs/build.gradle.kts | 1 + instrumentation-docs/readme.md | 28 +- .../docs/DocGeneratorApplication.java | 5 + .../docs/InstrumentationAnalyzer.java | 30 +- .../docs/InstrumentationEntity.java | 74 --- .../docs/InstrumentationMetaData.java | 25 - .../docs/internal/DependencyInfo.java | 14 + .../docs/internal/InstrumentationEntity.java | 159 +++++ .../internal/InstrumentationMetaData.java | 51 ++ .../{ => internal}/InstrumentationType.java | 6 +- .../docs/{ => parsers}/GradleParser.java | 85 ++- .../docs/utils/FileManager.java | 5 +- .../docs/utils/InstrumentationPath.java | 2 +- .../docs/utils/YamlHelper.java | 33 +- .../docs/InstrumentationAnalyzerTest.java | 5 + .../docs/{ => parsers}/GradleParserTest.java | 93 ++- .../docs/utils/FileManagerTest.java | 8 + .../docs/utils/YamlHelperTest.java | 160 ++++- .../external-annotations/metadata.yaml | 1 + .../internal-application-logger/metadata.yaml | 1 + .../internal-class-loader/metadata.yaml | 1 + .../internal-eclipse-osgi-3.6/metadata.yaml | 1 + .../internal/internal-lambda/metadata.yaml | 1 + .../internal-reflection/metadata.yaml | 1 + .../internal-url-class-loader/metadata.yaml | 1 + .../java-util-logging/metadata.yaml | 1 + instrumentation/methods/metadata.yaml | 1 + 28 files changed, 1153 insertions(+), 231 deletions(-) delete mode 100644 instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationEntity.java delete mode 100644 instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationMetaData.java create mode 100644 instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/DependencyInfo.java create mode 100644 instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationEntity.java create mode 100644 instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationMetaData.java rename instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/{ => internal}/InstrumentationType.java (76%) rename instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/{ => parsers}/GradleParser.java (67%) rename instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/{ => parsers}/GradleParserTest.java (63%) create mode 100644 instrumentation/external-annotations/metadata.yaml create mode 100644 instrumentation/internal/internal-application-logger/metadata.yaml create mode 100644 instrumentation/internal/internal-class-loader/metadata.yaml create mode 100644 instrumentation/internal/internal-eclipse-osgi-3.6/metadata.yaml create mode 100644 instrumentation/internal/internal-lambda/metadata.yaml create mode 100644 instrumentation/internal/internal-reflection/metadata.yaml create mode 100644 instrumentation/internal/internal-url-class-loader/metadata.yaml create mode 100644 instrumentation/java-util-logging/metadata.yaml create mode 100644 instrumentation/methods/metadata.yaml diff --git a/docs/instrumentation-list.yaml b/docs/instrumentation-list.yaml index b4dbf1d831..dd0092db16 100644 --- a/docs/instrumentation-list.yaml +++ b/docs/instrumentation-list.yaml @@ -1,7 +1,14 @@ +# This file is generated and should not be manually edited. +# The structure and contents are a work in progress and subject to change. +# For more information see: https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/13468 + activej: instrumentations: - name: activej-http-6.0 srcPath: instrumentation/activej-http-6.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.activej-http-6.0 target_versions: javaagent: - io.activej:activej-http:[6.0,) @@ -9,6 +16,8 @@ akka: instrumentations: - name: akka-http-10.0 srcPath: instrumentation/akka/akka-http-10.0 + scope: + name: io.opentelemetry.akka-http-10.0 target_versions: javaagent: - com.typesafe.akka:akka-http_2.12:[10,) @@ -16,6 +25,8 @@ akka: - com.typesafe.akka:akka-http_2.11:[10,) - name: akka-actor-fork-join-2.5 srcPath: instrumentation/akka/akka-actor-fork-join-2.5 + scope: + name: io.opentelemetry.akka-actor-fork-join-2.5 target_versions: javaagent: - com.typesafe.akka:akka-actor_2.12:[2.5,2.6) @@ -23,6 +34,8 @@ akka: - com.typesafe.akka:akka-actor_2.11:[2.5,) - name: akka-actor-2.3 srcPath: instrumentation/akka/akka-actor-2.3 + scope: + name: io.opentelemetry.akka-actor-2.3 target_versions: javaagent: - com.typesafe.akka:akka-actor_2.11:[2.3,) @@ -32,6 +45,8 @@ alibaba: instrumentations: - name: alibaba-druid-1.0 srcPath: instrumentation/alibaba-druid-1.0 + scope: + name: io.opentelemetry.alibaba-druid-1.0 target_versions: javaagent: - com.alibaba:druid:(,) @@ -41,47 +56,65 @@ apache: instrumentations: - name: apache-shenyu-2.4 srcPath: instrumentation/apache-shenyu-2.4 + scope: + name: io.opentelemetry.apache-shenyu-2.4 target_versions: javaagent: - org.apache.shenyu:shenyu-web:[2.4.0,) - name: apache-httpclient-2.0 srcPath: instrumentation/apache-httpclient/apache-httpclient-2.0 + scope: + name: io.opentelemetry.apache-httpclient-2.0 target_versions: javaagent: - commons-httpclient:commons-httpclient:[2.0,4.0) - name: apache-httpasyncclient-4.1 srcPath: instrumentation/apache-httpasyncclient-4.1 + scope: + name: io.opentelemetry.apache-httpasyncclient-4.1 target_versions: javaagent: - org.apache.httpcomponents:httpasyncclient:[4.1,) - name: apache-httpclient-4.3 srcPath: instrumentation/apache-httpclient/apache-httpclient-4.3 + scope: + name: io.opentelemetry.apache-httpclient-4.3 target_versions: library: - org.apache.httpcomponents:httpclient:[4.3,4.+) - name: apache-httpclient-4.0 srcPath: instrumentation/apache-httpclient/apache-httpclient-4.0 + scope: + name: io.opentelemetry.apache-httpclient-4.0 target_versions: javaagent: - io.dropwizard:dropwizard-client:(,3.0.0) - org.apache.httpcomponents:httpclient:[4.0,) - name: apache-dubbo-2.7 srcPath: instrumentation/apache-dubbo-2.7 + scope: + name: io.opentelemetry.apache-dubbo-2.7 target_versions: javaagent: - org.apache.dubbo:dubbo:[2.7,) - name: apache-httpclient-5.2 srcPath: instrumentation/apache-httpclient/apache-httpclient-5.2 + scope: + name: io.opentelemetry.apache-httpclient-5.2 target_versions: library: - org.apache.httpcomponents.client5:httpclient5:5.2.1 - name: apache-httpclient-5.0 srcPath: instrumentation/apache-httpclient/apache-httpclient-5.0 + scope: + name: io.opentelemetry.apache-httpclient-5.0 target_versions: javaagent: - org.apache.httpcomponents.client5:httpclient5:[5.0,) - name: apache-dbcp-2.0 srcPath: instrumentation/apache-dbcp-2.0 + scope: + name: io.opentelemetry.apache-dbcp-2.0 target_versions: javaagent: - org.apache.commons:commons-dbcp2:[2,) @@ -91,6 +124,8 @@ armeria: instrumentations: - name: armeria-1.3 srcPath: instrumentation/armeria/armeria-1.3 + scope: + name: io.opentelemetry.armeria-1.3 target_versions: javaagent: - com.linecorp.armeria:armeria:[1.3.0,) @@ -98,6 +133,8 @@ armeria: - com.linecorp.armeria:armeria:1.3.0 - name: armeria-grpc-1.14 srcPath: instrumentation/armeria/armeria-grpc-1.14 + scope: + name: io.opentelemetry.armeria-grpc-1.14 target_versions: javaagent: - com.linecorp.armeria:armeria-grpc:[1.14.0,) @@ -105,11 +142,15 @@ async: instrumentations: - name: async-http-client-1.9 srcPath: instrumentation/async-http-client/async-http-client-1.9 + scope: + name: io.opentelemetry.async-http-client-1.9 target_versions: javaagent: - com.ning:async-http-client:[1.9.0,) - name: async-http-client-2.0 srcPath: instrumentation/async-http-client/async-http-client-2.0 + scope: + name: io.opentelemetry.async-http-client-2.0 target_versions: javaagent: - org.asynchttpclient:async-http-client:[2.0.0,) @@ -117,6 +158,8 @@ aws: instrumentations: - name: aws-lambda-events-2.2 srcPath: instrumentation/aws-lambda/aws-lambda-events-2.2 + scope: + name: io.opentelemetry.aws-lambda-events-2.2 target_versions: javaagent: - com.amazonaws:aws-lambda-java-core:[1.0.0,) @@ -125,6 +168,8 @@ aws: - com.amazonaws:aws-lambda-java-core:1.0.0 - name: aws-lambda-core-1.0 srcPath: instrumentation/aws-lambda/aws-lambda-core-1.0 + scope: + name: io.opentelemetry.aws-lambda-core-1.0 target_versions: javaagent: - com.amazonaws:aws-lambda-java-core:[1.0.0,) @@ -132,6 +177,8 @@ aws: - com.amazonaws:aws-lambda-java-core:1.0.0 - name: aws-sdk-1.11 srcPath: instrumentation/aws-sdk/aws-sdk-1.11 + scope: + name: io.opentelemetry.aws-sdk-1.11 target_versions: javaagent: - com.amazonaws:aws-java-sdk-sqs:[1.10.33,) @@ -141,6 +188,8 @@ aws: - com.amazonaws:aws-java-sdk-core:1.11.0 - name: aws-sdk-2.2 srcPath: instrumentation/aws-sdk/aws-sdk-2.2 + scope: + name: io.opentelemetry.aws-sdk-2.2 target_versions: javaagent: - software.amazon.awssdk:sns:[2.2.0,) @@ -158,16 +207,22 @@ azure: instrumentations: - name: azure-core-1.36 srcPath: instrumentation/azure-core/azure-core-1.36 + scope: + name: io.opentelemetry.azure-core-1.36 target_versions: javaagent: - com.azure:azure-core:[1.36.0,) - name: azure-core-1.19 srcPath: instrumentation/azure-core/azure-core-1.19 + scope: + name: io.opentelemetry.azure-core-1.19 target_versions: javaagent: - com.azure:azure-core:[1.19.0,1.36.0) - name: azure-core-1.14 srcPath: instrumentation/azure-core/azure-core-1.14 + scope: + name: io.opentelemetry.azure-core-1.14 target_versions: javaagent: - com.azure:azure-core:[1.14.0,1.19.0) @@ -175,6 +230,8 @@ c3p0: instrumentations: - name: c3p0-0.9 srcPath: instrumentation/c3p0-0.9 + scope: + name: io.opentelemetry.c3p0-0.9 target_versions: javaagent: - com.mchange:c3p0:(,) @@ -184,6 +241,8 @@ camel: instrumentations: - name: camel-2.20 srcPath: instrumentation/camel-2.20 + scope: + name: io.opentelemetry.camel-2.20 target_versions: javaagent: - org.apache.camel:camel-core:[2.19,3) @@ -191,11 +250,15 @@ cassandra: instrumentations: - name: cassandra-4.0 srcPath: instrumentation/cassandra/cassandra-4.0 + scope: + name: io.opentelemetry.cassandra-4.0 target_versions: javaagent: - com.datastax.oss:java-driver-core:[4.0,4.4) - name: cassandra-4.4 srcPath: instrumentation/cassandra/cassandra-4.4 + scope: + name: io.opentelemetry.cassandra-4.4 target_versions: javaagent: - com.datastax.oss:java-driver-core:[4.4,] @@ -203,6 +266,8 @@ cassandra: - com.datastax.oss:java-driver-core:4.4.0 - name: cassandra-3.0 srcPath: instrumentation/cassandra/cassandra-3.0 + scope: + name: io.opentelemetry.cassandra-3.0 target_versions: javaagent: - com.datastax.cassandra:cassandra-driver-core:[3.0,4.0) @@ -212,6 +277,8 @@ clickhouse: description: Instruments the V1 ClickHouseClient, providing database client spans and metrics. srcPath: instrumentation/clickhouse-client-0.5 + scope: + name: io.opentelemetry.clickhouse-client-0.5 target_versions: javaagent: - com.clickhouse.client:clickhouse-client:[0.5.0,) @@ -219,26 +286,36 @@ couchbase: instrumentations: - name: couchbase-3.1.6 srcPath: instrumentation/couchbase/couchbase-3.1.6 + scope: + name: io.opentelemetry.couchbase-3.1.6 target_versions: javaagent: - com.couchbase.client:java-client:[3.1.6,3.2.0) - name: couchbase-2.6 srcPath: instrumentation/couchbase/couchbase-2.6 + scope: + name: io.opentelemetry.couchbase-2.6 target_versions: javaagent: - com.couchbase.client:java-client:[2.6.0,3) - name: couchbase-2.0 srcPath: instrumentation/couchbase/couchbase-2.0 + scope: + name: io.opentelemetry.couchbase-2.0 target_versions: javaagent: - com.couchbase.client:java-client:[2,3) - name: couchbase-3.2 srcPath: instrumentation/couchbase/couchbase-3.2 + scope: + name: io.opentelemetry.couchbase-3.2 target_versions: javaagent: - com.couchbase.client:java-client:[3.2.0,) - name: couchbase-3.1 srcPath: instrumentation/couchbase/couchbase-3.1 + scope: + name: io.opentelemetry.couchbase-3.1 target_versions: javaagent: - com.couchbase.client:java-client:[3.1,3.1.6) @@ -246,11 +323,15 @@ dropwizard: instrumentations: - name: dropwizard-metrics-4.0 srcPath: instrumentation/dropwizard/dropwizard-metrics-4.0 + scope: + name: io.opentelemetry.dropwizard-metrics-4.0 target_versions: javaagent: - io.dropwizard.metrics:metrics-core:[4.0.0,) - name: dropwizard-views-0.7 srcPath: instrumentation/dropwizard/dropwizard-views-0.7 + scope: + name: io.opentelemetry.dropwizard-views-0.7 target_versions: javaagent: - io.dropwizard:dropwizard-views:(,3.0.0) @@ -258,23 +339,31 @@ elasticsearch: instrumentations: - name: elasticsearch-rest-6.4 srcPath: instrumentation/elasticsearch/elasticsearch-rest-6.4 + scope: + name: io.opentelemetry.elasticsearch-rest-6.4 target_versions: javaagent: - org.elasticsearch.client:elasticsearch-rest-client:[6.4,7.0) - name: elasticsearch-api-client-7.16 srcPath: instrumentation/elasticsearch/elasticsearch-api-client-7.16 + scope: + name: io.opentelemetry.elasticsearch-api-client-7.16 target_versions: javaagent: - co.elastic.clients:elasticsearch-java:[7.16,7.17.20) - co.elastic.clients:elasticsearch-java:[8.0.0,8.10) - name: elasticsearch-rest-5.0 srcPath: instrumentation/elasticsearch/elasticsearch-rest-5.0 + scope: + name: io.opentelemetry.elasticsearch-rest-5.0 target_versions: javaagent: - org.elasticsearch.client:rest:[5.0,6.4) - org.elasticsearch.client:elasticsearch-rest-client:[5.0,6.4) - name: elasticsearch-rest-7.0 srcPath: instrumentation/elasticsearch/elasticsearch-rest-7.0 + scope: + name: io.opentelemetry.elasticsearch-rest-7.0 target_versions: javaagent: - org.elasticsearch.client:elasticsearch-rest-client:[7.0,) @@ -282,18 +371,24 @@ elasticsearch: - org.elasticsearch.client:elasticsearch-rest-client:7.0.0 - name: elasticsearch-transport-6.0 srcPath: instrumentation/elasticsearch/elasticsearch-transport-6.0 + scope: + name: io.opentelemetry.elasticsearch-transport-6.0 target_versions: javaagent: - org.elasticsearch:elasticsearch:[6.0.0,8.0.0) - org.elasticsearch.client:transport:[6.0.0,) - name: elasticsearch-transport-5.0 srcPath: instrumentation/elasticsearch/elasticsearch-transport-5.0 + scope: + name: io.opentelemetry.elasticsearch-transport-5.0 target_versions: javaagent: - org.elasticsearch.client:transport:[5.0.0,5.3.0) - org.elasticsearch:elasticsearch:[5.0.0,5.3.0) - name: elasticsearch-transport-5.3 srcPath: instrumentation/elasticsearch/elasticsearch-transport-5.3 + scope: + name: io.opentelemetry.elasticsearch-transport-5.3 target_versions: javaagent: - org.elasticsearch.client:transport:[5.3.0,6.0.0) @@ -302,18 +397,17 @@ executors: instrumentations: - name: executors srcPath: instrumentation/executors + scope: + name: io.opentelemetry.executors target_versions: - javaagent: [] -external: - instrumentations: - - name: external-annotations - srcPath: instrumentation/external-annotations - target_versions: - javaagent: [] + javaagent: + - Java 8+ finagle: instrumentations: - name: finagle-http-23.11 srcPath: instrumentation/finagle-http-23.11 + scope: + name: io.opentelemetry.finagle-http-23.11 target_versions: javaagent: - com.twitter:finagle-http_2.13:[23.11.0,] @@ -322,6 +416,8 @@ finatra: instrumentations: - name: finatra-2.9 srcPath: instrumentation/finatra-2.9 + scope: + name: io.opentelemetry.finatra-2.9 target_versions: javaagent: - com.twitter:finatra-http_2.11:[2.9.0,] @@ -330,6 +426,8 @@ geode: instrumentations: - name: geode-1.4 srcPath: instrumentation/geode-1.4 + scope: + name: io.opentelemetry.geode-1.4 target_versions: javaagent: - org.apache.geode:geode-core:[1.4.0,) @@ -337,6 +435,8 @@ google: instrumentations: - name: google-http-client-1.19 srcPath: instrumentation/google-http-client-1.19 + scope: + name: io.opentelemetry.google-http-client-1.19 target_versions: javaagent: - com.google.http-client:google-http-client:[1.19.0,) @@ -344,6 +444,8 @@ grails: instrumentations: - name: grails-3.0 srcPath: instrumentation/grails-3.0 + scope: + name: io.opentelemetry.grails-3.0 target_versions: javaagent: - org.grails:grails-web-url-mappings:[3.0,) @@ -351,6 +453,8 @@ graphql: instrumentations: - name: graphql-java-12.0 srcPath: instrumentation/graphql-java/graphql-java-12.0 + scope: + name: io.opentelemetry.graphql-java-12.0 target_versions: javaagent: - com.graphql-java:graphql-java:[12,20) @@ -358,6 +462,9 @@ graphql: - com.graphql-java:graphql-java:[12.0,19.+) - name: graphql-java-20.0 srcPath: instrumentation/graphql-java/graphql-java-20.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.graphql-java-20.0 target_versions: javaagent: - com.graphql-java:graphql-java:[20,) @@ -367,6 +474,8 @@ grizzly: instrumentations: - name: grizzly-2.3 srcPath: instrumentation/grizzly-2.3 + scope: + name: io.opentelemetry.grizzly-2.3 target_versions: javaagent: - org.glassfish.grizzly:grizzly-http:[2.3,) @@ -374,6 +483,8 @@ grpc: instrumentations: - name: grpc-1.6 srcPath: instrumentation/grpc-1.6 + scope: + name: io.opentelemetry.grpc-1.6 target_versions: javaagent: - io.grpc:grpc-core:[1.6.0,) @@ -383,6 +494,8 @@ guava: instrumentations: - name: guava-10.0 srcPath: instrumentation/guava-10.0 + scope: + name: io.opentelemetry.guava-10.0 target_versions: javaagent: - com.google.guava:guava:[10.0,] @@ -392,6 +505,8 @@ gwt: instrumentations: - name: gwt-2.0 srcPath: instrumentation/gwt-2.0 + scope: + name: io.opentelemetry.gwt-2.0 target_versions: javaagent: - com.google.gwt:gwt-servlet:[2.0.0,) @@ -400,26 +515,37 @@ hibernate: instrumentations: - name: hibernate-4.0 srcPath: instrumentation/hibernate/hibernate-4.0 + scope: + name: io.opentelemetry.hibernate-4.0 target_versions: javaagent: - org.hibernate:hibernate-core:[4.0.0.Final,6) - name: hibernate-procedure-call-4.3 srcPath: instrumentation/hibernate/hibernate-procedure-call-4.3 + scope: + name: io.opentelemetry.hibernate-procedure-call-4.3 target_versions: javaagent: - org.hibernate:hibernate-core:[4.3.0.Final,) - name: hibernate-3.3 srcPath: instrumentation/hibernate/hibernate-3.3 + scope: + name: io.opentelemetry.hibernate-3.3 target_versions: javaagent: - org.hibernate:hibernate-core:[3.3.0.GA,4.0.0.Final) - name: hibernate-6.0 srcPath: instrumentation/hibernate/hibernate-6.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.hibernate-6.0 target_versions: javaagent: - org.hibernate:hibernate-core:[6.0.0.Final,) - name: hibernate-reactive-1.0 srcPath: instrumentation/hibernate/hibernate-reactive-1.0 + scope: + name: io.opentelemetry.hibernate-reactive-1.0 target_versions: javaagent: - org.hibernate.reactive:hibernate-reactive-core:(,) @@ -427,6 +553,8 @@ hikaricp: instrumentations: - name: hikaricp-3.0 srcPath: instrumentation/hikaricp-3.0 + scope: + name: io.opentelemetry.hikaricp-3.0 target_versions: javaagent: - com.zaxxer:HikariCP:[3.0.0,) @@ -436,12 +564,17 @@ http: instrumentations: - name: http-url-connection srcPath: instrumentation/http-url-connection + scope: + name: io.opentelemetry.http-url-connection target_versions: - javaagent: [] + javaagent: + - Java 8+ hystrix: instrumentations: - name: hystrix-1.4 srcPath: instrumentation/hystrix-1.4 + scope: + name: io.opentelemetry.hystrix-1.4 target_versions: javaagent: - com.netflix.hystrix:hystrix-core:[1.4.0,) @@ -449,60 +582,37 @@ influxdb: instrumentations: - name: influxdb-2.4 srcPath: instrumentation/influxdb-2.4 + scope: + name: io.opentelemetry.influxdb-2.4 target_versions: javaagent: - org.influxdb:influxdb-java:[2.4,) -internal: - instrumentations: - - name: internal-application-logger - srcPath: instrumentation/internal/internal-application-logger - target_versions: - javaagent: - - org.springframework.boot:spring-boot:[1.2.0,) - - org.slf4j:slf4j-api:[1.4.0,) - - name: internal-class-loader - srcPath: instrumentation/internal/internal-class-loader - target_versions: - javaagent: [] - - name: internal-lambda-java9 - srcPath: instrumentation/internal/internal-lambda-java9 - target_versions: {} - - name: internal-reflection - srcPath: instrumentation/internal/internal-reflection - target_versions: - javaagent: [] - - name: internal-lambda - srcPath: instrumentation/internal/internal-lambda - target_versions: - javaagent: [] - - name: internal-eclipse-osgi-3.6 - srcPath: instrumentation/internal/internal-eclipse-osgi-3.6 - target_versions: - javaagent: [] - - name: internal-url-class-loader - srcPath: instrumentation/internal/internal-url-class-loader - target_versions: - javaagent: [] java: instrumentations: - - name: java-util-logging - srcPath: instrumentation/java-util-logging - target_versions: - javaagent: [] - name: java-http-server srcPath: instrumentation/java-http-server + scope: + name: io.opentelemetry.java-http-server target_versions: - javaagent: [] + javaagent: + - Java 8+ library: [] - name: java-http-client srcPath: instrumentation/java-http-client + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.java-http-client target_versions: - javaagent: [] + javaagent: + - Java 11+ library: [] javalin: instrumentations: - name: javalin-5.0 srcPath: instrumentation/javalin-5.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.javalin-5.0 target_versions: javaagent: - io.javalin:javalin:[5.0.0,) @@ -510,53 +620,75 @@ jaxrs: instrumentations: - name: jaxrs-2.0-cxf-3.2 srcPath: instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-cxf-3.2 + scope: + name: io.opentelemetry.jaxrs-2.0-cxf-3.2 target_versions: javaagent: - org.apache.tomee:openejb-cxf-rs:(8,) - org.apache.cxf:cxf-rt-frontend-jaxrs:[3.2,4) - name: jaxrs-3.0-annotations srcPath: instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations + scope: + name: io.opentelemetry.jaxrs-3.0-annotations target_versions: javaagent: - jakarta.ws.rs:jakarta.ws.rs-api:[3.0.0,) - name: jaxrs-2.0-jersey-2.0 srcPath: instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-jersey-2.0 + scope: + name: io.opentelemetry.jaxrs-2.0-jersey-2.0 target_versions: javaagent: - org.glassfish.jersey.core:jersey-server:[2.0,3.0.0) - org.glassfish.jersey.containers:jersey-container-servlet:[2.0,3.0.0) - name: jaxrs-3.0-jersey-3.0 srcPath: instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-jersey-3.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.jaxrs-3.0-jersey-3.0 target_versions: javaagent: - org.glassfish.jersey.core:jersey-server:[3.0.0,) - name: jaxrs-2.0-resteasy-3.1 srcPath: instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-resteasy-3.1 + scope: + name: io.opentelemetry.jaxrs-2.0-resteasy-3.1 target_versions: javaagent: - org.jboss.resteasy:resteasy-jaxrs:[3.1.0.Final,3.5.0.Final) - org.jboss.resteasy:resteasy-core:[4.0.0.Final,6) - name: jaxrs-2.0-resteasy-3.0 srcPath: instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-resteasy-3.0 + scope: + name: io.opentelemetry.jaxrs-2.0-resteasy-3.0 target_versions: javaagent: - org.jboss.resteasy:resteasy-jaxrs:[3.0.0.Final,3.1.0.Final) - org.jboss.resteasy:resteasy-jaxrs:[3.5.0.Final,4) - name: jaxrs-2.0-annotations srcPath: instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations + scope: + name: io.opentelemetry.jaxrs-2.0-annotations target_versions: javaagent: - javax.ws.rs:javax.ws.rs-api:[,] - name: jaxrs-client-1.1 srcPath: instrumentation/jaxrs-client/jaxrs-client-1.1 + scope: + name: io.opentelemetry.jaxrs-client-1.1 target_versions: {} - name: jaxrs-3.0-resteasy-6.0 srcPath: instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-resteasy-6.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.jaxrs-3.0-resteasy-6.0 target_versions: javaagent: - org.jboss.resteasy:resteasy-core:[6.0.0.Final,) - name: jaxrs-1.0 srcPath: instrumentation/jaxrs/jaxrs-1.0 + scope: + name: io.opentelemetry.jaxrs-1.0 target_versions: javaagent: - javax.ws.rs:jsr311-api:[0.5,) @@ -564,32 +696,46 @@ jaxws: instrumentations: - name: jaxws-jws-api-1.1 srcPath: instrumentation/jaxws/jaxws-jws-api-1.1 + scope: + name: io.opentelemetry.jaxws-jws-api-1.1 target_versions: javaagent: - javax.jws:javax.jws-api:[1.1,] - name: jaxws-2.0 srcPath: instrumentation/jaxws/jaxws-2.0 + scope: + name: io.opentelemetry.jaxws-2.0 target_versions: javaagent: - javax.xml.ws:jaxws-api:[2.0,] - name: jaxws-2.0-metro-2.2 srcPath: instrumentation/jaxws/jaxws-2.0-metro-2.2 + scope: + name: io.opentelemetry.jaxws-2.0-metro-2.2 target_versions: {} - name: jaxws-cxf-3.0 srcPath: instrumentation/jaxws/jaxws-cxf-3.0 + scope: + name: io.opentelemetry.jaxws-cxf-3.0 target_versions: javaagent: - org.apache.cxf:cxf-rt-frontend-jaxws:[3.0.0,) - name: jaxws-2.0-axis2-1.6 srcPath: instrumentation/jaxws/jaxws-2.0-axis2-1.6 + scope: + name: io.opentelemetry.jaxws-2.0-axis2-1.6 target_versions: javaagent: - org.apache.axis2:axis2-jaxws:[1.6.0,) - name: jaxws-2.0-cxf-3.0 srcPath: instrumentation/jaxws/jaxws-2.0-cxf-3.0 + scope: + name: io.opentelemetry.jaxws-2.0-cxf-3.0 target_versions: {} - name: jaxws-metro-2.2 srcPath: instrumentation/jaxws/jaxws-metro-2.2 + scope: + name: io.opentelemetry.jaxws-metro-2.2 target_versions: javaagent: - com.sun.xml.ws:jaxws-rt:[2.2.0.1,) @@ -597,11 +743,15 @@ jboss: instrumentations: - name: jboss-logmanager-appender-1.1 srcPath: instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1 + scope: + name: io.opentelemetry.jboss-logmanager-appender-1.1 target_versions: javaagent: - org.jboss.logmanager:jboss-logmanager:[1.1.0.GA,) - name: jboss-logmanager-mdc-1.1 srcPath: instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1 + scope: + name: io.opentelemetry.jboss-logmanager-mdc-1.1 target_versions: javaagent: - org.jboss.logmanager:jboss-logmanager:[1.1.0.GA,) @@ -609,23 +759,32 @@ jdbc: instrumentations: - name: jdbc srcPath: instrumentation/jdbc + scope: + name: io.opentelemetry.jdbc target_versions: - javaagent: [] + javaagent: + - Java 8+ library: [] jedis: instrumentations: - name: jedis-1.4 srcPath: instrumentation/jedis/jedis-1.4 + scope: + name: io.opentelemetry.jedis-1.4 target_versions: javaagent: - redis.clients:jedis:[1.4.0,3.0.0) - name: jedis-4.0 srcPath: instrumentation/jedis/jedis-4.0 + scope: + name: io.opentelemetry.jedis-4.0 target_versions: javaagent: - redis.clients:jedis:[4.0.0-beta1,) - name: jedis-3.0 srcPath: instrumentation/jedis/jedis-3.0 + scope: + name: io.opentelemetry.jedis-3.0 target_versions: javaagent: - redis.clients:jedis:[3.0.0,4) @@ -633,6 +792,9 @@ jetty: instrumentations: - name: jetty-httpclient-12.0 srcPath: instrumentation/jetty-httpclient/jetty-httpclient-12.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.jetty-httpclient-12.0 target_versions: javaagent: - org.eclipse.jetty:jetty-client:[12,) @@ -640,16 +802,23 @@ jetty: - org.eclipse.jetty:jetty-client:12.0.0 - name: jetty-12.0 srcPath: instrumentation/jetty/jetty-12.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.jetty-12.0 target_versions: javaagent: - org.eclipse.jetty:jetty-server:[12,) - name: jetty-8.0 srcPath: instrumentation/jetty/jetty-8.0 + scope: + name: io.opentelemetry.jetty-8.0 target_versions: javaagent: - org.eclipse.jetty:jetty-server:[8.0.0.v20110901,11) - name: jetty-httpclient-9.2 srcPath: instrumentation/jetty-httpclient/jetty-httpclient-9.2 + scope: + name: io.opentelemetry.jetty-httpclient-9.2 target_versions: javaagent: - org.eclipse.jetty:jetty-client:[9.2,10) @@ -657,6 +826,9 @@ jetty: - org.eclipse.jetty:jetty-client:[9.2.0.v20140526,9.+) - name: jetty-11.0 srcPath: instrumentation/jetty/jetty-11.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.jetty-11.0 target_versions: javaagent: - org.eclipse.jetty:jetty-server:[11, 12) @@ -664,11 +836,16 @@ jms: instrumentations: - name: jms-3.0 srcPath: instrumentation/jms/jms-3.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.jms-3.0 target_versions: javaagent: - jakarta.jms:jakarta.jms-api:[3.0.0,) - name: jms-1.1 srcPath: instrumentation/jms/jms-1.1 + scope: + name: io.opentelemetry.jms-1.1 target_versions: javaagent: - javax.jms:javax.jms-api:(,) @@ -678,6 +855,8 @@ jmx: instrumentations: - name: jmx-metrics srcPath: instrumentation/jmx-metrics + scope: + name: io.opentelemetry.jmx-metrics target_versions: javaagent: [] library: [] @@ -685,6 +864,8 @@ jodd: instrumentations: - name: jodd-http-4.2 srcPath: instrumentation/jodd-http-4.2 + scope: + name: io.opentelemetry.jodd-http-4.2 target_versions: javaagent: - org.jodd:jodd-http:[4.2.0,) @@ -692,21 +873,31 @@ jsf: instrumentations: - name: jsf-myfaces-3.0 srcPath: instrumentation/jsf/jsf-myfaces-3.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.jsf-myfaces-3.0 target_versions: javaagent: - org.apache.myfaces.core:myfaces-impl:[3,) - name: jsf-mojarra-3.0 srcPath: instrumentation/jsf/jsf-mojarra-3.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.jsf-mojarra-3.0 target_versions: javaagent: - org.glassfish:jakarta.faces:[3,) - name: jsf-myfaces-1.2 srcPath: instrumentation/jsf/jsf-myfaces-1.2 + scope: + name: io.opentelemetry.jsf-myfaces-1.2 target_versions: javaagent: - org.apache.myfaces.core:myfaces-impl:[1.2,3) - name: jsf-mojarra-1.2 srcPath: instrumentation/jsf/jsf-mojarra-1.2 + scope: + name: io.opentelemetry.jsf-mojarra-1.2 target_versions: javaagent: - com.sun.faces:jsf-impl:[2.1,2.2) @@ -718,6 +909,8 @@ jsp: instrumentations: - name: jsp-2.3 srcPath: instrumentation/jsp-2.3 + scope: + name: io.opentelemetry.jsp-2.3 target_versions: javaagent: - org.apache.tomcat:tomcat-jasper:[7.0.19,10) @@ -725,16 +918,22 @@ kafka: instrumentations: - name: kafka-streams-0.11 srcPath: instrumentation/kafka/kafka-streams-0.11 + scope: + name: io.opentelemetry.kafka-streams-0.11 target_versions: javaagent: - org.apache.kafka:kafka-streams:[0.11.0.0,) - name: kafka-clients-2.6 srcPath: instrumentation/kafka/kafka-clients/kafka-clients-2.6 + scope: + name: io.opentelemetry.kafka-clients-2.6 target_versions: library: - org.apache.kafka:kafka-clients:2.6.0 - name: kafka-clients-0.11 srcPath: instrumentation/kafka/kafka-clients/kafka-clients-0.11 + scope: + name: io.opentelemetry.kafka-clients-0.11 target_versions: javaagent: - org.apache.kafka:kafka-clients:[0.11.0.0,) @@ -742,6 +941,8 @@ kotlinx: instrumentations: - name: kotlinx-coroutines srcPath: instrumentation/kotlinx-coroutines + scope: + name: io.opentelemetry.kotlinx-coroutines target_versions: javaagent: - org.jetbrains.kotlinx:kotlinx-coroutines-core:[1.3.0,1.3.8) @@ -749,12 +950,16 @@ kotlinx: - org.jetbrains.kotlinx:kotlinx-coroutines-core:[1.0.0,1.3.8) - name: kotlinx-coroutines-1.0 srcPath: instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0 + scope: + name: io.opentelemetry.kotlinx-coroutines-1.0 target_versions: javaagent: - org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:[1.3.9,) - org.jetbrains.kotlinx:kotlinx-coroutines-core:[1.0.0,1.3.8) - name: kotlinx-coroutines-flow-1.3 srcPath: instrumentation/kotlinx-coroutines/kotlinx-coroutines-flow-1.3 + scope: + name: io.opentelemetry.kotlinx-coroutines-flow-1.3 target_versions: javaagent: - org.jetbrains.kotlinx:kotlinx-coroutines-core:[1.3.0,1.3.8) @@ -763,6 +968,8 @@ ktor: instrumentations: - name: ktor-2.0 srcPath: instrumentation/ktor/ktor-2.0 + scope: + name: io.opentelemetry.ktor-2.0 target_versions: javaagent: - io.ktor:ktor-client-core:[2.0.0,3.0.0) @@ -772,6 +979,8 @@ ktor: - io.ktor:ktor-server-core:[2.0.0,2.+) - name: ktor-3.0 srcPath: instrumentation/ktor/ktor-3.0 + scope: + name: io.opentelemetry.ktor-3.0 target_versions: javaagent: - io.ktor:ktor-server-core:[3.0.0,) @@ -781,6 +990,8 @@ ktor: - io.ktor:ktor-client-core:3.0.0 - name: ktor-1.0 srcPath: instrumentation/ktor/ktor-1.0 + scope: + name: io.opentelemetry.ktor-1.0 target_versions: library: - io.ktor:ktor-server-core:[1.0.0,1.+) @@ -788,6 +999,8 @@ kubernetes: instrumentations: - name: kubernetes-client-7.0 srcPath: instrumentation/kubernetes-client-7.0 + scope: + name: io.opentelemetry.kubernetes-client-7.0 target_versions: javaagent: - io.kubernetes:client-java-api:[7.0.0,) @@ -795,6 +1008,8 @@ lettuce: instrumentations: - name: lettuce-5.1 srcPath: instrumentation/lettuce/lettuce-5.1 + scope: + name: io.opentelemetry.lettuce-5.1 target_versions: javaagent: - io.lettuce:lettuce-core:[5.1.0.RELEASE,) @@ -802,11 +1017,15 @@ lettuce: - io.lettuce:lettuce-core:5.1.0.RELEASE - name: lettuce-5.0 srcPath: instrumentation/lettuce/lettuce-5.0 + scope: + name: io.opentelemetry.lettuce-5.0 target_versions: javaagent: - io.lettuce:lettuce-core:[5.0.0.RELEASE,5.1.0.RELEASE) - name: lettuce-4.0 srcPath: instrumentation/lettuce/lettuce-4.0 + scope: + name: io.opentelemetry.lettuce-4.0 target_versions: javaagent: - biz.paluch.redis:lettuce:[4.0.Final,) @@ -814,21 +1033,29 @@ liberty: instrumentations: - name: liberty-dispatcher-20.0 srcPath: instrumentation/liberty/liberty-dispatcher-20.0 + scope: + name: io.opentelemetry.liberty-dispatcher-20.0 target_versions: javaagent: [] - name: liberty-20.0 srcPath: instrumentation/liberty/liberty-20.0 + scope: + name: io.opentelemetry.liberty-20.0 target_versions: javaagent: [] log4j: instrumentations: - name: log4j-context-data-2.7 srcPath: instrumentation/log4j/log4j-context-data/log4j-context-data-2.7 + scope: + name: io.opentelemetry.log4j-context-data-2.7 target_versions: javaagent: - org.apache.logging.log4j:log4j-core:[2.7,2.17.0) - name: log4j-appender-2.17 srcPath: instrumentation/log4j/log4j-appender-2.17 + scope: + name: io.opentelemetry.log4j-appender-2.17 target_versions: javaagent: - org.apache.logging.log4j:log4j-core:[2.0,) @@ -836,16 +1063,22 @@ log4j: - org.apache.logging.log4j:log4j-core:2.17.0 - name: log4j-appender-1.2 srcPath: instrumentation/log4j/log4j-appender-1.2 + scope: + name: io.opentelemetry.log4j-appender-1.2 target_versions: javaagent: - log4j:log4j:[1.2,) - name: log4j-mdc-1.2 srcPath: instrumentation/log4j/log4j-mdc-1.2 + scope: + name: io.opentelemetry.log4j-mdc-1.2 target_versions: javaagent: - log4j:log4j:[1.2,) - name: log4j-context-data-2.17 srcPath: instrumentation/log4j/log4j-context-data/log4j-context-data-2.17 + scope: + name: io.opentelemetry.log4j-context-data-2.17 target_versions: javaagent: - org.apache.logging.log4j:log4j-core:[2.17.0,) @@ -853,6 +1086,8 @@ logback: instrumentations: - name: logback-mdc-1.0 srcPath: instrumentation/logback/logback-mdc-1.0 + scope: + name: io.opentelemetry.logback-mdc-1.0 target_versions: javaagent: - ch.qos.logback:logback-classic:[1.0.0,1.2.3] @@ -861,6 +1096,8 @@ logback: - org.slf4j:slf4j-api:1.6.4 - name: logback-appender-1.0 srcPath: instrumentation/logback/logback-appender-1.0 + scope: + name: io.opentelemetry.logback-appender-1.0 target_versions: javaagent: - ch.qos.logback:logback-classic:[0.9.16,) @@ -868,16 +1105,12 @@ logback: - net.logstash.logback:logstash-logback-encoder:3.0 - org.slf4j:slf4j-api:2.0.0 - ch.qos.logback:logback-classic:1.3.0 -methods: - instrumentations: - - name: methods - srcPath: instrumentation/methods - target_versions: - javaagent: [] micrometer: instrumentations: - name: micrometer-1.5 srcPath: instrumentation/micrometer/micrometer-1.5 + scope: + name: io.opentelemetry.micrometer-1.5 target_versions: javaagent: - io.micrometer:micrometer-core:[1.5.0,) @@ -887,11 +1120,15 @@ mongo: instrumentations: - name: mongo-4.0 srcPath: instrumentation/mongo/mongo-4.0 + scope: + name: io.opentelemetry.mongo-4.0 target_versions: javaagent: - org.mongodb:mongodb-driver-core:[4.0,) - name: mongo-3.1 srcPath: instrumentation/mongo/mongo-3.1 + scope: + name: io.opentelemetry.mongo-3.1 target_versions: javaagent: - org.mongodb:mongo-java-driver:[3.1,) @@ -899,12 +1136,16 @@ mongo: - org.mongodb:mongo-java-driver:3.1.0 - name: mongo-3.7 srcPath: instrumentation/mongo/mongo-3.7 + scope: + name: io.opentelemetry.mongo-3.7 target_versions: javaagent: - org.mongodb:mongodb-driver-core:[3.7, 4.0) - org.mongodb:mongo-java-driver:[3.7, 4.0) - name: mongo-async-3.3 srcPath: instrumentation/mongo/mongo-async-3.3 + scope: + name: io.opentelemetry.mongo-async-3.3 target_versions: javaagent: - org.mongodb:mongodb-driver-async:[3.3,) @@ -912,6 +1153,8 @@ mybatis: instrumentations: - name: mybatis-3.2 srcPath: instrumentation/mybatis-3.2 + scope: + name: io.opentelemetry.mybatis-3.2 target_versions: javaagent: - org.mybatis:mybatis:[3.2.0,) @@ -919,17 +1162,23 @@ netty: instrumentations: - name: netty-3.8 srcPath: instrumentation/netty/netty-3.8 + scope: + name: io.opentelemetry.netty-3.8 target_versions: javaagent: - io.netty:netty:[3.8.0.Final,4) - name: netty-4.0 srcPath: instrumentation/netty/netty-4.0 + scope: + name: io.opentelemetry.netty-4.0 target_versions: javaagent: - io.netty:netty-all:[4.0.0.Final,4.1.0.Final) - io.netty:netty-codec-http:[4.0.0.Final,4.1.0.Final) - name: netty-4.1 srcPath: instrumentation/netty/netty-4.1 + scope: + name: io.opentelemetry.netty-4.1 target_versions: javaagent: - io.netty:netty-codec-http:[4.1.0.Final,5.0.0) @@ -940,6 +1189,8 @@ okhttp: instrumentations: - name: okhttp-3.0 srcPath: instrumentation/okhttp/okhttp-3.0 + scope: + name: io.opentelemetry.okhttp-3.0 target_versions: javaagent: - com.squareup.okhttp3:okhttp:[3.0,) @@ -947,6 +1198,8 @@ okhttp: - com.squareup.okhttp3:okhttp:3.0.0 - name: okhttp-2.2 srcPath: instrumentation/okhttp/okhttp-2.2 + scope: + name: io.opentelemetry.okhttp-2.2 target_versions: javaagent: - com.squareup.okhttp:okhttp:[2.2,3) @@ -954,83 +1207,122 @@ opensearch: instrumentations: - name: opensearch-rest-1.0 srcPath: instrumentation/opensearch/opensearch-rest-1.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.opensearch-rest-1.0 target_versions: javaagent: - org.opensearch.client:opensearch-rest-client:[1.0,) - name: opensearch-java-2.0 srcPath: instrumentation/opensearch/opensearch-java-2.0 + scope: + name: io.opentelemetry.opensearch-java-2.0 target_versions: {} opentelemetry: instrumentations: - name: opentelemetry-api-1.15 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.15 + scope: + name: io.opentelemetry.opentelemetry-api-1.15 target_versions: javaagent: [] - name: opentelemetry-api-1.10 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.10 + scope: + name: io.opentelemetry.opentelemetry-api-1.10 target_versions: javaagent: [] - name: opentelemetry-api-1.27 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.27 + scope: + name: io.opentelemetry.opentelemetry-api-1.27 target_versions: javaagent: [] - name: opentelemetry-extension-annotations-1.0 srcPath: instrumentation/opentelemetry-extension-annotations-1.0 + scope: + name: io.opentelemetry.opentelemetry-extension-annotations-1.0 target_versions: javaagent: - io.opentelemetry:opentelemetry-extension-annotations:[0.16.0,) - name: opentelemetry-instrumentation-annotations-1.16 srcPath: instrumentation/opentelemetry-instrumentation-annotations-1.16 + scope: + name: io.opentelemetry.opentelemetry-instrumentation-annotations-1.16 target_versions: javaagent: - io.opentelemetry:opentelemetry-instrumentation-annotations:(,) - name: opentelemetry-instrumentation-api srcPath: instrumentation/opentelemetry-instrumentation-api + scope: + name: io.opentelemetry.opentelemetry-instrumentation-api target_versions: javaagent: - io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:[1.14.0-alpha,) - name: opentelemetry-api-1.37 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.37 + scope: + name: io.opentelemetry.opentelemetry-api-1.37 target_versions: javaagent: [] - name: opentelemetry-api-1.38 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.38 + scope: + name: io.opentelemetry.opentelemetry-api-1.38 target_versions: javaagent: [] - name: opentelemetry-api-1.31 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.31 + scope: + name: io.opentelemetry.opentelemetry-api-1.31 target_versions: javaagent: [] - name: opentelemetry-api-1.32 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.32 + scope: + name: io.opentelemetry.opentelemetry-api-1.32 target_versions: javaagent: [] - name: opentelemetry-api-1.42 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.42 + scope: + name: io.opentelemetry.opentelemetry-api-1.42 target_versions: javaagent: [] - name: opentelemetry-api-1.40 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.40 + scope: + name: io.opentelemetry.opentelemetry-api-1.40 target_versions: javaagent: [] - name: opentelemetry-api-1.47 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.47 + scope: + name: io.opentelemetry.opentelemetry-api-1.47 target_versions: javaagent: [] - name: opentelemetry srcPath: instrumentation/wicket-8.0/common-testing/src/main/java/io/opentelemetry + scope: + name: io.opentelemetry.opentelemetry target_versions: {} - name: opentelemetry-extension-kotlin-1.0 srcPath: instrumentation/opentelemetry-extension-kotlin-1.0 + scope: + name: io.opentelemetry.opentelemetry-extension-kotlin-1.0 target_versions: javaagent: - io.opentelemetry:opentelemetry-extension-kotlin:[0.17.0,) - name: opentelemetry-api-1.4 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.4 + scope: + name: io.opentelemetry.opentelemetry-api-1.4 target_versions: javaagent: [] - name: opentelemetry-api-1.0 srcPath: instrumentation/opentelemetry-api/opentelemetry-api-1.0 + scope: + name: io.opentelemetry.opentelemetry-api-1.0 target_versions: javaagent: - io.opentelemetry:opentelemetry-api:[0.17.0,) @@ -1038,6 +1330,8 @@ oracle: instrumentations: - name: oracle-ucp-11.2 srcPath: instrumentation/oracle-ucp-11.2 + scope: + name: io.opentelemetry.oracle-ucp-11.2 target_versions: javaagent: - com.oracle.database.jdbc:ucp:[,) @@ -1048,6 +1342,8 @@ oshi: instrumentations: - name: oshi srcPath: instrumentation/oshi + scope: + name: io.opentelemetry.oshi target_versions: javaagent: - com.github.oshi:oshi-core:[5.3.1,) @@ -1057,12 +1353,16 @@ payara: instrumentations: - name: payara srcPath: instrumentation/payara + scope: + name: io.opentelemetry.payara target_versions: javaagent: [] pekko: instrumentations: - name: pekko-actor-1.0 srcPath: instrumentation/pekko/pekko-actor-1.0 + scope: + name: io.opentelemetry.pekko-actor-1.0 target_versions: javaagent: - org.apache.pekko:pekko-actor_3:[1.0,) @@ -1070,6 +1370,8 @@ pekko: - org.apache.pekko:pekko-actor_2.13:[1.0,) - name: pekko-http-1.0 srcPath: instrumentation/pekko/pekko-http-1.0 + scope: + name: io.opentelemetry.pekko-http-1.0 target_versions: javaagent: - com.softwaremill.sttp.tapir:tapir-pekko-http-server_3:[1.7,) @@ -1082,12 +1384,16 @@ play: instrumentations: - name: play-ws-1.0 srcPath: instrumentation/play/play-ws/play-ws-1.0 + scope: + name: io.opentelemetry.play-ws-1.0 target_versions: javaagent: - com.typesafe.play:play-ahc-ws-standalone_2.12:[1.0.0,2.0.0) - com.typesafe.play:play-ahc-ws-standalone_2.11:[1.0.0,2.0.0) - name: play-mvc-2.6 srcPath: instrumentation/play/play-mvc/play-mvc-2.6 + scope: + name: io.opentelemetry.play-mvc-2.6 target_versions: javaagent: - com.typesafe.play:play_$scalaVersion:[2.6.0,) @@ -1095,11 +1401,15 @@ play: - com.typesafe.play:play_2.13:[2.6.0,) - name: play-mvc-2.4 srcPath: instrumentation/play/play-mvc/play-mvc-2.4 + scope: + name: io.opentelemetry.play-mvc-2.4 target_versions: javaagent: - com.typesafe.play:play_2.11:[2.4.0,2.6) - name: play-ws-2.0 srcPath: instrumentation/play/play-ws/play-ws-2.0 + scope: + name: io.opentelemetry.play-ws-2.0 target_versions: javaagent: - com.typesafe.play:play-ahc-ws-standalone_2.12:[2.0.0,2.1.0) @@ -1107,6 +1417,8 @@ play: - com.typesafe.play:play-ahc-ws-standalone_2.11:[2.0.0,] - name: play-ws-2.1 srcPath: instrumentation/play/play-ws/play-ws-2.1 + scope: + name: io.opentelemetry.play-ws-2.1 target_versions: javaagent: - com.typesafe.play:play-ahc-ws-standalone_2.13:[2.1.0,] @@ -1115,6 +1427,8 @@ powerjob: instrumentations: - name: powerjob-4.0 srcPath: instrumentation/powerjob-4.0 + scope: + name: io.opentelemetry.powerjob-4.0 target_versions: javaagent: - tech.powerjob:powerjob-worker:[4.0.0,) @@ -1122,6 +1436,8 @@ pulsar: instrumentations: - name: pulsar-2.8 srcPath: instrumentation/pulsar/pulsar-2.8 + scope: + name: io.opentelemetry.pulsar-2.8 target_versions: javaagent: - org.apache.pulsar:pulsar-client:[2.8.0,) @@ -1129,6 +1445,8 @@ quarkus: instrumentations: - name: quarkus-resteasy-reactive srcPath: instrumentation/quarkus-resteasy-reactive + scope: + name: io.opentelemetry.quarkus-resteasy-reactive target_versions: javaagent: - io.quarkus:quarkus-resteasy-reactive:(,3.9.0) @@ -1136,6 +1454,8 @@ quartz: instrumentations: - name: quartz-2.0 srcPath: instrumentation/quartz-2.0 + scope: + name: io.opentelemetry.quartz-2.0 target_versions: javaagent: - org.quartz-scheduler:quartz:[2.0.0,) @@ -1145,6 +1465,8 @@ r2dbc: instrumentations: - name: r2dbc-1.0 srcPath: instrumentation/r2dbc-1.0 + scope: + name: io.opentelemetry.r2dbc-1.0 target_versions: javaagent: - io.r2dbc:r2dbc-spi:[1.0.0.RELEASE,) @@ -1154,6 +1476,8 @@ rabbitmq: instrumentations: - name: rabbitmq-2.7 srcPath: instrumentation/rabbitmq-2.7 + scope: + name: io.opentelemetry.rabbitmq-2.7 target_versions: javaagent: - com.rabbitmq:amqp-client:[2.7.0,) @@ -1161,11 +1485,15 @@ ratpack: instrumentations: - name: ratpack-1.4 srcPath: instrumentation/ratpack/ratpack-1.4 + scope: + name: io.opentelemetry.ratpack-1.4 target_versions: javaagent: - io.ratpack:ratpack-core:[1.4.0,) - name: ratpack-1.7 srcPath: instrumentation/ratpack/ratpack-1.7 + scope: + name: io.opentelemetry.ratpack-1.7 target_versions: javaagent: - io.ratpack:ratpack-core:[1.7.0,) @@ -1175,27 +1503,37 @@ reactor: instrumentations: - name: reactor-kafka-1.0 srcPath: instrumentation/reactor/reactor-kafka-1.0 + scope: + name: io.opentelemetry.reactor-kafka-1.0 target_versions: javaagent: - io.projectreactor.kafka:reactor-kafka:[1.0.0,) - name: reactor-3.1 srcPath: instrumentation/reactor/reactor-3.1 + scope: + name: io.opentelemetry.reactor-3.1 target_versions: javaagent: - io.projectreactor:reactor-core:[3.1.0.RELEASE,) library: [] - name: reactor-3.4 srcPath: instrumentation/reactor/reactor-3.4 + scope: + name: io.opentelemetry.reactor-3.4 target_versions: javaagent: - io.projectreactor:reactor-core:[3.4.0,) - name: reactor-netty-0.9 srcPath: instrumentation/reactor/reactor-netty/reactor-netty-0.9 + scope: + name: io.opentelemetry.reactor-netty-0.9 target_versions: javaagent: - io.projectreactor.netty:reactor-netty:[0.8.2.RELEASE,1.0.0) - name: reactor-netty-1.0 srcPath: instrumentation/reactor/reactor-netty/reactor-netty-1.0 + scope: + name: io.opentelemetry.reactor-netty-1.0 target_versions: javaagent: - io.projectreactor.netty:reactor-netty-http:[1.0.0,) @@ -1204,6 +1542,8 @@ rediscala: instrumentations: - name: rediscala-1.8 srcPath: instrumentation/rediscala-1.8 + scope: + name: io.opentelemetry.rediscala-1.8 target_versions: javaagent: - com.github.Ma27:rediscala_2.11:[1.8.1,) @@ -1217,11 +1557,15 @@ redisson: instrumentations: - name: redisson-3.17 srcPath: instrumentation/redisson/redisson-3.17 + scope: + name: io.opentelemetry.redisson-3.17 target_versions: javaagent: - org.redisson:redisson:[3.17.0,) - name: redisson-3.0 srcPath: instrumentation/redisson/redisson-3.0 + scope: + name: io.opentelemetry.redisson-3.0 target_versions: javaagent: - org.redisson:redisson:[3.0.0,3.17.0) @@ -1229,12 +1573,16 @@ resources: instrumentations: - name: resources srcPath: instrumentation/resources + scope: + name: io.opentelemetry.resources target_versions: library: [] restlet: instrumentations: - name: restlet-1.1 srcPath: instrumentation/restlet/restlet-1.1 + scope: + name: io.opentelemetry.restlet-1.1 target_versions: javaagent: - org.restlet:org.restlet:[1.1.0, 1.2-M1) @@ -1243,6 +1591,8 @@ restlet: - com.noelios.restlet:com.noelios.restlet:1.1.5 - name: restlet-2.0 srcPath: instrumentation/restlet/restlet-2.0 + scope: + name: io.opentelemetry.restlet-2.0 target_versions: javaagent: - org.restlet.jse:org.restlet:[2.0.0,) @@ -1252,17 +1602,24 @@ rmi: instrumentations: - name: rmi srcPath: instrumentation/rmi + scope: + name: io.opentelemetry.rmi target_versions: - javaagent: [] + javaagent: + - Java 8+ rocketmq: instrumentations: - name: rocketmq-client-5.0 srcPath: instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0 + scope: + name: io.opentelemetry.rocketmq-client-5.0 target_versions: javaagent: - org.apache.rocketmq:rocketmq-client-java:[5.0.0,) - name: rocketmq-client-4.8 srcPath: instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8 + scope: + name: io.opentelemetry.rocketmq-client-4.8 target_versions: javaagent: - org.apache.rocketmq:rocketmq-client:[4.0.0,) @@ -1272,11 +1629,16 @@ runtime: instrumentations: - name: runtime-telemetry-java17 srcPath: instrumentation/runtime-telemetry/runtime-telemetry-java17 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.runtime-telemetry-java17 target_versions: javaagent: [] library: [] - name: runtime-telemetry-java8 srcPath: instrumentation/runtime-telemetry/runtime-telemetry-java8 + scope: + name: io.opentelemetry.runtime-telemetry-java8 target_versions: javaagent: [] library: [] @@ -1284,11 +1646,15 @@ rxjava: instrumentations: - name: rxjava-1.0 srcPath: instrumentation/rxjava/rxjava-1.0 + scope: + name: io.opentelemetry.rxjava-1.0 target_versions: library: - io.reactivex:rxjava:1.0.7 - name: rxjava-3.1.1 srcPath: instrumentation/rxjava/rxjava-3.1.1 + scope: + name: io.opentelemetry.rxjava-3.1.1 target_versions: javaagent: - io.reactivex.rxjava3:rxjava:[3.1.1,) @@ -1296,6 +1662,8 @@ rxjava: - io.reactivex.rxjava3:rxjava:3.1.1 - name: rxjava-2.0 srcPath: instrumentation/rxjava/rxjava-2.0 + scope: + name: io.opentelemetry.rxjava-2.0 target_versions: javaagent: - io.reactivex.rxjava2:rxjava:[2.0.6,) @@ -1303,6 +1671,8 @@ rxjava: - io.reactivex.rxjava2:rxjava:2.1.3 - name: rxjava-3.0 srcPath: instrumentation/rxjava/rxjava-3.0 + scope: + name: io.opentelemetry.rxjava-3.0 target_versions: javaagent: - io.reactivex.rxjava3:rxjava:[3.0.0,3.1.0] @@ -1312,6 +1682,8 @@ scala: instrumentations: - name: scala-fork-join-2.8 srcPath: instrumentation/scala-fork-join-2.8 + scope: + name: io.opentelemetry.scala-fork-join-2.8 target_versions: javaagent: - org.scala-lang:scala-library:[2.8.0,2.12.0) @@ -1319,16 +1691,22 @@ servlet: instrumentations: - name: servlet-5.0 srcPath: instrumentation/servlet/servlet-5.0 + scope: + name: io.opentelemetry.servlet-5.0 target_versions: javaagent: - jakarta.servlet:jakarta.servlet-api:[5.0.0,) - name: servlet-2.2 srcPath: instrumentation/servlet/servlet-2.2 + scope: + name: io.opentelemetry.servlet-2.2 target_versions: javaagent: - javax.servlet:servlet-api:[2.2, 3.0) - name: servlet-3.0 srcPath: instrumentation/servlet/servlet-3.0 + scope: + name: io.opentelemetry.servlet-3.0 target_versions: javaagent: - javax.servlet:javax.servlet-api:[3.0,) @@ -1336,6 +1714,8 @@ spark: instrumentations: - name: spark-2.3 srcPath: instrumentation/spark-2.3 + scope: + name: io.opentelemetry.spark-2.3 target_versions: javaagent: - com.sparkjava:spark-core:[2.3,) @@ -1343,30 +1723,43 @@ spring: instrumentations: - name: spring-rabbit-1.0 srcPath: instrumentation/spring/spring-rabbit-1.0 + scope: + name: io.opentelemetry.spring-rabbit-1.0 target_versions: javaagent: - org.springframework.amqp:spring-rabbit:(,) - name: spring-scheduling-3.1 srcPath: instrumentation/spring/spring-scheduling-3.1 + scope: + name: io.opentelemetry.spring-scheduling-3.1 target_versions: javaagent: - org.springframework:spring-context:[3.1.0.RELEASE,] - name: spring-boot-resources srcPath: instrumentation/spring/spring-boot-resources + scope: + name: io.opentelemetry.spring-boot-resources target_versions: javaagent: [] - name: spring-batch-3.0 srcPath: instrumentation/spring/spring-batch-3.0 + scope: + name: io.opentelemetry.spring-batch-3.0 target_versions: javaagent: - org.springframework.batch:spring-batch-core:[3.0.0.RELEASE,5) - name: spring-cloud-aws-3.0 srcPath: instrumentation/spring/spring-cloud-aws-3.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.spring-cloud-aws-3.0 target_versions: javaagent: - io.awspring.cloud:spring-cloud-aws-sqs:[3.0.0,) - name: spring-webflux-5.0 srcPath: instrumentation/spring/spring-webflux/spring-webflux-5.0 + scope: + name: io.opentelemetry.spring-webflux-5.0 target_versions: javaagent: - io.projectreactor.ipc:reactor-netty:[0.7.0.RELEASE,) @@ -1374,69 +1767,107 @@ spring: - io.projectreactor.netty:reactor-netty:[0.8.0.RELEASE,) - name: spring-webflux-5.3 srcPath: instrumentation/spring/spring-webflux/spring-webflux-5.3 + scope: + name: io.opentelemetry.spring-webflux-5.3 target_versions: library: - org.springframework:spring-webflux:5.3.0 - name: spring-jms-6.0 srcPath: instrumentation/spring/spring-jms/spring-jms-6.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.spring-jms-6.0 target_versions: javaagent: - org.springframework:spring-jms:[6.0.0,) - name: spring-boot-actuator-autoconfigure-2.0 srcPath: instrumentation/spring/spring-boot-actuator-autoconfigure-2.0 + scope: + name: io.opentelemetry.spring-boot-actuator-autoconfigure-2.0 target_versions: javaagent: - org.springframework.boot:spring-boot-actuator-autoconfigure:[2.0.0.RELEASE,) - name: spring-rmi-4.0 srcPath: instrumentation/spring/spring-rmi-4.0 + scope: + name: io.opentelemetry.spring-rmi-4.0 target_versions: javaagent: - org.springframework:spring-context:[4.0.0.RELEASE,6) - name: spring-webmvc-3.1 srcPath: instrumentation/spring/spring-webmvc/spring-webmvc-3.1 + scope: + name: io.opentelemetry.spring-webmvc-3.1 target_versions: javaagent: - org.springframework:spring-webmvc:[3.1.0.RELEASE,6) - name: spring-webmvc-6.0 srcPath: instrumentation/spring/spring-webmvc/spring-webmvc-6.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.spring-webmvc-6.0 target_versions: javaagent: - org.springframework:spring-webmvc:[6.0.0,) library: [] - name: spring-data-1.8 srcPath: instrumentation/spring/spring-data/spring-data-1.8 + scope: + name: io.opentelemetry.spring-data-1.8 target_versions: javaagent: - org.springframework:spring-aop:[1.2,] - org.springframework.data:spring-data-commons:[1.8.0.RELEASE,] + - name: spring-pulsar-1.0 + srcPath: instrumentation/spring/spring-pulsar-1.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.spring-pulsar-1.0 + target_versions: + javaagent: + - org.springframework.pulsar:spring-pulsar:[1.0.0,) - name: spring-web-3.1 srcPath: instrumentation/spring/spring-web/spring-web-3.1 + scope: + name: io.opentelemetry.spring-web-3.1 target_versions: javaagent: - org.springframework:spring-web:[3.1.0.RELEASE,6) library: [] - name: spring-kafka-2.7 srcPath: instrumentation/spring/spring-kafka-2.7 + scope: + name: io.opentelemetry.spring-kafka-2.7 target_versions: javaagent: - org.springframework.kafka:spring-kafka:[2.7.0,) library: [] - name: spring-webmvc-5.3 srcPath: instrumentation/spring/spring-webmvc/spring-webmvc-5.3 + scope: + name: io.opentelemetry.spring-webmvc-5.3 target_versions: library: [] - name: spring-core-2.0 srcPath: instrumentation/spring/spring-core-2.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.spring-core-2.0 target_versions: javaagent: - org.springframework:spring-core:[2.0,] - name: spring-cloud-gateway-2.0 srcPath: instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-2.0 + scope: + name: io.opentelemetry.spring-cloud-gateway-2.0 target_versions: javaagent: - org.springframework.cloud:spring-cloud-starter-gateway:[2.0.0.RELEASE,] - name: spring-security-config-6.0 srcPath: instrumentation/spring/spring-security-config-6.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.spring-security-config-6.0 target_versions: javaagent: - org.springframework.security:spring-security-config:[6.0.0,] @@ -1448,6 +1879,8 @@ spring: - org.springframework.security:spring-security-web:6.0.0 - name: spring-integration-4.1 srcPath: instrumentation/spring/spring-integration-4.1 + scope: + name: io.opentelemetry.spring-integration-4.1 target_versions: javaagent: - org.springframework.integration:spring-integration-core:[4.1.0.RELEASE,) @@ -1455,16 +1888,22 @@ spring: - org.springframework.integration:spring-integration-core:[4.1.0.RELEASE,5.+) - name: spring-jms-2.0 srcPath: instrumentation/spring/spring-jms/spring-jms-2.0 + scope: + name: io.opentelemetry.spring-jms-2.0 target_versions: javaagent: - org.springframework:spring-jms:[2.0,6) - name: spring-ws-2.0 srcPath: instrumentation/spring/spring-ws-2.0 + scope: + name: io.opentelemetry.spring-ws-2.0 target_versions: javaagent: - org.springframework.ws:spring-ws-core:[2.0.0.RELEASE,] - name: spring-web-6.0 srcPath: instrumentation/spring/spring-web/spring-web-6.0 + scope: + name: io.opentelemetry.spring-web-6.0 target_versions: javaagent: - org.springframework:spring-web:[6.0.0,) @@ -1472,6 +1911,8 @@ spymemcached: instrumentations: - name: spymemcached-2.12 srcPath: instrumentation/spymemcached-2.12 + scope: + name: io.opentelemetry.spymemcached-2.12 target_versions: javaagent: - net.spy:spymemcached:[2.12.0,) @@ -1479,11 +1920,16 @@ struts: instrumentations: - name: struts-2.3 srcPath: instrumentation/struts/struts-2.3 + scope: + name: io.opentelemetry.struts-2.3 target_versions: javaagent: - org.apache.struts:struts2-core:[2.1.0,7) - name: struts-7.0 srcPath: instrumentation/struts/struts-7.0 + minimumJavaVersion: 17 + scope: + name: io.opentelemetry.struts-7.0 target_versions: javaagent: - org.apache.struts:struts2-core:[7.0.0,) @@ -1491,6 +1937,8 @@ tapestry: instrumentations: - name: tapestry-5.4 srcPath: instrumentation/tapestry-5.4 + scope: + name: io.opentelemetry.tapestry-5.4 target_versions: javaagent: - org.apache.tapestry:tapestry-core:[5.4.0,) @@ -1498,11 +1946,16 @@ tomcat: instrumentations: - name: tomcat-10.0 srcPath: instrumentation/tomcat/tomcat-10.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.tomcat-10.0 target_versions: javaagent: - org.apache.tomcat.embed:tomcat-embed-core:[10,) - name: tomcat-7.0 srcPath: instrumentation/tomcat/tomcat-7.0 + scope: + name: io.opentelemetry.tomcat-7.0 target_versions: javaagent: - org.apache.tomcat.embed:tomcat-embed-core:[7.0.4, 10) @@ -1510,6 +1963,8 @@ twilio: instrumentations: - name: twilio-6.6 srcPath: instrumentation/twilio-6.6 + scope: + name: io.opentelemetry.twilio-6.6 target_versions: javaagent: - com.twilio.sdk:twilio:(,8.0.0) @@ -1517,6 +1972,8 @@ undertow: instrumentations: - name: undertow-1.4 srcPath: instrumentation/undertow-1.4 + scope: + name: io.opentelemetry.undertow-1.4 target_versions: javaagent: - io.undertow:undertow-core:[1.4.0.Final,) @@ -1524,6 +1981,8 @@ vaadin: instrumentations: - name: vaadin-14.2 srcPath: instrumentation/vaadin-14.2 + scope: + name: io.opentelemetry.vaadin-14.2 target_versions: javaagent: - com.vaadin:flow-server:[2.2.0,3) @@ -1532,36 +1991,50 @@ vertx: instrumentations: - name: vertx-kafka-client-3.6 srcPath: instrumentation/vertx/vertx-kafka-client-3.6 + scope: + name: io.opentelemetry.vertx-kafka-client-3.6 target_versions: javaagent: - io.vertx:vertx-kafka-client:[3.5.1,) - name: vertx-redis-client-4.0 srcPath: instrumentation/vertx/vertx-redis-client-4.0 + scope: + name: io.opentelemetry.vertx-redis-client-4.0 target_versions: javaagent: - io.vertx:vertx-redis-client:[4.0.0,) - name: vertx-web-3.0 srcPath: instrumentation/vertx/vertx-web-3.0 + scope: + name: io.opentelemetry.vertx-web-3.0 target_versions: javaagent: - io.vertx:vertx-web:[3.0.0,) - name: vertx-sql-client-4.0 srcPath: instrumentation/vertx/vertx-sql-client-4.0 + scope: + name: io.opentelemetry.vertx-sql-client-4.0 target_versions: javaagent: - io.vertx:vertx-sql-client:[4.0.0,) - name: vertx-http-client-4.0 srcPath: instrumentation/vertx/vertx-http-client/vertx-http-client-4.0 + scope: + name: io.opentelemetry.vertx-http-client-4.0 target_versions: javaagent: - io.vertx:vertx-core:[4.0.0,) - name: vertx-rx-java-3.5 srcPath: instrumentation/vertx/vertx-rx-java-3.5 + scope: + name: io.opentelemetry.vertx-rx-java-3.5 target_versions: javaagent: - io.vertx:vertx-rx-java2:[3.5.0,) - name: vertx-http-client-3.0 srcPath: instrumentation/vertx/vertx-http-client/vertx-http-client-3.0 + scope: + name: io.opentelemetry.vertx-http-client-3.0 target_versions: javaagent: - io.vertx:vertx-core:[3.0.0,4.0.0) @@ -1569,6 +2042,8 @@ vibur: instrumentations: - name: vibur-dbcp-11.0 srcPath: instrumentation/vibur-dbcp-11.0 + scope: + name: io.opentelemetry.vibur-dbcp-11.0 target_versions: javaagent: - org.vibur:vibur-dbcp:[11.0,) @@ -1578,6 +2053,8 @@ wicket: instrumentations: - name: wicket-8.0 srcPath: instrumentation/wicket-8.0 + scope: + name: io.opentelemetry.wicket-8.0 target_versions: javaagent: - org.apache.wicket:wicket:[8.0.0,] @@ -1585,16 +2062,22 @@ xxl: instrumentations: - name: xxl-job-2.3.0 srcPath: instrumentation/xxl-job/xxl-job-2.3.0 + scope: + name: io.opentelemetry.xxl-job-2.3.0 target_versions: javaagent: - com.xuxueli:xxl-job-core:[2.3.0,) - name: xxl-job-2.1.2 srcPath: instrumentation/xxl-job/xxl-job-2.1.2 + scope: + name: io.opentelemetry.xxl-job-2.1.2 target_versions: javaagent: - com.xuxueli:xxl-job-core:[2.1.2,2.3.0) - name: xxl-job-1.9.2 srcPath: instrumentation/xxl-job/xxl-job-1.9.2 + scope: + name: io.opentelemetry.xxl-job-1.9.2 target_versions: javaagent: - com.xuxueli:xxl-job-core:[1.9.2, 2.1.2) @@ -1602,6 +2085,8 @@ zio: instrumentations: - name: zio-2.0 srcPath: instrumentation/zio/zio-2.0 + scope: + name: io.opentelemetry.zio-2.0 target_versions: javaagent: - dev.zio:zio_2.13:[2.0.0,) diff --git a/instrumentation-docs/build.gradle.kts b/instrumentation-docs/build.gradle.kts index 7e311fba13..e259a5efe5 100644 --- a/instrumentation-docs/build.gradle.kts +++ b/instrumentation-docs/build.gradle.kts @@ -8,6 +8,7 @@ otelJava { dependencies { implementation("org.yaml:snakeyaml:2.4") + implementation("io.opentelemetry:opentelemetry-sdk-common") testImplementation(enforcedPlatform("org.junit:junit-bom:5.12.1")) testImplementation("org.assertj:assertj-core:3.27.3") diff --git a/instrumentation-docs/readme.md b/instrumentation-docs/readme.md index cc2eaa649e..3aad7eb648 100644 --- a/instrumentation-docs/readme.md +++ b/instrumentation-docs/readme.md @@ -2,6 +2,12 @@ Runs analysis on instrumentation modules in order to generate documentation. +## How to use + +Run the doc generator: + +`./gradlew :instrumentation-docs:generateDocs` + ## Instrumentation Hierarchy An "InstrumentationEntity" represents a module that that targets specific code in a framework/library/technology. @@ -46,10 +52,15 @@ public class SpringWebInstrumentationModule extends InstrumentationModule * Configured in `InstrumentationModule` code for each module * srcPath * Path to the source code of the instrumentation module +* minimumJavaVersion + * Minimum Java version required by the instrumentation module. If not specified, it is assumed to + be Java 8 * description * Short description of what the instrumentation does * target_versions * List of supported versions by the module, broken down by `library` or `javaagent` support +* scope + * Name: The scope name of the instrumentation, `io.opentelemetry.{instrumentation name}` ## Methodology @@ -62,12 +73,25 @@ As of now, the following fields are supported: ```yaml description: "Description of what the instrumentation does." + +# used to mark modules that do not instrument traditional libraries (e.g. methods, annotations) +# defaults to true +isLibraryInstrumentation: false ``` -### Versions targeted +### Gradle File Derived Information -We parse gradle files in order to determine the target versions. +We parse gradle files in order to determine several pieces of metadata: - Javaagent versions are determined by the `muzzle` plugin configurations - Library versions are determined by the library dependency versions - when available, latestDepTestLibrary is used to determine the latest supported version +- Minimum Java version is determined by the `otelJava` configurations + +### Scope + +For now, the scope name is the only value that is implemented in our instrumentations. The scope +name is determined by the instrumentation module name: `io.opentelemetry.{instrumentation name}` + +We will implement gatherers for the schemaUrl and scope attributes when instrumentations start +implementing them. diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/DocGeneratorApplication.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/DocGeneratorApplication.java index 5cec7ac4ab..ebb59969bf 100644 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/DocGeneratorApplication.java +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/DocGeneratorApplication.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.docs; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationEntity; import io.opentelemetry.instrumentation.docs.utils.FileManager; import io.opentelemetry.instrumentation.docs.utils.YamlHelper; import java.io.BufferedWriter; @@ -26,6 +27,10 @@ public class DocGeneratorApplication { try (BufferedWriter writer = Files.newBufferedWriter( Paths.get("docs/instrumentation-list.yaml"), Charset.defaultCharset())) { + writer.write("# This file is generated and should not be manually edited.\n"); + writer.write("# The structure and contents are a work in progress and subject to change.\n"); + writer.write( + "# For more information see: https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/13468\n\n"); YamlHelper.printInstrumentationList(entities, writer); } catch (IOException e) { logger.severe("Error writing instrumentation list: " + e.getMessage()); diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzer.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzer.java index ef7f33d3d1..a60621658b 100644 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzer.java +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzer.java @@ -5,8 +5,11 @@ package io.opentelemetry.instrumentation.docs; -import static io.opentelemetry.instrumentation.docs.GradleParser.parseGradleFile; +import static io.opentelemetry.instrumentation.docs.parsers.GradleParser.parseGradleFile; +import io.opentelemetry.instrumentation.docs.internal.DependencyInfo; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationEntity; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationType; import io.opentelemetry.instrumentation.docs.utils.FileManager; import io.opentelemetry.instrumentation.docs.utils.InstrumentationPath; import io.opentelemetry.instrumentation.docs.utils.YamlHelper; @@ -42,11 +45,12 @@ class InstrumentationAnalyzer { if (!entityMap.containsKey(key)) { entityMap.put( key, - new InstrumentationEntity( - path.srcPath().replace("/javaagent", "").replace("/library", ""), - path.instrumentationName(), - path.namespace(), - path.group())); + new InstrumentationEntity.Builder() + .srcPath(path.srcPath().replace("/javaagent", "").replace("/library", "")) + .instrumentationName(path.instrumentationName()) + .namespace(path.namespace()) + .group(path.group()) + .build()); } } @@ -80,15 +84,21 @@ class InstrumentationAnalyzer { Map> versions = new HashMap<>(); for (String file : files) { String fileContents = fileSearch.readFileToString(file); + DependencyInfo results = null; if (file.contains("/javaagent/")) { - Set results = parseGradleFile(fileContents, InstrumentationType.JAVAAGENT); + results = parseGradleFile(fileContents, InstrumentationType.JAVAAGENT); versions .computeIfAbsent(InstrumentationType.JAVAAGENT, k -> new HashSet<>()) - .addAll(results); + .addAll(results.versions()); } else if (file.contains("/library/")) { - Set results = parseGradleFile(fileContents, InstrumentationType.LIBRARY); - versions.computeIfAbsent(InstrumentationType.LIBRARY, k -> new HashSet<>()).addAll(results); + results = parseGradleFile(fileContents, InstrumentationType.LIBRARY); + versions + .computeIfAbsent(InstrumentationType.LIBRARY, k -> new HashSet<>()) + .addAll(results.versions()); + } + if (results != null && results.minJavaVersionSupported() != null) { + entity.setMinJavaVersion(results.minJavaVersionSupported()); } } entity.setTargetVersions(versions); diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationEntity.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationEntity.java deleted file mode 100644 index c280e0f535..0000000000 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.docs; - -import java.util.Map; -import java.util.Set; - -public class InstrumentationEntity { - private final String srcPath; - private final String instrumentationName; - private final String namespace; - private final String group; - - private InstrumentationMetaData metadata; - private Map> targetVersions; - - public InstrumentationEntity( - String srcPath, String instrumentationName, String namespace, String group) { - this.srcPath = srcPath; - this.instrumentationName = instrumentationName; - this.namespace = namespace; - this.group = group; - } - - public InstrumentationEntity( - String srcPath, - String instrumentationName, - String namespace, - String group, - Map> targetVersions, - InstrumentationMetaData metadata) { - this.srcPath = srcPath; - this.instrumentationName = instrumentationName; - this.namespace = namespace; - this.group = group; - this.targetVersions = targetVersions; - this.metadata = metadata; - } - - public void setMetadata(InstrumentationMetaData metadata) { - this.metadata = metadata; - } - - public InstrumentationMetaData getMetadata() { - return metadata; - } - - public String getSrcPath() { - return srcPath; - } - - public String getInstrumentationName() { - return instrumentationName; - } - - public String getNamespace() { - return namespace; - } - - public String getGroup() { - return group; - } - - public Map> getTargetVersions() { - return targetVersions; - } - - public void setTargetVersions(Map> targetVersions) { - this.targetVersions = targetVersions; - } -} diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationMetaData.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationMetaData.java deleted file mode 100644 index e692c9e845..0000000000 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationMetaData.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.docs; - -public class InstrumentationMetaData { - - public InstrumentationMetaData() {} - - public InstrumentationMetaData(String description) { - this.description = description; - } - - private String description; - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } -} diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/DependencyInfo.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/DependencyInfo.java new file mode 100644 index 0000000000..1efa380676 --- /dev/null +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/DependencyInfo.java @@ -0,0 +1,14 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.docs.internal; + +import java.util.Set; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public record DependencyInfo(Set versions, Integer minJavaVersionSupported) {} diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationEntity.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationEntity.java new file mode 100644 index 0000000000..0509320a54 --- /dev/null +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationEntity.java @@ -0,0 +1,159 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.docs.internal; + +import static java.util.Objects.requireNonNull; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public class InstrumentationEntity { + private final String srcPath; + private final String instrumentationName; + private final String namespace; + private final String group; + private final InstrumentationScopeInfo scopeInfo; + + @Nullable private Map> targetVersions; + + @Nullable private Integer minJavaVersion; + + @Nullable private InstrumentationMetaData metadata; + + /** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ + public InstrumentationEntity(Builder builder) { + requireNonNull(builder.srcPath, "srcPath required"); + requireNonNull(builder.instrumentationName, "instrumentationName required"); + requireNonNull(builder.namespace, "namespace required"); + requireNonNull(builder.group, "group required"); + + this.srcPath = builder.srcPath; + this.instrumentationName = builder.instrumentationName; + this.namespace = builder.namespace; + this.group = builder.group; + this.metadata = builder.metadata; + this.targetVersions = builder.targetVersions; + this.minJavaVersion = builder.minJavaVersion; + this.scopeInfo = InstrumentationScopeInfo.create("io.opentelemetry." + instrumentationName); + } + + public String getSrcPath() { + return srcPath; + } + + public String getInstrumentationName() { + return instrumentationName; + } + + public String getNamespace() { + return namespace; + } + + public String getGroup() { + return group; + } + + public InstrumentationScopeInfo getScopeInfo() { + return scopeInfo; + } + + @Nullable + public InstrumentationMetaData getMetadata() { + return metadata; + } + + @Nullable + public Map> getTargetVersions() { + return targetVersions; + } + + @Nullable + public Integer getMinJavaVersion() { + return minJavaVersion; + } + + public void setTargetVersions(Map> targetVersions) { + this.targetVersions = targetVersions; + } + + public void setMetadata(InstrumentationMetaData metadata) { + this.metadata = metadata; + } + + public void setMinJavaVersion(Integer minJavaVersion) { + this.minJavaVersion = minJavaVersion; + } + + /** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ + public static class Builder { + private String srcPath; + private String instrumentationName; + private String namespace; + private String group; + private Integer minJavaVersion; + private InstrumentationMetaData metadata; + private Map> targetVersions; + + @CanIgnoreReturnValue + public Builder srcPath(String srcPath) { + this.srcPath = srcPath; + return this; + } + + @CanIgnoreReturnValue + public Builder instrumentationName(String instrumentationName) { + this.instrumentationName = instrumentationName; + return this; + } + + @CanIgnoreReturnValue + public Builder namespace(String namespace) { + this.namespace = namespace; + return this; + } + + @CanIgnoreReturnValue + public Builder minJavaVersion(Integer minJavaVersion) { + this.minJavaVersion = minJavaVersion; + return this; + } + + @CanIgnoreReturnValue + public Builder group(String group) { + this.group = group; + return this; + } + + @CanIgnoreReturnValue + public Builder metadata(InstrumentationMetaData metadata) { + this.metadata = metadata; + return this; + } + + @CanIgnoreReturnValue + public Builder targetVersions(Map> targetVersions) { + this.targetVersions = targetVersions; + return this; + } + + public InstrumentationEntity build() { + return new InstrumentationEntity(this); + } + } +} diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationMetaData.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationMetaData.java new file mode 100644 index 0000000000..6b30165007 --- /dev/null +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationMetaData.java @@ -0,0 +1,51 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.docs.internal; + +import javax.annotation.Nullable; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public class InstrumentationMetaData { + + public InstrumentationMetaData() {} + + public InstrumentationMetaData(String description) { + this.description = description; + this.isLibraryInstrumentation = true; + } + + public InstrumentationMetaData(String description, Boolean isLibraryInstrumentation) { + this.isLibraryInstrumentation = isLibraryInstrumentation; + this.description = description; + } + + @Nullable private String description; + + private Boolean isLibraryInstrumentation; + + @Nullable + public String getDescription() { + return description; + } + + public Boolean getIsLibraryInstrumentation() { + if (isLibraryInstrumentation == null) { + return true; + } + return isLibraryInstrumentation; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setIsLibraryInstrumentation(Boolean libraryInstrumentation) { + isLibraryInstrumentation = libraryInstrumentation; + } +} diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationType.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationType.java similarity index 76% rename from instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationType.java rename to instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationType.java index 42840e33ce..3e716e98f7 100644 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/InstrumentationType.java +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/InstrumentationType.java @@ -3,10 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.docs; +package io.opentelemetry.instrumentation.docs.internal; import java.util.Locale; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public enum InstrumentationType { JAVAAGENT, LIBRARY; diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/GradleParser.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/parsers/GradleParser.java similarity index 67% rename from instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/GradleParser.java rename to instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/parsers/GradleParser.java index a2aa162ebf..1f3bf2dcb7 100644 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/GradleParser.java +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/parsers/GradleParser.java @@ -3,16 +3,20 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.docs; +package io.opentelemetry.instrumentation.docs.parsers; +import io.opentelemetry.instrumentation.docs.internal.DependencyInfo; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationType; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -class GradleParser { +public class GradleParser { private static final Pattern variablePattern = Pattern.compile("val\\s+(\\w+)\\s*=\\s*\"([^\"]+)\""); @@ -31,20 +35,32 @@ class GradleParser { private static final Pattern latestDepTestLibraryPattern = Pattern.compile("latestDepTestLibrary\\(\"([^\"]+:[^\"]+):([^\"]+)\"\\)"); + private static final Pattern coreJdkPattern = Pattern.compile("coreJdk\\(\\)"); + + private static final Pattern ifBlockPattern = + Pattern.compile("if\\s*\\([^)]*\\)\\s*\\{.*?}", Pattern.DOTALL); + + private static final Pattern otelJavaBlockPattern = + Pattern.compile("otelJava\\s*\\{.*?}", Pattern.DOTALL); + + private static final Pattern minJavaVersionPattern = + Pattern.compile("minJavaVersionSupported\\.set\\(JavaVersion\\.VERSION_(\\d+)\\)"); + /** * Parses gradle files for muzzle and dependency information * * @param gradleFileContents Contents of a Gradle build file as a String * @return A set of strings summarizing the group, module, and version ranges */ - public static Set parseGradleFile(String gradleFileContents, InstrumentationType type) { - Set results = new HashSet<>(); + public static DependencyInfo parseGradleFile( + String gradleFileContents, InstrumentationType type) { + DependencyInfo results; Map variables = extractVariables(gradleFileContents); if (type.equals(InstrumentationType.JAVAAGENT)) { - results.addAll(parseMuzzle(gradleFileContents, variables)); + results = parseMuzzle(gradleFileContents, variables); } else { - results.addAll(parseLibraryDependencies(gradleFileContents, variables)); + results = parseLibraryDependencies(gradleFileContents, variables); } return results; @@ -58,13 +74,24 @@ class GradleParser { * @param variables Map of variable names to their values * @return A set of strings summarizing the group, module, and version ranges */ - private static Set parseMuzzle(String gradleFileContents, Map variables) { + private static DependencyInfo parseMuzzle( + String gradleFileContents, Map variables) { Set results = new HashSet<>(); Matcher passBlockMatcher = muzzlePassBlockPattern.matcher(gradleFileContents); + Integer minJavaVersion = parseMinJavaVersion(gradleFileContents); + while (passBlockMatcher.find()) { String passBlock = passBlockMatcher.group(1); + if (coreJdkPattern.matcher(passBlock).find()) { + if (minJavaVersion != null) { + results.add("Java " + minJavaVersion + "+"); + } else { + results.add("Java 8+"); + } + } + String group = extractValue(passBlock, "group\\.set\\(\"([^\"]+)\"\\)"); String module = extractValue(passBlock, "module\\.set\\(\"([^\"]+)\"\\)"); String versionRange = extractValue(passBlock, "versions\\.set\\(\"([^\"]+)\"\\)"); @@ -74,7 +101,7 @@ class GradleParser { results.add(summary); } } - return results; + return new DependencyInfo(results, minJavaVersion); } /** @@ -86,7 +113,7 @@ class GradleParser { * @param variables Map of variable names to their values * @return A set of strings summarizing the group, module, and versions */ - private static Set parseLibraryDependencies( + private static DependencyInfo parseLibraryDependencies( String gradleFileContents, Map variables) { Map versions = new HashMap<>(); @@ -123,7 +150,45 @@ class GradleParser { } } - return results; + Integer minJavaVersion = parseMinJavaVersion(gradleFileContents); + + return new DependencyInfo(results, minJavaVersion); + } + + public static Integer parseMinJavaVersion(String gradleFileContents) { + List excludedRanges = new ArrayList<>(); + + // Identify all if-block ranges so we can exclude them + Matcher ifBlockMatcher = ifBlockPattern.matcher(gradleFileContents); + while (ifBlockMatcher.find()) { + excludedRanges.add(new int[] {ifBlockMatcher.start(), ifBlockMatcher.end()}); + } + + Matcher otelJavaMatcher = otelJavaBlockPattern.matcher(gradleFileContents); + while (otelJavaMatcher.find()) { + int blockStart = otelJavaMatcher.start(); + + if (isInExcludedRange(blockStart, excludedRanges)) { + continue; // Skip blocks inside 'if' statements + } + + String otelJavaBlock = otelJavaMatcher.group(); + Matcher versionMatcher = minJavaVersionPattern.matcher(otelJavaBlock); + if (versionMatcher.find()) { + return Integer.parseInt(versionMatcher.group(1)); + } + } + + return null; + } + + private static boolean isInExcludedRange(int position, List ranges) { + for (int[] range : ranges) { + if (position >= range[0] && position <= range[1]) { + return true; + } + } + return false; } /** diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/FileManager.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/FileManager.java index 87db8918b4..97678c4a70 100644 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/FileManager.java +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/FileManager.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.docs.utils; -import io.opentelemetry.instrumentation.docs.InstrumentationType; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationType; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -29,7 +29,6 @@ public class FileManager { try (Stream walk = Files.walk(rootPath)) { return walk.filter(Files::isDirectory) - .filter(dir -> !dir.toString().contains("/build")) .filter(dir -> isValidInstrumentationPath(dir.toString())) .map(dir -> parseInstrumentationPath(dir.toString())) .collect(Collectors.toList()); @@ -77,7 +76,9 @@ public class FileManager { if (filePath.contains("/test/") || filePath.contains("/testing") + || filePath.contains("/build/") || filePath.contains("-common/") + || filePath.contains("-common-") || filePath.contains("bootstrap/src")) { return false; } diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/InstrumentationPath.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/InstrumentationPath.java index b491111088..edd30d6e27 100644 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/InstrumentationPath.java +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/InstrumentationPath.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.docs.utils; -import io.opentelemetry.instrumentation.docs.InstrumentationType; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationType; public record InstrumentationPath( String instrumentationName, diff --git a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/YamlHelper.java b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/YamlHelper.java index 87e70a54aa..1828614cca 100644 --- a/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/YamlHelper.java +++ b/instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/YamlHelper.java @@ -5,8 +5,8 @@ package io.opentelemetry.instrumentation.docs.utils; -import io.opentelemetry.instrumentation.docs.InstrumentationEntity; -import io.opentelemetry.instrumentation.docs.InstrumentationMetaData; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationEntity; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationMetaData; import java.io.BufferedWriter; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -16,7 +16,6 @@ import java.util.TreeMap; import java.util.stream.Collectors; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.representer.Representer; public class YamlHelper { @@ -24,6 +23,7 @@ public class YamlHelper { List list, BufferedWriter writer) { Map> groupedByGroup = list.stream() + .filter(entity -> isLibraryInstrumentation(entity.getMetadata())) .collect( Collectors.groupingBy( InstrumentationEntity::getGroup, TreeMap::new, Collectors.toList())); @@ -43,6 +43,13 @@ public class YamlHelper { entityMap.put("srcPath", entity.getSrcPath()); + if (entity.getMinJavaVersion() != null) { + entityMap.put("minimumJavaVersion", entity.getMinJavaVersion()); + } + + Map scopeMap = getScopeMap(entity); + entityMap.put("scope", scopeMap); + Map targetVersions = new TreeMap<>(); if (entity.getTargetVersions() != null && !entity.getTargetVersions().isEmpty()) { entity @@ -52,6 +59,7 @@ public class YamlHelper { targetVersions.put(type.toString(), new ArrayList<>(versions))); } entityMap.put("target_versions", targetVersions); + instrumentations.add(entityMap); } groupMap.put("instrumentations", instrumentations); @@ -60,12 +68,25 @@ public class YamlHelper { DumperOptions options = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - Representer representer = new Representer(options); - representer.getPropertyUtils().setSkipMissingProperties(true); - Yaml yaml = new Yaml(representer, options); + + Yaml yaml = new Yaml(options); yaml.dump(output, writer); } + // We assume true unless explicitly overridden + private static Boolean isLibraryInstrumentation(InstrumentationMetaData metadata) { + if (metadata == null) { + return true; + } + return metadata.getIsLibraryInstrumentation(); + } + + private static Map getScopeMap(InstrumentationEntity entity) { + Map scopeMap = new LinkedHashMap<>(); + scopeMap.put("name", entity.getScopeInfo().getName()); + return scopeMap; + } + public static InstrumentationMetaData metaDataParser(String input) { return new Yaml().loadAs(input, InstrumentationMetaData.class); } diff --git a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzerTest.java b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzerTest.java index d87901be6f..98612bde51 100644 --- a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzerTest.java +++ b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/InstrumentationAnalyzerTest.java @@ -7,6 +7,8 @@ package io.opentelemetry.instrumentation.docs; import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationEntity; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationType; import io.opentelemetry.instrumentation.docs.utils.InstrumentationPath; import java.util.Arrays; import java.util.List; @@ -50,6 +52,8 @@ class InstrumentationAnalyzerTest { assertThat(log4jEntity.getNamespace()).isEqualTo("log4j"); assertThat(log4jEntity.getGroup()).isEqualTo("log4j"); assertThat(log4jEntity.getSrcPath()).isEqualTo("instrumentation/log4j/log4j-appender-2.17"); + assertThat(log4jEntity.getScopeInfo().getName()) + .isEqualTo("io.opentelemetry.log4j-appender-2.17"); InstrumentationEntity springEntity = entities.stream() @@ -61,5 +65,6 @@ class InstrumentationAnalyzerTest { assertThat(springEntity.getNamespace()).isEqualTo("spring"); assertThat(springEntity.getGroup()).isEqualTo("spring"); assertThat(springEntity.getSrcPath()).isEqualTo("instrumentation/spring/spring-web"); + assertThat(springEntity.getScopeInfo().getName()).isEqualTo("io.opentelemetry.spring-web"); } } diff --git a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/GradleParserTest.java b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/parsers/GradleParserTest.java similarity index 63% rename from instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/GradleParserTest.java rename to instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/parsers/GradleParserTest.java index 39a1efb43d..4aef910544 100644 --- a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/GradleParserTest.java +++ b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/parsers/GradleParserTest.java @@ -3,11 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.docs; +package io.opentelemetry.instrumentation.docs.parsers; import static org.assertj.core.api.Assertions.assertThat; -import java.util.Set; +import io.opentelemetry.instrumentation.docs.internal.DependencyInfo; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationType; import org.junit.jupiter.api.Test; class GradleParserTest { @@ -22,10 +23,10 @@ class GradleParserTest { + " versions.set(\"[5.0,6.4)\")\n" + " }\n" + "}"; - Set versions = + DependencyInfo info = GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.JAVAAGENT); - assertThat(versions.size()).isEqualTo(1); - assertThat(versions.stream().findFirst().get()) + assertThat(info.versions().size()).isEqualTo(1); + assertThat(info.versions().stream().findFirst().get()) .isEqualTo("org.elasticsearch.client:rest:[5.0,6.4)"); } @@ -33,10 +34,10 @@ class GradleParserTest { void testExtractLibraryVersion() { String gradleBuildFileContent = "dependencies {\n" + " library(\"org.apache.httpcomponents:httpclient:4.3\")\n" + "}"; - Set versions = + DependencyInfo info = GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.LIBRARY); - assertThat(versions.size()).isEqualTo(1); - assertThat(versions.stream().findFirst().get()) + assertThat(info.versions().size()).isEqualTo(1); + assertThat(info.versions().stream().findFirst().get()) .isEqualTo("org.apache.httpcomponents:httpclient:4.3"); } @@ -49,13 +50,75 @@ class GradleParserTest { + " latestDepTestLibrary(\"org.apache.httpcomponents:httpclient:4.+\") // see apache-httpclient-5.0 module\n" + "}"; - Set versions = + DependencyInfo info = GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.LIBRARY); - assertThat(versions.size()).isEqualTo(1); - assertThat(versions.stream().findFirst().get()) + assertThat(info.versions().size()).isEqualTo(1); + assertThat(info.versions().stream().findFirst().get()) .isEqualTo("org.apache.httpcomponents:httpclient:[4.3,4.+)"); } + @Test + void testExtractCoreJdk() { + String gradleBuildFileContent = + """ + muzzle { + pass { + coreJdk() + } + } + """; + + DependencyInfo info = + GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.JAVAAGENT); + assertThat(info.versions().size()).isEqualTo(1); + assertThat(info.versions().stream().findFirst().get()).isEqualTo("Java 8+"); + } + + @Test + void testExtractMinimumJavaVersion() { + String gradleBuildFileContent = + """ + muzzle { + pass { + coreJdk() + } + } + + otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_11) + } + """; + + DependencyInfo info = + GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.JAVAAGENT); + assertThat(info.versions().size()).isEqualTo(1); + assertThat(info.minJavaVersionSupported()).isEqualTo(11); + assertThat(info.versions().stream().findFirst().get()).isEqualTo("Java 11+"); + } + + @Test + void testExtractMinimumJavaVersionIgnoredWithinIfCondition() { + String gradleBuildFileContent = + """ + muzzle { + pass { + coreJdk() + } + } + + if (latestDepTest) { + otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_11) + } + } + """; + + DependencyInfo info = + GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.JAVAAGENT); + assertThat(info.versions().size()).isEqualTo(1); + assertThat(info.versions().stream().findFirst().get()).isEqualTo("Java 8+"); + } + @Test void testExtractMuzzleVersions_MultiplePassBlocks() { String gradleBuildFileContent = @@ -89,9 +152,9 @@ class GradleParserTest { + " }\n" + "}\n"; - Set versions = + DependencyInfo info = GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.JAVAAGENT); - assertThat(versions) + assertThat(info.versions()) .containsExactlyInAnyOrder( "dev.zio:zio_2.12:[2.0.0,)", "dev.zio:zio_2.13:[2.0.0,)", "dev.zio:zio_3:[2.0.0,)"); } @@ -117,9 +180,9 @@ class GradleParserTest { + " }\n" + "}\n"; - Set versions = + DependencyInfo info = GradleParser.parseGradleFile(gradleBuildFileContent, InstrumentationType.LIBRARY); - assertThat(versions) + assertThat(info.versions()) .containsExactlyInAnyOrder( "ch.qos.logback:logback-classic:1.3.0", "org.slf4j:slf4j-api:2.0.0", diff --git a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/FileManagerTest.java b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/FileManagerTest.java index f8eb745a9a..a509822994 100644 --- a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/FileManagerTest.java +++ b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/FileManagerTest.java @@ -44,6 +44,14 @@ class FileManagerTest { assertThat(FileManager.isValidInstrumentationPath("/instrumentation/test/javaagent")).isFalse(); } + @Test + void testExcludesCommonModules() { + assertThat( + FileManager.isValidInstrumentationPath( + "instrumentation/elasticsearch/elasticsearch-rest-common-5.0")) + .isFalse(); + } + @Test void testFindBuildGradleFiles() throws IOException { Path gradleFile = Files.createFile(tempDir.resolve("build.gradle.kts")); diff --git a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/YamlHelperTest.java b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/YamlHelperTest.java index 12cfa8bbaa..1f9d8862c3 100644 --- a/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/YamlHelperTest.java +++ b/instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/YamlHelperTest.java @@ -7,9 +7,9 @@ package io.opentelemetry.instrumentation.docs.utils; import static org.assertj.core.api.Assertions.assertThat; -import io.opentelemetry.instrumentation.docs.InstrumentationEntity; -import io.opentelemetry.instrumentation.docs.InstrumentationMetaData; -import io.opentelemetry.instrumentation.docs.InstrumentationType; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationEntity; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationMetaData; +import io.opentelemetry.instrumentation.docs.internal.InstrumentationType; import java.io.BufferedWriter; import java.io.StringWriter; import java.util.ArrayList; @@ -33,26 +33,29 @@ class YamlHelperTest { new InstrumentationMetaData("Spring Web 6.0 instrumentation"); entities.add( - new InstrumentationEntity( - "instrumentation/spring/spring-web/spring-web-6.0", - "spring-web-6.0", - "spring", - "spring", - targetVersions1, - metadata1)); + new InstrumentationEntity.Builder() + .srcPath("instrumentation/spring/spring-web/spring-web-6.0") + .instrumentationName("spring-web-6.0") + .namespace("spring") + .group("spring") + .targetVersions(targetVersions1) + .metadata(metadata1) + .minJavaVersion(11) + .build()); Map> targetVersions2 = new HashMap<>(); + targetVersions2.put( InstrumentationType.LIBRARY, new HashSet<>(List.of("org.apache.struts:struts2-core:2.1.0"))); entities.add( - new InstrumentationEntity( - "instrumentation/struts/struts-2.3", - "struts-2.3", - "struts", - "struts", - targetVersions2, - null)); + new InstrumentationEntity.Builder() + .srcPath("instrumentation/struts/struts-2.3") + .instrumentationName("struts-2.3") + .namespace("struts") + .group("struts") + .targetVersions(targetVersions2) + .build()); StringWriter stringWriter = new StringWriter(); BufferedWriter writer = new BufferedWriter(stringWriter); @@ -61,22 +64,115 @@ class YamlHelperTest { writer.flush(); String expectedYaml = - "spring:\n" - + " instrumentations:\n" - + " - name: spring-web-6.0\n" - + " description: Spring Web 6.0 instrumentation\n" - + " srcPath: instrumentation/spring/spring-web/spring-web-6.0\n" - + " target_versions:\n" - + " javaagent:\n" - + " - org.springframework:spring-web:[6.0.0,)\n" - + "struts:\n" - + " instrumentations:\n" - + " - name: struts-2.3\n" - + " srcPath: instrumentation/struts/struts-2.3\n" - + " target_versions:\n" - + " library:\n" - + " - org.apache.struts:struts2-core:2.1.0\n"; + """ + spring: + instrumentations: + - name: spring-web-6.0 + description: Spring Web 6.0 instrumentation + srcPath: instrumentation/spring/spring-web/spring-web-6.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.spring-web-6.0 + target_versions: + javaagent: + - org.springframework:spring-web:[6.0.0,) + struts: + instrumentations: + - name: struts-2.3 + srcPath: instrumentation/struts/struts-2.3 + scope: + name: io.opentelemetry.struts-2.3 + target_versions: + library: + - org.apache.struts:struts2-core:2.1.0 + """; assertThat(expectedYaml).isEqualTo(stringWriter.toString()); } + + @Test + void testPrintInstrumentationListIgnoresNonLibraryInstrumentation() throws Exception { + List entities = new ArrayList<>(); + Map> targetVersions1 = new HashMap<>(); + targetVersions1.put( + InstrumentationType.JAVAAGENT, + new HashSet<>(List.of("org.springframework:spring-web:[6.0.0,)"))); + + InstrumentationMetaData metadata1 = + new InstrumentationMetaData("Spring Web 6.0 instrumentation"); + + entities.add( + new InstrumentationEntity.Builder() + .srcPath("instrumentation/spring/spring-web/spring-web-6.0") + .instrumentationName("spring-web-6.0") + .namespace("spring") + .group("spring") + .targetVersions(targetVersions1) + .metadata(metadata1) + .minJavaVersion(11) + .build()); + + InstrumentationMetaData metadata2 = new InstrumentationMetaData(null, false); + + entities.add( + new InstrumentationEntity.Builder() + .srcPath("instrumentation/internal/internal-application-logger") + .instrumentationName("internal-application-logger") + .namespace("internal") + .group("internal") + .metadata(metadata2) + .targetVersions(new HashMap<>()) + .build()); + + StringWriter stringWriter = new StringWriter(); + BufferedWriter writer = new BufferedWriter(stringWriter); + + YamlHelper.printInstrumentationList(entities, writer); + writer.flush(); + + String expectedYaml = + """ + spring: + instrumentations: + - name: spring-web-6.0 + description: Spring Web 6.0 instrumentation + srcPath: instrumentation/spring/spring-web/spring-web-6.0 + minimumJavaVersion: 11 + scope: + name: io.opentelemetry.spring-web-6.0 + target_versions: + javaagent: + - org.springframework:spring-web:[6.0.0,) + """; + + assertThat(expectedYaml).isEqualTo(stringWriter.toString()); + } + + @Test + void testMetadataParser() { + String input = + """ + description: test description + isLibraryInstrumentation: false + """; + + InstrumentationMetaData metadata = YamlHelper.metaDataParser(input); + assertThat(metadata.getIsLibraryInstrumentation()).isFalse(); + assertThat(metadata.getDescription()).isEqualTo("test description"); + } + + @Test + void testMetadataParserWithOnlyLibraryEntry() { + String input = "isLibraryInstrumentation: false"; + InstrumentationMetaData metadata = YamlHelper.metaDataParser(input); + assertThat(metadata.getIsLibraryInstrumentation()).isFalse(); + assertThat(metadata.getDescription()).isNull(); + } + + @Test + void testMetadataParserWithOnlyDescription() { + String input = "description: false"; + InstrumentationMetaData metadata = YamlHelper.metaDataParser(input); + assertThat(metadata.getIsLibraryInstrumentation()).isTrue(); + } } diff --git a/instrumentation/external-annotations/metadata.yaml b/instrumentation/external-annotations/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/external-annotations/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/internal/internal-application-logger/metadata.yaml b/instrumentation/internal/internal-application-logger/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/internal/internal-application-logger/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/internal/internal-class-loader/metadata.yaml b/instrumentation/internal/internal-class-loader/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/internal/internal-class-loader/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/internal/internal-eclipse-osgi-3.6/metadata.yaml b/instrumentation/internal/internal-eclipse-osgi-3.6/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/internal/internal-eclipse-osgi-3.6/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/internal/internal-lambda/metadata.yaml b/instrumentation/internal/internal-lambda/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/internal/internal-lambda/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/internal/internal-reflection/metadata.yaml b/instrumentation/internal/internal-reflection/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/internal/internal-reflection/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/internal/internal-url-class-loader/metadata.yaml b/instrumentation/internal/internal-url-class-loader/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/internal/internal-url-class-loader/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/java-util-logging/metadata.yaml b/instrumentation/java-util-logging/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/java-util-logging/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false diff --git a/instrumentation/methods/metadata.yaml b/instrumentation/methods/metadata.yaml new file mode 100644 index 0000000000..cc511c9865 --- /dev/null +++ b/instrumentation/methods/metadata.yaml @@ -0,0 +1 @@ +isLibraryInstrumentation: false