Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into rename-ktor-tracing
Browse files Browse the repository at this point in the history
  • Loading branch information
trask committed Dec 17, 2024
2 parents 6260a86 + f7472b7 commit a01fa94
Show file tree
Hide file tree
Showing 57 changed files with 1,542 additions and 216 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/codeql-daily.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
java-version-file: .java-version

- name: Initialize CodeQL
uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
with:
languages: java
# using "latest" helps to keep up with the latest Kotlin support
Expand All @@ -45,7 +45,7 @@ jobs:
run: ./gradlew assemble -x javadoc --no-build-cache --no-daemon

- name: Perform CodeQL analysis
uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9

workflow-notification:
needs:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,6 @@ jobs:

# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
with:
sarif_file: results.sarif
2 changes: 1 addition & 1 deletion benchmark-overhead/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ repositories {
}

dependencies {
implementation(enforcedPlatform("org.junit:junit-bom:5.11.3"))
implementation(enforcedPlatform("org.junit:junit-bom:5.11.4"))

testImplementation("org.testcontainers:testcontainers:1.20.4")
testImplementation("org.testcontainers:postgresql:1.20.4")
Expand Down
4 changes: 2 additions & 2 deletions conventions/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,14 @@ dependencies {
implementation("ru.vyarus:gradle-animalsniffer-plugin:1.7.2")
implementation("org.spdx:spdx-gradle-plugin:0.8.0")
// When updating, also update dependencyManagement/build.gradle.kts
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.15.10")
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.15.11")
implementation("gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.9.6")
implementation("me.champeau.jmh:jmh-gradle-plugin:0.7.2")
implementation("net.ltgt.gradle:gradle-errorprone-plugin:4.1.0")
implementation("net.ltgt.gradle:gradle-nullaway-plugin:2.1.0")
implementation("me.champeau.gradle:japicmp-gradle-plugin:0.4.5")

testImplementation(enforcedPlatform("org.junit:junit-bom:5.11.3"))
testImplementation(enforcedPlatform("org.junit:junit-bom:5.11.4"))
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.assertj:assertj-core:3.26.3")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ codenarc {
checkstyle {
configFile = rootProject.file("buildscripts/checkstyle.xml")
// this version should match the version of google_checks.xml used as basis for above configuration
toolVersion = "10.20.2"
toolVersion = "10.21.0"
maxWarnings = 0
}

Expand Down
8 changes: 4 additions & 4 deletions dependencyManagement/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ rootProject.extra["versions"] = dependencyVersions

// this line is managed by .github/scripts/update-sdk-version.sh
val otelSdkVersion = "1.45.0"
val otelContribVersion = "1.41.0-alpha"
val otelContribVersion = "1.42.0-alpha"
val otelSdkAlphaVersion = otelSdkVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1")

// Need both BOM and groovy jars
Expand All @@ -33,15 +33,15 @@ val DEPENDENCY_BOMS = listOf(
"org.apache.groovy:groovy-bom:${groovyVersion}",
"io.opentelemetry:opentelemetry-bom:${otelSdkVersion}",
"io.opentelemetry:opentelemetry-bom-alpha:${otelSdkAlphaVersion}",
"org.junit:junit-bom:5.11.3",
"org.junit:junit-bom:5.11.4",
"org.testcontainers:testcontainers-bom:1.20.4",
"org.spockframework:spock-bom:2.4-M4-groovy-4.0"
)

val autoServiceVersion = "1.1.1"
val autoValueVersion = "1.11.0"
val errorProneVersion = "2.36.0"
val byteBuddyVersion = "1.15.10"
val byteBuddyVersion = "1.15.11"
val asmVersion = "9.7.1"
val jmhVersion = "1.37"
val mockitoVersion = "4.11.0"
Expand Down Expand Up @@ -87,7 +87,7 @@ val DEPENDENCIES = listOf(
"com.github.stefanbirkner:system-lambda:1.2.1",
"com.github.stefanbirkner:system-rules:1.19.0",
"uk.org.webcompere:system-stubs-jupiter:2.0.3",
"com.uber.nullaway:nullaway:0.12.1",
"com.uber.nullaway:nullaway:0.12.2",
"commons-beanutils:commons-beanutils:1.9.4",
"commons-cli:commons-cli:1.9.0",
"commons-codec:commons-codec:1.17.1",
Expand Down
41 changes: 41 additions & 0 deletions docs/contributing/writing-instrumentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,47 @@ include("instrumentation:yarpc-1.0:library")
include("instrumentation:yarpc-1.0:testing")
```

### Instrumentation Submodules

When writing instrumentation that requires submodules for different versions, the name of each
submodule must be prefixed with the name of the parent directory (typically the library or
framework name).

As an example, if `yarpc` has instrumentation for two different versions, each version submodule
must include the `yarpc` prefix before the version:

```
instrumentation ->
...
yarpc ->
yarpc-1.0 ->
javaagent
build.gradle.kts
library
build.gradle.kts
testing
build.gradle.kts
yarpc-2.0 ->
javaagent
build.gradle.kts
library
build.gradle.kts
testing
build.gradle.kts
```

After creating the submodules, they must be registered in the settings.gradle.kts file. Include each
submodule explicitly to ensure it is recognized and built as part of the project. For example:

```kotlin
include(":instrumentation:yarpc:yarpc-1.0:javaagent")
include(":instrumentation:yarpc:yarpc-1.0:library")
include(":instrumentation:yarpc:yarpc-1.0:testing")
include(":instrumentation:yarpc:yarpc-2.0:javaagent")
include(":instrumentation:yarpc:yarpc-2.0:library")
include(":instrumentation:yarpc:yarpc-2.0:testing")
```

## Writing library instrumentation

Start by creating the `build.gradle.kts` file in the `library`
Expand Down
2 changes: 1 addition & 1 deletion examples/distro/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ subprojects {
opentelemetryJavaagentAlpha: "2.11.0-alpha-SNAPSHOT",

autoservice : "1.1.1",
junit : "5.11.3"
junit : "5.11.4"
]

deps = [
Expand Down
2 changes: 1 addition & 1 deletion examples/extension/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ ext {
opentelemetryJavaagent : "2.11.0-SNAPSHOT",
opentelemetryJavaagentAlpha: "2.11.0-alpha-SNAPSHOT",

junit : "5.11.3"
junit : "5.11.4"
]

deps = [
Expand Down
4 changes: 2 additions & 2 deletions gradle-plugins/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ configurations.named("compileOnly") {
extendsFrom(bbGradlePlugin)
}

val byteBuddyVersion = "1.15.10"
val byteBuddyVersion = "1.15.11"
val aetherVersion = "1.1.0"

dependencies {
Expand All @@ -43,7 +43,7 @@ dependencies {

testImplementation("org.assertj:assertj-core:3.26.3")

testImplementation(enforcedPlatform("org.junit:junit-bom:5.11.3"))
testImplementation(enforcedPlatform("org.junit:junit-bom:5.11.4"))
testImplementation("org.junit.jupiter:junit-jupiter-api")
testImplementation("org.junit.jupiter:junit-jupiter-params")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.api.incubator.semconv.db;

import static io.opentelemetry.api.common.AttributeKey.stringKey;
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
Expand Down Expand Up @@ -56,8 +57,10 @@ public static DbConnectionPoolMetrics create(
}

public ObservableLongMeasurement connections() {
String metricName =
emitStableDatabaseSemconv() ? "db.client.connection.count" : "db.client.connections.usage";
return meter
.upDownCounterBuilder("db.client.connections.usage")
.upDownCounterBuilder(metricName)
.setUnit("{connections}")
.setDescription(
"The number of connections that are currently in state described by the state attribute.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.alibabadruid;

import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
import static org.assertj.core.api.Assertions.assertThat;

import com.alibaba.druid.pool.DruidDataSource;
Expand Down Expand Up @@ -73,7 +74,9 @@ void shouldReportMetrics() throws Exception {
Set<String> metricNames =
new HashSet<>(
Arrays.asList(
"db.client.connections.usage",
emitStableDatabaseSemconv()
? "db.client.connection.count"
: "db.client.connections.usage",
"db.client.connections.idle.min",
"db.client.connections.idle.max",
"db.client.connections.max",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.apachedbcp;

import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
Expand Down Expand Up @@ -75,7 +76,9 @@ void shouldReportMetrics() throws Exception {
Set<String> metricNames =
new HashSet<>(
Arrays.asList(
"db.client.connections.usage",
emitStableDatabaseSemconv()
? "db.client.connection.count"
: "db.client.connections.usage",
"db.client.connections.idle.min",
"db.client.connections.idle.max",
"db.client.connections.max"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.c3p0;

import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
import static org.assertj.core.api.Assertions.assertThat;

import com.mchange.v2.c3p0.ComboPooledDataSource;
Expand Down Expand Up @@ -66,7 +67,11 @@ void shouldReportMetrics() throws Exception {
// then
Set<String> metricNames =
new HashSet<>(
Arrays.asList("db.client.connections.usage", "db.client.connections.pending_requests"));
Arrays.asList(
emitStableDatabaseSemconv()
? "db.client.connection.count"
: "db.client.connections.usage",
"db.client.connections.pending_requests"));
assertThat(testing().metrics())
.filteredOn(
metricData ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.hikaricp;

import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchException;
import static org.mockito.ArgumentMatchers.anyLong;
Expand Down Expand Up @@ -81,7 +82,9 @@ void shouldReportMetrics() throws SQLException, InterruptedException {
testing()
.waitAndAssertMetrics(
"io.opentelemetry.hikaricp-3.0",
"db.client.connections.usage",
emitStableDatabaseSemconv()
? "db.client.connection.count"
: "db.client.connections.usage",
AbstractIterableAssert::isEmpty);
testing()
.waitAndAssertMetrics(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.instrumentation.oracleucp;

import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
import static org.assertj.core.api.Assertions.assertThat;

import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
Expand Down Expand Up @@ -117,7 +118,9 @@ void shouldReportMetrics(boolean setExplicitPoolName) throws Exception {
Set<String> metricNames =
new HashSet<>(
Arrays.asList(
"db.client.connections.usage",
emitStableDatabaseSemconv()
? "db.client.connection.count"
: "db.client.connections.usage",
"db.client.connections.max",
"db.client.connections.pending_requests"));
assertThat(testing().metrics())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.instrumentation.ratpack.v1_7;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryHttpClient;
import ratpack.http.client.HttpClient;
import ratpack.http.client.HttpResponse;
import ratpack.http.client.RequestSpec;

/**
* Entrypoint for instrumenting Ratpack http client.
*
* <p>To apply OpenTelemetry instrumentation to a http client, wrap the {@link HttpClient} using
* {@link #instrument(HttpClient)}.
*
* <pre>{@code
* RatpackClientTelemetry telemetry = RatpackClientTelemetry.create(OpenTelemetrySdk.builder()
* ...
* .build());
* HttpClient instrumentedHttpClient = telemetry.instrument(httpClient);
* }</pre>
*/
public final class RatpackClientTelemetry {

/**
* Returns a new {@link RatpackClientTelemetry} configured with the given {@link OpenTelemetry}.
*/
public static RatpackClientTelemetry create(OpenTelemetry openTelemetry) {
return builder(openTelemetry).build();
}

/**
* Returns a new {@link RatpackClientTelemetryBuilder} configured with the given {@link
* OpenTelemetry}.
*/
public static RatpackClientTelemetryBuilder builder(OpenTelemetry openTelemetry) {
return new RatpackClientTelemetryBuilder(openTelemetry);
}

private final OpenTelemetryHttpClient httpClientInstrumenter;

RatpackClientTelemetry(Instrumenter<RequestSpec, HttpResponse> clientInstrumenter) {
httpClientInstrumenter = new OpenTelemetryHttpClient(clientInstrumenter);
}

/** Returns instrumented instance of {@link HttpClient} with OpenTelemetry. */
public HttpClient instrument(HttpClient httpClient) throws Exception {
return httpClientInstrumenter.instrument(httpClient);
}
}
Loading

0 comments on commit a01fa94

Please sign in to comment.