diff --git a/docs/instrumentation-list.yaml b/docs/instrumentation-list.yaml index 23b8df1abd11..711326046102 100644 --- a/docs/instrumentation-list.yaml +++ b/docs/instrumentation-list.yaml @@ -5536,6 +5536,35 @@ libraries: Enables experimental receive telemetry, which will cause consumers to start a new trace, with only a span link connecting it to the producer trace. type: boolean default: false + - name: kafka-connect-2.6 + description: This instrumentation enables messaging spans for Kafka Connect sink + tasks. + semantic_conventions: + - MESSAGING_SPANS + library_link: https://kafka.apache.org/documentation/#connect + source_path: instrumentation/kafka/kafka-connect-2.6 + scope: + name: io.opentelemetry.kafka-connect-2.6 + target_versions: + javaagent: + - org.apache.kafka:connect-api:[2.6.0,) + telemetry: + - when: default + spans: + - span_kind: CONSUMER + attributes: + - name: messaging.batch.message_count + type: LONG + - name: messaging.destination.name + type: STRING + - name: messaging.operation + type: STRING + - name: messaging.system + type: STRING + - name: thread.id + type: LONG + - name: thread.name + type: STRING - name: kafka-streams-0.11 library_link: https://kafka.apache.org/documentation/streams/ source_path: instrumentation/kafka/kafka-streams-0.11 @@ -7663,9 +7692,9 @@ libraries: - org.springframework.security:spring-security-config:[6.0.0,] library: - io.projectreactor:reactor-core:3.5.0 + - jakarta.servlet:jakarta.servlet-api:[6.0.0,6.1.0) - org.springframework.security:spring-security-config:6.0.0 - org.springframework:spring-web:6.0.0 - - jakarta.servlet:jakarta.servlet-api:6.0.0 - org.springframework.security:spring-security-web:6.0.0 configurations: - name: otel.instrumentation.common.enduser.id.enabled diff --git a/instrumentation-docs/instrumentations.sh b/instrumentation-docs/instrumentations.sh index 544dc5326bd8..4f71040da339 100755 --- a/instrumentation-docs/instrumentations.sh +++ b/instrumentation-docs/instrumentations.sh @@ -126,6 +126,7 @@ readonly INSTRUMENTATIONS=( "jetty-httpclient:jetty-httpclient-12.0:javaagent:test" "jetty-httpclient:jetty-httpclient-9.2:javaagent:test" "jodd-http-4.2:javaagent:test" + "kafka:kafka-connect-2.6:testing:test" "nats:nats-2.17:javaagent:test" "nats:nats-2.17:javaagent:testExperimental" "netty:netty-3.8:javaagent:test" diff --git a/instrumentation/kafka/kafka-connect-2.6/metadata.yaml b/instrumentation/kafka/kafka-connect-2.6/metadata.yaml new file mode 100644 index 000000000000..824ac80c665f --- /dev/null +++ b/instrumentation/kafka/kafka-connect-2.6/metadata.yaml @@ -0,0 +1,4 @@ +description: "This instrumentation enables messaging spans for Kafka Connect sink tasks." +semantic_conventions: + - MESSAGING_SPANS +library_link: https://kafka.apache.org/documentation/#connect \ No newline at end of file diff --git a/instrumentation/kafka/kafka-connect-2.6/testing/build.gradle.kts b/instrumentation/kafka/kafka-connect-2.6/testing/build.gradle.kts index 1c6ce0e18ceb..aed77d1225bd 100644 --- a/instrumentation/kafka/kafka-connect-2.6/testing/build.gradle.kts +++ b/instrumentation/kafka/kafka-connect-2.6/testing/build.gradle.kts @@ -35,4 +35,5 @@ dependencies { tasks.withType().configureEach { dependsOn(agentShadowJar) systemProperty("io.opentelemetry.smoketest.agent.shadowJar.path", agentShadowJar.get().archiveFile.get().toString()) + systemProperty("collectMetadata", findProperty("collectMetadata")?.toString() ?: "false") } diff --git a/smoke-tests/src/main/java/io/opentelemetry/smoketest/SmokeTestRunner.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/SmokeTestRunner.java index fcf6a54cdf16..5be8fcd0163c 100644 --- a/smoke-tests/src/main/java/io/opentelemetry/smoketest/SmokeTestRunner.java +++ b/smoke-tests/src/main/java/io/opentelemetry/smoketest/SmokeTestRunner.java @@ -7,9 +7,12 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.testing.InstrumentationTestRunner; +import io.opentelemetry.instrumentation.testing.internal.MetaDataCollector; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.trace.data.SpanData; +import java.io.File; +import java.io.IOException; import java.util.List; /** @@ -38,7 +41,15 @@ void setTelemetryRetriever(TelemetryRetriever telemetryRetriever) { public void beforeTestClass() {} @Override - public void afterTestClass() {} + public void afterTestClass() throws IOException { + // Generates files in a `.telemetry` directory within the instrumentation module with all + // captured emitted metadata to be used by the instrumentation-docs Doc generator. + if (Boolean.getBoolean("collectMetadata")) { + String path = new File("").getAbsolutePath(); + + MetaDataCollector.writeTelemetryToFiles(path, metricsByScope, tracesByScope); + } + } @Override public void clearAllExportedData() { diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/AgentTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/AgentTestRunner.java index 1199ef7b792e..834815ea17fb 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/AgentTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/AgentTestRunner.java @@ -16,9 +16,8 @@ import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.trace.data.SpanData; +import java.io.File; import java.io.IOException; -import java.net.URL; -import java.nio.file.Paths; import java.util.List; import org.slf4j.LoggerFactory; @@ -67,11 +66,7 @@ public void afterTestClass() throws IOException { // Generates files in a `.telemetry` directory within the instrumentation module with all // captured emitted metadata to be used by the instrumentation-docs Doc generator. if (Boolean.getBoolean("collectMetadata")) { - URL resource = this.getClass().getClassLoader().getResource(""); - if (resource == null) { - return; - } - String path = Paths.get(resource.getPath()).toString(); + String path = new File("").getAbsolutePath(); MetaDataCollector.writeTelemetryToFiles(path, metricsByScope, tracesByScope); } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/LibraryTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/LibraryTestRunner.java index d2aa42279d99..d21c95ba0135 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/LibraryTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/LibraryTestRunner.java @@ -44,9 +44,8 @@ import io.opentelemetry.sdk.trace.SpanProcessor; import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import java.io.File; import java.io.IOException; -import java.net.URL; -import java.nio.file.Paths; import java.time.Duration; import java.util.List; import java.util.concurrent.TimeUnit; @@ -133,11 +132,7 @@ public void afterTestClass() throws IOException { // Generates files in a `.telemetry` directory within the instrumentation module with all // captured emitted metadata to be used by the instrumentation-docs Doc generator. if (Boolean.getBoolean("collectMetadata")) { - URL resource = this.getClass().getClassLoader().getResource(""); - if (resource == null) { - return; - } - String path = Paths.get(resource.getPath()).toString(); + String path = new File("").getAbsolutePath(); MetaDataCollector.writeTelemetryToFiles(path, metricsByScope, tracesByScope); } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/internal/MetaDataCollector.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/internal/MetaDataCollector.java index 69ac56869af8..e352fbf935ad 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/internal/MetaDataCollector.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/internal/MetaDataCollector.java @@ -35,7 +35,7 @@ public final class MetaDataCollector { private static final String TMP_DIR = ".telemetry"; private static final Pattern MODULE_PATTERN = - Pattern.compile("(.*?/instrumentation/.*?)(/javaagent/|/library/)"); + Pattern.compile("(.*?/instrumentation/.*?)(/javaagent|/library|/testing)"); public static void writeTelemetryToFiles( String path,