diff --git a/communication/build.gradle b/communication/build.gradle deleted file mode 100644 index 2b621a99b4e..00000000000 --- a/communication/build.gradle +++ /dev/null @@ -1,70 +0,0 @@ -apply from: "$rootDir/gradle/java.gradle" - -dependencies { - implementation libs.slf4j - - api project(':remote-config:remote-config-api') - implementation project(':remote-config:remote-config-core') - implementation project(':internal-api') - implementation project(':utils:container-utils') - implementation project(':utils:socket-utils') - implementation project(':utils:version-utils') - - api libs.okio - api libs.okhttp - api libs.moshi - implementation libs.dogstatsd - - testImplementation project(':utils:test-utils') - testImplementation libs.bundles.junit5 - testImplementation libs.truth - testImplementation libs.bytebuddy - testImplementation group: 'org.msgpack', name: 'msgpack-core', version: '0.8.20' - testImplementation group: 'org.msgpack', name: 'jackson-dataformat-msgpack', version: '0.8.20' - testImplementation group: 'com.squareup.okhttp3', name: 'mockwebserver', version: libs.versions.okhttp.legacy.get() -} - -ext { - minimumBranchCoverage = 0.5 - minimumInstructionCoverage = 0.8 - excludedClassesCoverage = [ - 'datadog.communication.ddagent.ExternalAgentLauncher', - 'datadog.communication.ddagent.ExternalAgentLauncher.NamedPipeHealthCheck', - 'datadog.communication.ddagent.SharedCommunicationObjects.FixedConfigUrlSupplier', - 'datadog.communication.ddagent.SharedCommunicationObjects.RetryConfigUrlSupplier', - 'datadog.communication.http.OkHttpUtils', - 'datadog.communication.http.OkHttpUtils.1', - 'datadog.communication.http.OkHttpUtils.ByteBufferRequestBody', - 'datadog.communication.http.OkHttpUtils.CustomListener', - 'datadog.communication.http.OkHttpUtils.GZipByteBufferRequestBody', - 'datadog.communication.http.OkHttpUtils.GZipRequestBodyDecorator', - 'datadog.communication.http.OkHttpUtils.JsonRequestBody', - 'datadog.communication.monitor.DDAgentStatsDConnection', - 'datadog.communication.monitor.DDAgentStatsDConnection.*', - 'datadog.communication.monitor.LoggingStatsDClient', - 'datadog.communication.BackendApiFactory', - 'datadog.communication.BackendApiFactory.Intake', - 'datadog.communication.EvpProxyApi', - 'datadog.communication.IntakeApi', - 'datadog.communication.util.IOUtils', - 'datadog.communication.util.IOUtils.1', - ] - excludedClassesBranchCoverage = [ - 'datadog.communication.ddagent.TracerVersion', - 'datadog.communication.BackendApiFactory', - 'datadog.communication.EvpProxyApi', - 'datadog.communication.IntakeApi', - ] - excludedClassesInstructionCoverage = [ - // can't reach the error condition now - 'datadog.communication.fleet.FleetServiceImpl', - 'datadog.communication.ddagent.SharedCommunicationObjects', - 'datadog.communication.ddagent.TracerVersion', - 'datadog.communication.BackendApiFactory', - 'datadog.communication.BackendApiFactory.Intake', - 'datadog.communication.EvpProxyApi', - 'datadog.communication.IntakeApi', - 'datadog.communication.util.IOUtils', - 'datadog.communication.util.IOUtils.1', - ] -} diff --git a/communication/build.gradle.kts b/communication/build.gradle.kts new file mode 100644 index 00000000000..349f3a5fce5 --- /dev/null +++ b/communication/build.gradle.kts @@ -0,0 +1,84 @@ +plugins { + `java-library` +} + +description = "communication" + +apply(from = rootDir.resolve("gradle/java.gradle")) + +dependencies { + implementation(libs.slf4j) + + api(project(":remote-config:remote-config-api")) + implementation(project(":remote-config:remote-config-core")) + implementation(project(":internal-api")) + implementation(project(":utils:container-utils")) + implementation(project(":utils:socket-utils")) + implementation(project(":utils:version-utils")) + + api(libs.okio) + api(libs.okhttp) + api(libs.moshi) + implementation(libs.dogstatsd) + + testImplementation(project(":utils:test-utils")) + testImplementation(libs.bundles.junit5) + testImplementation(libs.truth) + testImplementation(libs.bytebuddy) + testImplementation("org.msgpack:msgpack-core:0.8.20") + testImplementation("org.msgpack:jackson-dataformat-msgpack:0.8.20") + testImplementation( + group = "com.squareup.okhttp3", + name = "mockwebserver", + version = libs.versions.okhttp.legacy.get() // actually a version range + ) +} + +val minimumBranchCoverage by extra(0.5) +val minimumInstructionCoverage by extra(0.8) +val excludedClassesCoverage by extra( + listOf( + "datadog.communication.ddagent.ExternalAgentLauncher", + "datadog.communication.ddagent.ExternalAgentLauncher.NamedPipeHealthCheck", + "datadog.communication.ddagent.SharedCommunicationObjects.FixedConfigUrlSupplier", + "datadog.communication.ddagent.SharedCommunicationObjects.RetryConfigUrlSupplier", + "datadog.communication.http.OkHttpUtils", + "datadog.communication.http.OkHttpUtils.1", + "datadog.communication.http.OkHttpUtils.ByteBufferRequestBody", + "datadog.communication.http.OkHttpUtils.CustomListener", + "datadog.communication.http.OkHttpUtils.GZipByteBufferRequestBody", + "datadog.communication.http.OkHttpUtils.GZipRequestBodyDecorator", + "datadog.communication.http.OkHttpUtils.JsonRequestBody", + "datadog.communication.monitor.DDAgentStatsDConnection", + "datadog.communication.monitor.DDAgentStatsDConnection.*", + "datadog.communication.monitor.LoggingStatsDClient", + "datadog.communication.BackendApiFactory", + "datadog.communication.BackendApiFactory.Intake", + "datadog.communication.EvpProxyApi", + "datadog.communication.IntakeApi", + "datadog.communication.util.IOUtils", + "datadog.communication.util.IOUtils.1", + ) +) +val excludedClassesBranchCoverage by extra( + listOf( + "datadog.communication.ddagent.TracerVersion", + "datadog.communication.BackendApiFactory", + "datadog.communication.EvpProxyApi", + "datadog.communication.IntakeApi", + ) +) +val excludedClassesInstructionCoverage by extra( + listOf( + // can't reach the error condition now + "datadog.communication.fleet.FleetServiceImpl", + "datadog.communication.ddagent.SharedCommunicationObjects", + "datadog.communication.ddagent.TracerVersion", + "datadog.communication.BackendApiFactory", + "datadog.communication.BackendApiFactory.Intake", + "datadog.communication.EvpProxyApi", + "datadog.communication.IntakeApi", + "datadog.communication.util.IOUtils", + "datadog.communication.util.IOUtils.1", + ) +) diff --git a/dd-trace-api/build.gradle b/dd-trace-api/build.gradle deleted file mode 100644 index c4b00313208..00000000000 --- a/dd-trace-api/build.gradle +++ /dev/null @@ -1,54 +0,0 @@ -apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/publish.gradle" - -minimumBranchCoverage = 0.8 - -// These are tested outside of this module since this module mainly just defines 'API' -excludedClassesCoverage += [ - 'datadog.trace.api.ConfigDefaults', - 'datadog.trace.api.CorrelationIdentifier', - 'datadog.trace.api.DDSpanTypes', - 'datadog.trace.api.DDTags', - 'datadog.trace.api.DDTraceApiInfo', - 'datadog.trace.api.DDTraceId', - 'datadog.trace.api.EventTracker', - 'datadog.trace.api.GlobalTracer*', - 'datadog.trace.api.PropagationStyle', - 'datadog.trace.api.TracePropagationStyle', - 'datadog.trace.api.TracePropagationBehaviorExtract', - 'datadog.trace.api.SpanCorrelation*', - 'datadog.trace.api.internal.TraceSegment', - 'datadog.trace.api.internal.TraceSegment.NoOp', - 'datadog.trace.api.civisibility.CIVisibility', - 'datadog.trace.api.civisibility.DDTestModule', - 'datadog.trace.api.civisibility.noop.NoOpDDTest', - 'datadog.trace.api.civisibility.noop.NoOpDDTestModule', - 'datadog.trace.api.civisibility.noop.NoOpDDTestSession', - 'datadog.trace.api.civisibility.noop.NoOpDDTestSuite', - 'datadog.trace.api.config.ProfilingConfig', - 'datadog.trace.api.interceptor.MutableSpan', - 'datadog.trace.api.profiling.Profiling', - 'datadog.trace.api.profiling.Profiling.NoOp', - 'datadog.trace.api.profiling.ProfilingScope', - 'datadog.trace.api.profiling.ProfilingContext', - 'datadog.trace.api.profiling.ProfilingContextAttribute.NoOp', - 'datadog.trace.api.experimental.DataStreamsCheckpointer', - 'datadog.trace.api.experimental.DataStreamsCheckpointer.NoOp', - 'datadog.trace.api.experimental.DataStreamsContextCarrier', - 'datadog.trace.api.experimental.DataStreamsContextCarrier.NoOp', - 'datadog.appsec.api.blocking.*', - 'datadog.appsec.api.user.*', - 'datadog.appsec.api.login.*', - // Default fallback methods to not break legacy API - 'datadog.trace.context.TraceScope', - 'datadog.trace.context.NoopTraceScope.NoopContinuation', - 'datadog.trace.context.NoopTraceScope', - 'datadog.trace.payloadtags.PayloadTagsData', - 'datadog.trace.payloadtags.PayloadTagsData.PathAndValue', -] - -description = 'dd-trace-api' -dependencies { - testImplementation libs.guava - testImplementation project(':utils:test-utils') -} diff --git a/dd-trace-api/build.gradle.kts b/dd-trace-api/build.gradle.kts new file mode 100644 index 00000000000..4843cd14b9a --- /dev/null +++ b/dd-trace-api/build.gradle.kts @@ -0,0 +1,61 @@ +plugins { + `java-library` +} + +apply(from = "$rootDir/gradle/java.gradle") +apply(from = "$rootDir/gradle/publish.gradle") + +val minimumBranchCoverage by extra(0.8) + +// These are tested outside of this module since this module mainly just defines 'API' +val excludedClassesCoverage by extra( + listOf( + "datadog.trace.api.ConfigDefaults", + "datadog.trace.api.CorrelationIdentifier", + "datadog.trace.api.DDSpanTypes", + "datadog.trace.api.DDTags", + "datadog.trace.api.DDTraceApiInfo", + "datadog.trace.api.DDTraceId", + "datadog.trace.api.EventTracker", + "datadog.trace.api.GlobalTracer*", + "datadog.trace.api.PropagationStyle", + "datadog.trace.api.TracePropagationStyle", + "datadog.trace.api.TracePropagationBehaviorExtract", + "datadog.trace.api.SpanCorrelation*", + "datadog.trace.api.internal.TraceSegment", + "datadog.trace.api.internal.TraceSegment.NoOp", + "datadog.trace.api.civisibility.CIVisibility", + "datadog.trace.api.civisibility.DDTestModule", + "datadog.trace.api.civisibility.noop.NoOpDDTest", + "datadog.trace.api.civisibility.noop.NoOpDDTestModule", + "datadog.trace.api.civisibility.noop.NoOpDDTestSession", + "datadog.trace.api.civisibility.noop.NoOpDDTestSuite", + "datadog.trace.api.config.ProfilingConfig", + "datadog.trace.api.interceptor.MutableSpan", + "datadog.trace.api.profiling.Profiling", + "datadog.trace.api.profiling.Profiling.NoOp", + "datadog.trace.api.profiling.ProfilingScope", + "datadog.trace.api.profiling.ProfilingContext", + "datadog.trace.api.profiling.ProfilingContextAttribute.NoOp", + "datadog.trace.api.experimental.DataStreamsCheckpointer", + "datadog.trace.api.experimental.DataStreamsCheckpointer.NoOp", + "datadog.trace.api.experimental.DataStreamsContextCarrier", + "datadog.trace.api.experimental.DataStreamsContextCarrier.NoOp", + "datadog.appsec.api.blocking.*", + "datadog.appsec.api.user.*", + "datadog.appsec.api.login.*", + // Default fallback methods to not break legacy API + "datadog.trace.context.TraceScope", + "datadog.trace.context.NoopTraceScope.NoopContinuation", + "datadog.trace.context.NoopTraceScope", + "datadog.trace.payloadtags.PayloadTagsData", + "datadog.trace.payloadtags.PayloadTagsData.PathAndValue" + ) +) + +description = "dd-trace-api" + +dependencies { + testImplementation(libs.guava) + testImplementation(project(":utils:test-utils")) +} diff --git a/dd-trace-ot/build.gradle b/dd-trace-ot/build.gradle deleted file mode 100644 index 7f0ceec8f60..00000000000 --- a/dd-trace-ot/build.gradle +++ /dev/null @@ -1,183 +0,0 @@ -plugins { - id 'com.gradleup.shadow' - id 'me.champeau.jmh' -} - -description = 'dd-trace-ot' - -apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/publish.gradle" - -// TODO raise these when equals() and hashCode() are excluded -minimumBranchCoverage = 0.5 -minimumInstructionCoverage = 0.5 - -excludedClassesCoverage += [ - // This is mainly equals() and hashCode() - "datadog.opentracing.OTScopeManager.OTScope", - "datadog.opentracing.OTScopeManager.FakeScope", - "datadog.opentracing.OTSpan", - "datadog.opentracing.OTSpanContext", - "datadog.opentracing.CustomScopeManagerWrapper.CustomScopeState", - // The builder is generated - "datadog.opentracing.DDTracer.DDTracerBuilder" -] - -addTestSuite('ot31CompatibilityTest') -addTestSuite('ot33CompatibilityTest') - -dependencies { - annotationProcessor libs.autoservice.processor - compileOnly libs.autoservice.annotation - - modules { - module("com.squareup.okio:okio") { - replacedBy("com.datadoghq.okio:okio") // embed our patched fork - } - } - - api project(':dd-trace-api') - implementation(project(':dd-trace-core')) { - // why all communication pulls in remote config is beyond me... - exclude(group: 'com.datadoghq', module: 'remote-config-core') - } - // exception replay - implementation(project(':dd-java-agent:agent-debugger:debugger-bootstrap')) - - // OpenTracing - api group: 'io.opentracing', name: 'opentracing-api', version: '0.32.0' - api group: 'io.opentracing', name: 'opentracing-noop', version: '0.32.0' - api group: 'io.opentracing', name: 'opentracing-util', version: '0.32.0' - api group: 'io.opentracing.contrib', name: 'opentracing-tracerresolver', version: '0.1.6' - - api libs.slf4j - api libs.jnr.unixsocket - - implementation project(':dd-trace-ot:correlation-id-injection') - - testImplementation project(":dd-java-agent:testing") - - ot33CompatibilityTestImplementation('io.opentracing:opentracing-api') { - version { - strictly '0.33.0' - } - } - ot33CompatibilityTestImplementation('io.opentracing:opentracing-util') { - version { - strictly '0.33.0' - } - } - ot33CompatibilityTestImplementation('io.opentracing:opentracing-noop') { - version { - strictly '0.33.0' - } - } -} - -// gradle can't downgrade the opentracing dependencies with `strictly` -configurations.matching({ it.name.startsWith('ot31') }).each({ - it.resolutionStrategy { - force group: 'io.opentracing', name: 'opentracing-api', version: '0.31.0' - force group: 'io.opentracing', name: 'opentracing-util', version: '0.31.0' - force group: 'io.opentracing', name: 'opentracing-noop', version: '0.31.0' - } -}) - -tasks.named("test").configure { - finalizedBy "ot31CompatibilityTest", "ot33CompatibilityTest" -} - -jar { - destinationDirectory.set(file("$buildDir/libs-unbundled")) - archiveClassifier = 'unbundled' -} - -shadowJar { - archiveClassifier = '' - - dependencies { - // direct dependencies - exclude(project(':dd-trace-api')) - exclude(dependency('io.opentracing:')) - exclude(dependency('io.opentracing.contrib:')) - exclude(dependency('org.slf4j:')) - exclude(dependency('com.github.jnr:')) - } - - relocate('com.', 'ddtrot.com.') { - // leave our PatchInit class shaded even though its not used in this deployment - // unfortunately the shadow plugin doesn't let us completely remove this class - exclude('%regex[com/kenai/jffi/(?!PatchInit)[^/]*]') - } - relocate('dogstatsd/', 'ddtrot/dogstatsd/') - relocate('okhttp3.', 'ddtrot.okhttp3.') - relocate('okio.', 'ddtrot.okio.') - relocate('org.', 'ddtrot.org.') { - exclude('org.slf4j.*') - } - relocate('datadog.', 'ddtrot.dd.') { - exclude('datadog.opentracing.*') - exclude('datadog.opentracing.resolver.*') - exclude('%regex[datadog/trace/api/(?!Functions|Endpoint)[^/]*]') - exclude('datadog.trace.api.config.*') - exclude('datadog.trace.api.experimental.*') - exclude('datadog.trace.api.interceptor.*') - exclude('datadog.trace.api.internal.*') - exclude('datadog.trace.api.internal.util.*') - exclude('datadog.trace.api.profiling.*') - exclude('datadog.trace.api.sampling.*') - exclude('datadog.trace.context.*') - } - - duplicatesStrategy = DuplicatesStrategy.FAIL - - // Remove some cruft from the final jar. - // These patterns should NOT include **/META-INF/maven/**/pom.properties, which is - // used to report our own dependencies. - exclude '**/META-INF/maven/**/pom.xml' - exclude('META-INF/proguard/') - exclude('/META-INF/*.kotlin_module') -} - -jmh { - // include = [".*URLAsResourceNameBenchmark"] - // include = ['some regular expression'] // include pattern (regular expression) for benchmarks to be executed - // exclude = ['some regular expression'] // exclude pattern (regular expression) for benchmarks to be executed - iterations = 1 // Number of measurement iterations to do. - benchmarkMode = ['thrpt', 'avgt', 'ss'] - // Benchmark mode. Available modes are: [Throughput/thrpt, AverageTime/avgt, SampleTime/sample, SingleShotTime/ss, All/all] - batchSize = 1 - // Batch size: number of benchmark method calls per operation. (some benchmark modes can ignore this setting) - fork = 1 // How many times to forks a single benchmark. Use 0 to disable forking altogether - failOnError = false // Should JMH fail immediately if any benchmark had experienced the unrecoverable error? - forceGC = false // Should JMH force GC between iterations? - // jvm = 'myjvm' // Custom JVM to use when forking. - // jvmArgs = ['Custom JVM args to use when forking.'] - // jvmArgsAppend = ['Custom JVM args to use when forking (append these)'] - // jvmArgsPrepend =[ 'Custom JVM args to use when forking (prepend these)'] - // humanOutputFile = project.file("${project.buildDir}/reports/jmh/human.txt") // human-readable output file - // resultsFile = project.file("${project.buildDir}/reports/jmh/results.txt") // results file - // operationsPerInvocation = 10 // Operations per invocation. - // benchmarkParameters = [:] // Benchmark parameters. - // profilers = ['stack'] // Use profilers to collect additional data. Supported profilers: [cl, comp, gc, stack, perf, perfnorm, perfasm, xperf, xperfasm, hs_cl, hs_comp, hs_gc, hs_rt, hs_thr] - timeOnIteration = '1s' // Time to spend at each measurement iteration. - // resultFormat = 'CSV' // Result format type (one of CSV, JSON, NONE, SCSV, TEXT) - // synchronizeIterations = false // Synchronize iterations? - // threads = 2 // Number of worker threads to run with. - // threadGroups = [2,3,4] //Override thread group distribution for asymmetric benchmarks. - // timeout = '1s' // Timeout for benchmark iteration. - timeUnit = 'us' // Output time unit. Available time units are: [m, s, ms, us, ns]. - // verbosity = 'NORMAL' // Verbosity mode. Available modes are: [SILENT, NORMAL, EXTRA] - warmup = '2s' // Time to spend at each warmup iteration. - // warmupBatchSize = 10 // Warmup batch size: number of benchmark method calls per operation. - warmupForks = 1 // How many warmup forks to make for a single benchmark. 0 to disable warmup forks. - warmupIterations = 1 // Number of warmup iterations to do. - // warmupMode = 'INDI' // Warmup mode for warming up selected benchmarks. Warmup modes are: [INDI, BULK, BULK_INDI]. - // warmupBenchmarks = ['.*Warmup'] // Warmup benchmarks to include in the run in addition to already selected. JMH will not measure these benchmarks, but only use them for the warmup. - - // zip64 = true // Use ZIP64 format for bigger archives - jmhVersion = '1.23' // Specifies JMH version - // includeTests = true // Allows to include test sources into generate JMH jar, i.e. use it when benchmarks depend on the test classes. - //duplicateClassesStrategy = 'warn' - // Strategy to apply when encountring duplicate classes during creation of the fat jar (i.e. while executing jmhJar task) -} diff --git a/dd-trace-ot/build.gradle.kts b/dd-trace-ot/build.gradle.kts new file mode 100644 index 00000000000..03df2f5bf48 --- /dev/null +++ b/dd-trace-ot/build.gradle.kts @@ -0,0 +1,200 @@ +import groovy.lang.Closure + +plugins { + `java-library` + id("com.gradleup.shadow") + id("me.champeau.jmh") +} + +description = "dd-trace-ot" + +apply(from = rootDir.resolve("gradle/java.gradle")) +apply(from = rootDir.resolve("gradle/publish.gradle")) + +// TODO raise these when equals() and hashCode() are excluded +val minimumBranchCoverage by extra(0.5) +val minimumInstructionCoverage by extra(0.5) + +val excludedClassesCoverage by extra( + listOf( + // This is mainly equals() and hashCode() + "datadog.opentracing.OTScopeManager.OTScope", + "datadog.opentracing.OTScopeManager.FakeScope", + "datadog.opentracing.OTSpan", + "datadog.opentracing.OTSpanContext", + "datadog.opentracing.CustomScopeManagerWrapper.CustomScopeState", + // The builder is generated + "datadog.opentracing.DDTracer.DDTracerBuilder" + ) +) + +// Helper extensions for custom methods from Groovy DSL +fun addTestSuite(name: String) { + (project.extra["addTestSuite"] as? Closure<*>)?.call(name) +} + +addTestSuite("ot31CompatibilityTest") +addTestSuite("ot33CompatibilityTest") + +dependencies { + annotationProcessor(libs.autoservice.processor) + compileOnly(libs.autoservice.annotation) + + modules { + module("com.squareup.okio:okio") { + replacedBy("com.datadoghq.okio:okio") // embed our patched fork + } + } + + api(project(":dd-trace-api")) + implementation(project(":dd-trace-core")) { + // why all communication pulls in remote config is beyond me... + exclude(group = "com.datadoghq", module = "remote-config-core") + } + // exception replay + implementation(project(":dd-java-agent:agent-debugger:debugger-bootstrap")) + + // OpenTracing + api("io.opentracing:opentracing-api:0.32.0") + api("io.opentracing:opentracing-noop:0.32.0") + api("io.opentracing:opentracing-util:0.32.0") + api("io.opentracing.contrib:opentracing-tracerresolver:0.1.6") + + api(libs.slf4j) + api(libs.jnr.unixsocket) + + implementation(project(":dd-trace-ot:correlation-id-injection")) + + testImplementation(project(":dd-java-agent:testing")) + + // Kotlin accessors not generated if not coming from plugin + add("ot33CompatibilityTestImplementation", "io.opentracing:opentracing-api") { + version { + strictly("0.33.0") + } + } + add("ot33CompatibilityTestImplementation", "io.opentracing:opentracing-util") { + version { + strictly("0.33.0") + } + } + add("ot33CompatibilityTestImplementation", "io.opentracing:opentracing-noop") { + version { + strictly("0.33.0") + } + } +} + +// gradle can't downgrade the opentracing dependencies with `strictly` +configurations.matching { it.name.startsWith("ot31") }.all { + resolutionStrategy { + force("io.opentracing:opentracing-api:0.31.0") + force("io.opentracing:opentracing-util:0.31.0") + force("io.opentracing:opentracing-noop:0.31.0") + } +} + +tasks.test { + finalizedBy( + tasks.named("ot31CompatibilityTest"), + tasks.named("ot33CompatibilityTest"), + ) +} + +tasks.jar { + destinationDirectory = layout.buildDirectory.dir("libs-unbundled") + archiveClassifier = "unbundled" +} + +// shadowJar configuration + +// The shadowJar block configures the shadow JAR packaging +// and dependency relocation/exclusion rules. +tasks.named("shadowJar") { + archiveClassifier = "" + + dependencies { + // direct dependencies + exclude(project(":dd-trace-api")) + exclude(dependency("io.opentracing:")) + exclude(dependency("io.opentracing.contrib:")) + exclude(dependency("org.slf4j:")) + exclude(dependency("com.github.jnr:")) + } + + relocate("com.", "ddtrot.com.") { + // leave our PatchInit class shaded even though its not used in this deployment + // unfortunately the shadow plugin doesn't let us completely remove this class + exclude("%regex[com/kenai/jffi/(?!PatchInit)[^/]*]") + } + relocate("dogstatsd/", "ddtrot/dogstatsd/") + relocate("okhttp3.", "ddtrot.okhttp3.") + relocate("okio.", "ddtrot.okio.") + relocate("org.", "ddtrot.org.") { + exclude("org.slf4j.*") + } + relocate("datadog.", "ddtrot.dd.") { + exclude("datadog.opentracing.*") + exclude("datadog.opentracing.resolver.*") + exclude("%regex[datadog/trace/api/(?!Functions|Endpoint)[^/]*]") + exclude("datadog.trace.api.config.*") + exclude("datadog.trace.api.experimental.*") + exclude("datadog.trace.api.interceptor.*") + exclude("datadog.trace.api.internal.*") + exclude("datadog.trace.api.internal.util.*") + exclude("datadog.trace.api.profiling.*") + exclude("datadog.trace.api.sampling.*") + exclude("datadog.trace.context.*") + } + + duplicatesStrategy = DuplicatesStrategy.FAIL + + // Remove some cruft from the final jar. + // These patterns should NOT include **/META-INF/maven/**/pom.properties, which is + // used to report our own dependencies. + exclude("**/META-INF/maven/**/pom.xml") + exclude("META-INF/proguard/") + exclude("/META-INF/*.kotlin_module") +} + +jmh { + // include = [".*URLAsResourceNameBenchmark"] + // include = ['some regular expression'] // include pattern (regular expression) for benchmarks to be executed + // exclude = ['some regular expression'] // exclude pattern (regular expression) for benchmarks to be executed + iterations = 1 // Number of measurement iterations to do. + benchmarkMode = listOf("thrpt", "avgt", "ss") + // Benchmark mode. Available modes are: [Throughput/thrpt, AverageTime/avgt, SampleTime/sample, SingleShotTime/ss, All/all] + batchSize = 1 + // Batch size: number of benchmark method calls per operation. (some benchmark modes can ignore this setting) + fork = 1 // How many times to forks a single benchmark. Use 0 to disable forking altogether + failOnError = false // Should JMH fail immediately if any benchmark had experienced the unrecoverable error? + forceGC = false // Should JMH force GC between iterations? + // jvm = 'myjvm' // Custom JVM to use when forking. + // jvmArgs = ['Custom JVM args to use when forking.'] + // jvmArgsAppend = ['Custom JVM args to use when forking (append these)'] + // jvmArgsPrepend =[ 'Custom JVM args to use when forking (prepend these)'] + // humanOutputFile = project.file("${project.buildDir}/reports/jmh/human.txt") // human-readable output file + // resultsFile = project.file("${project.buildDir}/reports/jmh/results.txt") // results file + // operationsPerInvocation = 10 // Operations per invocation. + // benchmarkParameters = [:] // Benchmark parameters. + // profilers = ['stack'] // Use profilers to collect additional data. Supported profilers: [cl, comp, gc, stack, perf, perfnorm, perfasm, xperf, xperfasm, hs_cl, hs_comp, hs_gc, hs_rt, hs_thr] + timeOnIteration = "1s" // Time to spend at each measurement iteration. + // resultFormat = 'CSV' // Result format type (one of CSV, JSON, NONE, SCSV, TEXT) + // synchronizeIterations = false // Synchronize iterations? + // threads = 2 // Number of worker threads to run with. + // threadGroups = [2,3,4] //Override thread group distribution for asymmetric benchmarks. + // timeout = '1s' // Timeout for benchmark iteration. + timeUnit = "us" // Output time unit. Available time units are: [m, s, ms, us, ns]. + // verbosity = 'NORMAL' // Verbosity mode. Available modes are: [SILENT, NORMAL, EXTRA] + warmup = "2s" // Time to spend at each warmup iteration. + // warmupBatchSize = 10 // Warmup batch size: number of benchmark method calls per operation. + warmupForks = 1 // How many warmup forks to make for a single benchmark. 0 to disable warmup forks. + warmupIterations = 1 // Number of warmup iterations to do. + // warmupMode = 'INDI' // Warmup mode for warming up selected benchmarks. Warmup modes are: [INDI, BULK, BULK_INDI]. + // warmupBenchmarks = ['.*Warmup'] // Warmup benchmarks to include in the run in addition to already selected. JMH will not measure these benchmarks, but only use them for the warmup. + + // zip64 = true // Use ZIP64 format for bigger archives + jmhVersion = "1.23" // Specifies JMH version + // includeTests = true // Allows to include test sources into generate JMH jar, i.e. use it when benchmarks depend on the test classes. + // duplicateClassesStrategy = 'warn' // Strategy to apply when encountring duplicate classes during creation of the fat jar (i.e. while executing jmhJar task) +} diff --git a/dd-trace-ot/correlation-id-injection/build.gradle b/dd-trace-ot/correlation-id-injection/build.gradle deleted file mode 100644 index 5361af8b4ff..00000000000 --- a/dd-trace-ot/correlation-id-injection/build.gradle +++ /dev/null @@ -1,27 +0,0 @@ -apply from: "$rootDir/gradle/java.gradle" - -minimumBranchCoverage = 0.8 - -excludedClassesCoverage += [ - 'datadog.trace.correlation.CorrelationIdInjectors', - 'datadog.trace.correlation.CorrelationIdInjectors.InjectorType' -] - -description = 'correlation-id-injection' - -def log4j1 = '1.2.17' -def log4j2 = '2.19.0' -def logback = '1.3.5' - -dependencies { - api project(':dd-trace-api') - implementation libs.slf4j - compileOnly "org.apache.logging.log4j:log4j-api:${log4j2}" - compileOnly "log4j:log4j:${log4j1}" - - testImplementation libs.guava - testImplementation project(':dd-trace-ot') - testImplementation project(":dd-java-agent:testing") - testImplementation "org.apache.logging.log4j:log4j-core:${log4j2}" - testImplementation "ch.qos.logback:logback-core:${logback}" -} diff --git a/dd-trace-ot/correlation-id-injection/build.gradle.kts b/dd-trace-ot/correlation-id-injection/build.gradle.kts new file mode 100644 index 00000000000..f2613570972 --- /dev/null +++ b/dd-trace-ot/correlation-id-injection/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + `java-library` +} + +apply(from = "$rootDir/gradle/java.gradle") + +val minimumBranchCoverage by extra(0.8) + +val excludedClassesCoverage by extra( + listOf( + "datadog.trace.correlation.CorrelationIdInjectors", + "datadog.trace.correlation.CorrelationIdInjectors.InjectorType" + ) +) + +description = "correlation-id-injection" + +val log4j1 = "1.2.17" +val log4j2 = "2.19.0" +val logback = "1.3.5" + +dependencies { + api(project(":dd-trace-api")) + implementation(libs.slf4j) + compileOnly("org.apache.logging.log4j:log4j-api:$log4j2") + compileOnly("log4j:log4j:$log4j1") + + testImplementation(libs.guava) + testImplementation(project(":dd-trace-ot")) + testImplementation(project(":dd-java-agent:testing")) + testImplementation("org.apache.logging.log4j:log4j-core:$log4j2") + testImplementation("ch.qos.logback:logback-core:$logback") +} diff --git a/internal-api/build.gradle b/internal-api/build.gradle deleted file mode 100644 index f0282bad489..00000000000 --- a/internal-api/build.gradle +++ /dev/null @@ -1,272 +0,0 @@ -plugins { - id 'me.champeau.jmh' -} - -ext { - // need access to sun.misc.SharedSecrets - skipSettingCompilerRelease = true -} - -// sun.misc.SharedSecrets is gone in later versions -compileJava { - javaCompiler = javaToolchains.compilerFor { - languageVersion = JavaLanguageVersion.of(8) - } -} - -apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/tries.gradle" - -tasks.compileTestJava.configure { - setJavaVersion(it, 8) -} - -minimumBranchCoverage = 0.7 -minimumInstructionCoverage = 0.8 - -excludedClassesCoverage += [ - "datadog.trace.api.ClassloaderConfigurationOverrides", - "datadog.trace.api.ClassloaderConfigurationOverrides.Lazy", - // Interface - "datadog.trace.api.EndpointTracker", - // Noop implementation - "datadog.trace.api.NoOpStatsDClient", - "datadog.trace.api.Platform", - // Interface - "datadog.trace.api.StatsDClient", - // Noop implementation - "datadog.trace.api.TraceSegment.NoOp", - "datadog.trace.api.WithGlobalTracer.1", - "datadog.trace.api.gateway.Events.ET", - // Noop implementation - "datadog.trace.api.gateway.RequestContext.Noop", - // Enum - "datadog.trace.api.intake.TrackType", - "datadog.trace.api.naming.**", - // Enum - "datadog.trace.api.profiling.ProfilingSnapshot.Kind", - "datadog.trace.api.sampling.AdaptiveSampler", - "datadog.trace.api.sampling.ConstantSampler", - "datadog.trace.api.sampling.SamplingRule.Provenance", - "datadog.trace.api.sampling.SamplingRule.TraceSamplingRule.TargetSpan", - "datadog.trace.api.EndpointCheckpointerHolder", - "datadog.trace.api.iast.IastAdvice.Kind", - "datadog.trace.api.UserEventTrackingMode", - // These are almost fully abstract classes so nothing to test - 'datadog.trace.api.profiling.RecordingData', - 'datadog.trace.api.appsec.AppSecEventTracker', - // A plain enum - 'datadog.trace.api.profiling.RecordingType', - // Data Streams Monitoring - "datadog.trace.api.datastreams.Backlog", - "datadog.trace.api.datastreams.InboxItem", - "datadog.trace.api.datastreams.NoopDataStreamsMonitoring", - "datadog.trace.api.datastreams.NoopPathwayContext", - "datadog.trace.api.datastreams.StatsPoint", - // Bootstrap API - "datadog.trace.bootstrap.ActiveSubsystems", - "datadog.trace.bootstrap.ContextStore.Factory", - "datadog.trace.bootstrap.config.provider.ConfigProvider.Singleton", - "datadog.trace.bootstrap.instrumentation.api.java.lang.ProcessImplInstrumentationHelpers", - "datadog.trace.bootstrap.instrumentation.api.Tags", - "datadog.trace.bootstrap.instrumentation.api.CommonTagValues", - // Caused by empty 'default' interface method - "datadog.trace.bootstrap.instrumentation.api.AgentPropagation", - "datadog.trace.bootstrap.instrumentation.api.AgentPropagation.ContextVisitor", - "datadog.trace.bootstrap.instrumentation.api.AgentScope", - "datadog.trace.bootstrap.instrumentation.api.AgentSpan", - "datadog.trace.bootstrap.instrumentation.api.AgentSpanContext", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentHistogram", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentTraceCollector", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopTraceConfig", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopTracerAPI", - "datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI", - "datadog.trace.bootstrap.instrumentation.api.BlackHoleSpan", - "datadog.trace.bootstrap.instrumentation.api.BlackHoleSpan.Context", - "datadog.trace.bootstrap.instrumentation.api.ErrorPriorities", - "datadog.trace.bootstrap.instrumentation.api.ExtractedSpan", - "datadog.trace.bootstrap.instrumentation.api.ImmutableSpan", - "datadog.trace.bootstrap.instrumentation.api.InstrumentationTags", - "datadog.trace.bootstrap.instrumentation.api.InternalContextKeys", - "datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes", - "datadog.trace.bootstrap.instrumentation.api.NoopAgentScope", - "datadog.trace.bootstrap.instrumentation.api.NoopAgentSpan", - "datadog.trace.bootstrap.instrumentation.api.NoopContinuation", - "datadog.trace.bootstrap.instrumentation.api.NoopScope", - "datadog.trace.bootstrap.instrumentation.api.NoopSpan", - "datadog.trace.bootstrap.instrumentation.api.NoopSpanContext", - "datadog.trace.bootstrap.instrumentation.api.NotSampledSpanContext", - "datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities", - "datadog.trace.bootstrap.instrumentation.api.Schema", - "datadog.trace.bootstrap.instrumentation.api.ScopeSource", - "datadog.trace.bootstrap.instrumentation.api.ScopedContext", - "datadog.trace.bootstrap.instrumentation.api.ScopedContextKey", - "datadog.trace.bootstrap.instrumentation.api.TagContext", - "datadog.trace.bootstrap.instrumentation.api.TagContext.HttpHeaders", - "datadog.trace.api.civisibility.config.TestIdentifier", - "datadog.trace.api.civisibility.config.TestFQN", - "datadog.trace.api.civisibility.config.TestMetadata", - "datadog.trace.api.civisibility.config.TestSourceData", - "datadog.trace.api.civisibility.config.LibraryCapability", - "datadog.trace.api.civisibility.coverage.CoveragePerTestBridge", - "datadog.trace.api.civisibility.coverage.CoveragePercentageBridge", - "datadog.trace.api.civisibility.coverage.NoOpCoverageStore", - "datadog.trace.api.civisibility.coverage.NoOpCoverageStore.Factory", - "datadog.trace.api.civisibility.coverage.NoOpProbes", - "datadog.trace.api.civisibility.coverage.TestReport", - "datadog.trace.api.civisibility.coverage.TestReportFileEntry", - "datadog.trace.api.civisibility.domain.BuildModuleLayout", - "datadog.trace.api.civisibility.domain.BuildModuleSettings", - "datadog.trace.api.civisibility.domain.BuildSessionSettings", - "datadog.trace.api.civisibility.domain.JavaAgent", - "datadog.trace.api.civisibility.domain.Language", - "datadog.trace.api.civisibility.domain.SourceSet", - "datadog.trace.api.civisibility.domain.SourceSet.Type", - "datadog.trace.api.civisibility.events.BuildEventsHandler.ModuleInfo", - "datadog.trace.api.civisibility.events.TestDescriptor", - "datadog.trace.api.civisibility.events.TestSuiteDescriptor", - "datadog.trace.api.civisibility.execution.TestStatus", - "datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric", - "datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric.IndexHolder", - "datadog.trace.api.civisibility.telemetry.CiVisibilityDistributionMetric", - "datadog.trace.api.civisibility.telemetry.CiVisibilityMetricData", - "datadog.trace.api.civisibility.telemetry.NoOpMetricCollector", - "datadog.trace.api.civisibility.telemetry.tag.*", - "datadog.trace.api.civisibility.config.Configurations", - "datadog.trace.api.civisibility.CiVisibilityWellKnownTags", - "datadog.trace.api.civisibility.InstrumentationBridge", - "datadog.trace.api.civisibility.InstrumentationTestBridge", - // POJO - "datadog.trace.api.git.GitInfo", - "datadog.trace.api.git.GitInfoProvider", - "datadog.trace.api.git.GitInfoProvider.ShaDiscrepancy", - // POJO - "datadog.trace.api.git.PersonInfo", - // POJO - "datadog.trace.api.git.CommitInfo", - // POJO - "datadog.trace.api.git.GitUtils", - // tested indirectly by dependent modules - "datadog.trace.api.git.RawParseUtils", - // tested indirectly by dependent modules - "datadog.trace.api.Config", - "datadog.trace.api.Config.HostNameHolder", - "datadog.trace.api.Config.RuntimeIdHolder", - "datadog.trace.api.ConfigCollector", - "datadog.trace.api.DynamicConfig", - "datadog.trace.api.DynamicConfig.Builder", - "datadog.trace.api.DynamicConfig.Snapshot", - "datadog.trace.api.InstrumenterConfig", - "datadog.trace.api.ResolverCacheConfig.*", - "datadog.trace.api.logging.intake.LogsIntake", - "datadog.trace.logging.LoggingSettingsDescription", - "datadog.trace.util.AgentProxySelector", - "datadog.trace.util.AgentTaskScheduler", - "datadog.trace.util.AgentTaskScheduler.PeriodicTask", - "datadog.trace.util.AgentTaskScheduler.ShutdownHook", - "datadog.trace.util.AgentThreadFactory", - "datadog.trace.util.AgentThreadFactory.1", - "datadog.trace.util.ClassNameTrie.Builder", - "datadog.trace.util.ClassNameTrie.JavaGenerator", - "datadog.trace.util.CollectionUtils", - "datadog.trace.util.ComparableVersion", - "datadog.trace.util.ComparableVersion.BigIntegerItem", - "datadog.trace.util.ComparableVersion.IntItem", - "datadog.trace.util.ComparableVersion.ListItem", - "datadog.trace.util.ComparableVersion.LongItem", - "datadog.trace.util.ComparableVersion.StringItem", - "datadog.trace.util.ConcurrentEnumMap", - "datadog.trace.util.JPSUtils", - "datadog.trace.util.MethodHandles", - "datadog.trace.util.PidHelper", - "datadog.trace.util.PidHelper.Fallback", - "datadog.trace.util.ProcessUtils", - "datadog.trace.util.PropagationUtils", - "datadog.trace.util.UnsafeUtils", - // can't reliably force same identity hash for different instance to cover branch - "datadog.trace.api.cache.FixedSizeCache.IdentityHash", - "datadog.trace.api.cache.FixedSizeWeakKeyCache", - // Interface with default method - "datadog.trace.api.StatsDClientManager", - "datadog.trace.api.iast.Taintable", - "datadog.trace.api.Stateful", - "datadog.trace.api.Stateful.1", - // a stub - "datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration", - "datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration.NoOp", - // debug - 'datadog.trace.api.iast.Taintable.DebugLogger', - // POJO - 'datadog.trace.api.iast.util.Cookie', - 'datadog.trace.api.iast.util.Cookie.Builder', - 'datadog.trace.api.telemetry.Endpoint', - 'datadog.trace.api.telemetry.Endpoint.Method', - 'datadog.trace.api.telemetry.LogCollector.RawLogMessage', - "datadog.trace.api.telemetry.MetricCollector.DistributionSeriesPoint", - "datadog.trace.api.telemetry.MetricCollector", - //Enum - "datadog.trace.api.telemetry.WafTruncatedType", - // stubs - 'datadog.trace.api.profiling.Timing.NoOp', - 'datadog.trace.api.profiling.Timer.NoOp', - 'datadog.trace.api.profiling.Timer.TimerType', - // tested in agent-logging - 'datadog.trace.logging.LogLevel', - 'datadog.trace.logging.GlobalLogLevelSwitcher', - //POJO - 'datadog.trace.util.stacktrace.StackTraceBatch', - 'datadog.trace.util.stacktrace.StackTraceEvent', - 'datadog.trace.util.stacktrace.StackTraceFrame', - 'datadog.trace.api.iast.VulnerabilityMarks', - 'datadog.trace.api.iast.securitycontrol.SecurityControlHelper', - 'datadog.trace.api.iast.securitycontrol.SecurityControl', - // Trivial holder and no-op - 'datadog.trace.bootstrap.instrumentation.api.SpanPostProcessor.Holder', - 'datadog.trace.bootstrap.instrumentation.api.SpanPostProcessor.NoOpSpanPostProcessor', -] -excludedClassesBranchCoverage = [ - 'datadog.trace.api.ProductActivationConfig', - 'datadog.trace.api.ClassloaderConfigurationOverrides.Lazy', - 'datadog.trace.util.stacktrace.HotSpotStackWalker', - 'datadog.trace.util.stacktrace.StackWalkerFactory', - // Tested using forked process - 'datadog.trace.api.env.CapturedEnvironment', - 'datadog.trace.api.env.CapturedEnvironment.ProcessInfo' -] -excludedClassesInstructionCoverage = [ - 'datadog.trace.bootstrap.config.provider.EnvironmentConfigSource', - 'datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource', - 'datadog.trace.util.stacktrace.StackWalkerFactory' -] - -compileTestJava.dependsOn 'generateTestClassNameTries' - -dependencies { - // references TraceScope and Continuation from public api - api project(':dd-trace-api') - api libs.slf4j - api project(':components:context') - api project(':components:environment') - api project(':components:yaml') - api project(":utils:time-utils") - - // has to be loaded by system classloader: - // it contains annotations that are also present in the instrumented application classes - api "com.datadoghq:dd-javac-plugin-client:0.2.2" - - testImplementation("org.snakeyaml:snakeyaml-engine:2.9") - testImplementation project(":utils:test-utils") - testImplementation("org.assertj:assertj-core:3.20.2") - testImplementation libs.bundles.junit5 - testImplementation group: 'org.junit.vintage', name: 'junit-vintage-engine', version: libs.versions.junit5.get() - testImplementation libs.commons.math - testImplementation libs.bundles.mockito - testImplementation libs.truth -} - -jmh { - jmhVersion = '1.32' - duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE -} - diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts new file mode 100644 index 00000000000..9765fbd5ee8 --- /dev/null +++ b/internal-api/build.gradle.kts @@ -0,0 +1,290 @@ +import groovy.lang.Closure + +plugins { + `java-library` + id("me.champeau.jmh") +} + +val skipSettingCompilerRelease by extra(true) // need access to sun.misc.SharedSecrets + +apply(from = "$rootDir/gradle/java.gradle") +apply(from = "$rootDir/gradle/tries.gradle") + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } +} + +tasks.compileJava { + javaCompiler = javaToolchains.compilerFor { + languageVersion = JavaLanguageVersion.of(8) + } +} + +tasks.compileTestJava { + setJavaVersion(8) +} + +fun AbstractCompile.setJavaVersion(javaVersionInteger: Int) { + (project.extra["setJavaVersion"] as Closure<*>).call(this, javaVersionInteger) +} + +val minimumBranchCoverage by extra(0.7) +val minimumInstructionCoverage by extra(0.8) + +val excludedClassesCoverage by extra( + listOf( + "datadog.trace.api.ClassloaderConfigurationOverrides", + "datadog.trace.api.ClassloaderConfigurationOverrides.Lazy", + // Interface + "datadog.trace.api.EndpointTracker", + // Noop implementation + "datadog.trace.api.NoOpStatsDClient", + "datadog.trace.api.Platform", + // Interface + "datadog.trace.api.StatsDClient", + // Noop implementation + "datadog.trace.api.TraceSegment.NoOp", + "datadog.trace.api.WithGlobalTracer.1", + "datadog.trace.api.gateway.Events.ET", + // Noop implementation + "datadog.trace.api.gateway.RequestContext.Noop", + // Enum + "datadog.trace.api.intake.TrackType", + "datadog.trace.api.naming.**", + // Enum + "datadog.trace.api.profiling.ProfilingSnapshot.Kind", + "datadog.trace.api.sampling.AdaptiveSampler", + "datadog.trace.api.sampling.ConstantSampler", + "datadog.trace.api.sampling.SamplingRule.Provenance", + "datadog.trace.api.sampling.SamplingRule.TraceSamplingRule.TargetSpan", + "datadog.trace.api.EndpointCheckpointerHolder", + "datadog.trace.api.iast.IastAdvice.Kind", + "datadog.trace.api.UserEventTrackingMode", + // These are almost fully abstract classes so nothing to test + "datadog.trace.api.profiling.RecordingData", + "datadog.trace.api.appsec.AppSecEventTracker", + // A plain enum + "datadog.trace.api.profiling.RecordingType", + // Data Streams Monitoring + "datadog.trace.api.datastreams.Backlog", + "datadog.trace.api.datastreams.InboxItem", + "datadog.trace.api.datastreams.NoopDataStreamsMonitoring", + "datadog.trace.api.datastreams.NoopPathwayContext", + "datadog.trace.api.datastreams.StatsPoint", + // Bootstrap API + "datadog.trace.bootstrap.ActiveSubsystems", + "datadog.trace.bootstrap.ContextStore.Factory", + "datadog.trace.bootstrap.config.provider.ConfigProvider.Singleton", + "datadog.trace.bootstrap.instrumentation.api.java.lang.ProcessImplInstrumentationHelpers", + "datadog.trace.bootstrap.instrumentation.api.Tags", + "datadog.trace.bootstrap.instrumentation.api.CommonTagValues", + // Caused by empty 'default' interface method + "datadog.trace.bootstrap.instrumentation.api.AgentPropagation", + "datadog.trace.bootstrap.instrumentation.api.AgentPropagation.ContextVisitor", + "datadog.trace.bootstrap.instrumentation.api.AgentScope", + "datadog.trace.bootstrap.instrumentation.api.AgentSpan", + "datadog.trace.bootstrap.instrumentation.api.AgentSpanContext", + "datadog.trace.bootstrap.instrumentation.api.AgentTracer", + "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentHistogram", + "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopAgentTraceCollector", + "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopTraceConfig", + "datadog.trace.bootstrap.instrumentation.api.AgentTracer.NoopTracerAPI", + "datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI", + "datadog.trace.bootstrap.instrumentation.api.BlackHoleSpan", + "datadog.trace.bootstrap.instrumentation.api.BlackHoleSpan.Context", + "datadog.trace.bootstrap.instrumentation.api.ErrorPriorities", + "datadog.trace.bootstrap.instrumentation.api.ExtractedSpan", + "datadog.trace.bootstrap.instrumentation.api.ImmutableSpan", + "datadog.trace.bootstrap.instrumentation.api.InstrumentationTags", + "datadog.trace.bootstrap.instrumentation.api.InternalContextKeys", + "datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes", + "datadog.trace.bootstrap.instrumentation.api.NoopAgentScope", + "datadog.trace.bootstrap.instrumentation.api.NoopAgentSpan", + "datadog.trace.bootstrap.instrumentation.api.NoopContinuation", + "datadog.trace.bootstrap.instrumentation.api.NoopScope", + "datadog.trace.bootstrap.instrumentation.api.NoopSpan", + "datadog.trace.bootstrap.instrumentation.api.NoopSpanContext", + "datadog.trace.bootstrap.instrumentation.api.NotSampledSpanContext", + "datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities", + "datadog.trace.bootstrap.instrumentation.api.Schema", + "datadog.trace.bootstrap.instrumentation.api.ScopeSource", + "datadog.trace.bootstrap.instrumentation.api.ScopedContext", + "datadog.trace.bootstrap.instrumentation.api.ScopedContextKey", + "datadog.trace.bootstrap.instrumentation.api.TagContext", + "datadog.trace.bootstrap.instrumentation.api.TagContext.HttpHeaders", + "datadog.trace.api.civisibility.config.TestIdentifier", + "datadog.trace.api.civisibility.config.TestFQN", + "datadog.trace.api.civisibility.config.TestMetadata", + "datadog.trace.api.civisibility.config.TestSourceData", + "datadog.trace.api.civisibility.config.LibraryCapability", + "datadog.trace.api.civisibility.coverage.CoveragePerTestBridge", + "datadog.trace.api.civisibility.coverage.CoveragePercentageBridge", + "datadog.trace.api.civisibility.coverage.NoOpCoverageStore", + "datadog.trace.api.civisibility.coverage.NoOpCoverageStore.Factory", + "datadog.trace.api.civisibility.coverage.NoOpProbes", + "datadog.trace.api.civisibility.coverage.TestReport", + "datadog.trace.api.civisibility.coverage.TestReportFileEntry", + "datadog.trace.api.civisibility.domain.BuildModuleLayout", + "datadog.trace.api.civisibility.domain.BuildModuleSettings", + "datadog.trace.api.civisibility.domain.BuildSessionSettings", + "datadog.trace.api.civisibility.domain.JavaAgent", + "datadog.trace.api.civisibility.domain.Language", + "datadog.trace.api.civisibility.domain.SourceSet", + "datadog.trace.api.civisibility.domain.SourceSet.Type", + "datadog.trace.api.civisibility.events.BuildEventsHandler.ModuleInfo", + "datadog.trace.api.civisibility.events.TestDescriptor", + "datadog.trace.api.civisibility.events.TestSuiteDescriptor", + "datadog.trace.api.civisibility.execution.TestStatus", + "datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric", + "datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric.IndexHolder", + "datadog.trace.api.civisibility.telemetry.CiVisibilityDistributionMetric", + "datadog.trace.api.civisibility.telemetry.CiVisibilityMetricData", + "datadog.trace.api.civisibility.telemetry.NoOpMetricCollector", + "datadog.trace.api.civisibility.telemetry.tag.*", + "datadog.trace.api.civisibility.config.Configurations", + "datadog.trace.api.civisibility.CiVisibilityWellKnownTags", + "datadog.trace.api.civisibility.InstrumentationBridge", + "datadog.trace.api.civisibility.InstrumentationTestBridge", + // POJO + "datadog.trace.api.git.GitInfo", + "datadog.trace.api.git.GitInfoProvider", + "datadog.trace.api.git.GitInfoProvider.ShaDiscrepancy", + // POJO + "datadog.trace.api.git.PersonInfo", + // POJO + "datadog.trace.api.git.CommitInfo", + // POJO + "datadog.trace.api.git.GitUtils", + // tested indirectly by dependent modules + "datadog.trace.api.git.RawParseUtils", + // tested indirectly by dependent modules + "datadog.trace.api.Config", + "datadog.trace.api.Config.HostNameHolder", + "datadog.trace.api.Config.RuntimeIdHolder", + "datadog.trace.api.ConfigCollector", + "datadog.trace.api.DynamicConfig", + "datadog.trace.api.DynamicConfig.Builder", + "datadog.trace.api.DynamicConfig.Snapshot", + "datadog.trace.api.InstrumenterConfig", + "datadog.trace.api.ResolverCacheConfig.*", + "datadog.trace.api.logging.intake.LogsIntake", + "datadog.trace.logging.LoggingSettingsDescription", + "datadog.trace.util.AgentProxySelector", + "datadog.trace.util.AgentTaskScheduler", + "datadog.trace.util.AgentTaskScheduler.PeriodicTask", + "datadog.trace.util.AgentTaskScheduler.ShutdownHook", + "datadog.trace.util.AgentThreadFactory", + "datadog.trace.util.AgentThreadFactory.1", + "datadog.trace.util.ClassNameTrie.Builder", + "datadog.trace.util.ClassNameTrie.JavaGenerator", + "datadog.trace.util.CollectionUtils", + "datadog.trace.util.ComparableVersion", + "datadog.trace.util.ComparableVersion.BigIntegerItem", + "datadog.trace.util.ComparableVersion.IntItem", + "datadog.trace.util.ComparableVersion.ListItem", + "datadog.trace.util.ComparableVersion.LongItem", + "datadog.trace.util.ComparableVersion.StringItem", + "datadog.trace.util.ConcurrentEnumMap", + "datadog.trace.util.JPSUtils", + "datadog.trace.util.MethodHandles", + "datadog.trace.util.PidHelper", + "datadog.trace.util.PidHelper.Fallback", + "datadog.trace.util.ProcessUtils", + "datadog.trace.util.PropagationUtils", + "datadog.trace.util.UnsafeUtils", + // can't reliably force same identity hash for different instance to cover branch + "datadog.trace.api.cache.FixedSizeCache.IdentityHash", + "datadog.trace.api.cache.FixedSizeWeakKeyCache", + // Interface with default method + "datadog.trace.api.StatsDClientManager", + "datadog.trace.api.iast.Taintable", + "datadog.trace.api.Stateful", + "datadog.trace.api.Stateful.1", + // a stub + "datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration", + "datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration.NoOp", + // debug + "datadog.trace.api.iast.Taintable.DebugLogger", + // POJO + "datadog.trace.api.iast.util.Cookie", + "datadog.trace.api.iast.util.Cookie.Builder", + "datadog.trace.api.telemetry.Endpoint", + "datadog.trace.api.telemetry.Endpoint.Method", + "datadog.trace.api.telemetry.LogCollector.RawLogMessage", + "datadog.trace.api.telemetry.MetricCollector.DistributionSeriesPoint", + "datadog.trace.api.telemetry.MetricCollector", + // Enum + "datadog.trace.api.telemetry.WafTruncatedType", + // stubs + "datadog.trace.api.profiling.Timing.NoOp", + "datadog.trace.api.profiling.Timer.NoOp", + "datadog.trace.api.profiling.Timer.TimerType", + // tested in agent-logging + "datadog.trace.logging.LogLevel", + "datadog.trace.logging.GlobalLogLevelSwitcher", + // POJO + "datadog.trace.util.stacktrace.StackTraceBatch", + "datadog.trace.util.stacktrace.StackTraceEvent", + "datadog.trace.util.stacktrace.StackTraceFrame", + "datadog.trace.api.iast.VulnerabilityMarks", + "datadog.trace.api.iast.securitycontrol.SecurityControlHelper", + "datadog.trace.api.iast.securitycontrol.SecurityControl", + // Trivial holder and no-op + "datadog.trace.bootstrap.instrumentation.api.SpanPostProcessor.Holder", + "datadog.trace.bootstrap.instrumentation.api.SpanPostProcessor.NoOpSpanPostProcessor" + ) +) + +val excludedClassesBranchCoverage by extra( + listOf( + "datadog.trace.api.ProductActivationConfig", + "datadog.trace.api.ClassloaderConfigurationOverrides.Lazy", + "datadog.trace.util.stacktrace.HotSpotStackWalker", + "datadog.trace.util.stacktrace.StackWalkerFactory", + // Tested using forked process + "datadog.trace.api.env.CapturedEnvironment", + "datadog.trace.api.env.CapturedEnvironment.ProcessInfo", + ) +) + +val excludedClassesInstructionCoverage by extra( + listOf( + "datadog.trace.bootstrap.config.provider.EnvironmentConfigSource", + "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource", + "datadog.trace.util.stacktrace.StackWalkerFactory" + ) +) + +tasks.compileTestJava { + dependsOn("generateTestClassNameTries") +} + +dependencies { + // references TraceScope and Continuation from public api + api(project(":dd-trace-api")) + api(libs.slf4j) + api(project(":components:context")) + api(project(":components:environment")) + api(project(":components:yaml")) + api(project(":utils:time-utils")) + + // has to be loaded by system classloader: + // it contains annotations that are also present in the instrumented application classes + api("com.datadoghq:dd-javac-plugin-client:0.2.2") + + testImplementation("org.snakeyaml:snakeyaml-engine:2.9") + testImplementation(project(":utils:test-utils")) + testImplementation("org.assertj:assertj-core:3.20.2") + testImplementation(libs.bundles.junit5) + testImplementation("org.junit.vintage:junit-vintage-engine:${libs.versions.junit5.get()}") + testImplementation(libs.commons.math) + testImplementation(libs.bundles.mockito) + testImplementation(libs.truth) +} + +jmh { + jmhVersion = "1.32" + duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE +} diff --git a/internal-api/internal-api-9/build.gradle b/internal-api/internal-api-9/build.gradle deleted file mode 100644 index 5d1026791f6..00000000000 --- a/internal-api/internal-api-9/build.gradle +++ /dev/null @@ -1,55 +0,0 @@ -plugins { - id 'me.champeau.jmh' -} - -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - -apply from: "$rootDir/gradle/java.gradle" -apply plugin: "idea" - -java { - toolchain { - languageVersion = JavaLanguageVersion.of(11) - } -} - -tasks.withType(Javadoc) { - javadocTool.set(javaToolchains.javadocToolFor(java.toolchain)) -} - -[JavaCompile, GroovyCompile].each { - tasks.withType(it).configureEach { - setJavaVersion(it, 11) - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } -} - -minimumBranchCoverage = 0.8 -minimumInstructionCoverage = 0.8 - -dependencies { - api project(':internal-api') - - testImplementation project(':dd-java-agent:testing') - testImplementation libs.slf4j -} - -forbiddenApisMain { - failOnMissingClasses = false -} - -idea { - module { - jdkName = '11' - } -} - -jmh { - jmhVersion = '1.28' - duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE - jvm = System.getenv('JAVA_11_HOME') + '/bin/java' -} - diff --git a/internal-api/internal-api-9/build.gradle.kts b/internal-api/internal-api-9/build.gradle.kts new file mode 100644 index 00000000000..789d0de1548 --- /dev/null +++ b/internal-api/internal-api-9/build.gradle.kts @@ -0,0 +1,60 @@ +import groovy.lang.Closure + +plugins { + `java-library` + id("de.thetaphi.forbiddenapis") version "3.8" + id("me.champeau.jmh") + idea +} + +val minJavaVersionForTests by extra(JavaVersion.VERSION_11) + +apply(from = "$rootDir/gradle/java.gradle") + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + +tasks.withType { + javadocTool = javaToolchains.javadocToolFor(java.toolchain) +} + +fun AbstractCompile.setJavaVersion(javaVersionInteger: Int) { + (project.extra.get("setJavaVersion") as Closure<*>).call(this, javaVersionInteger) +} + +listOf(JavaCompile::class.java, GroovyCompile::class.java).forEach { compileTaskType -> + tasks.withType(compileTaskType) { + setJavaVersion(11) + sourceCompatibility = JavaVersion.VERSION_1_8.toString() + targetCompatibility = JavaVersion.VERSION_1_8.toString() + } +} + +val minimumBranchCoverage by extra(0.8) +val minimumInstructionCoverage by extra(0.8) + +dependencies { + api(project(":internal-api")) + + testImplementation(project(":dd-java-agent:testing")) + testImplementation(libs.slf4j) +} + +tasks.forbiddenApisMain { + failOnMissingClasses +} + +idea { + module { + jdkName = "11" + } +} + +jmh { + jmhVersion = "1.28" + duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE + jvm = System.getenv("JAVA_11_HOME") + "/bin/java" +}