Skip to content

Commit 8ecaa83

Browse files
committed
merge
2 parents 0f5dbbc + 5e28dfd commit 8ecaa83

File tree

204 files changed

+5067
-4167
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

204 files changed

+5067
-4167
lines changed

.github/workflows/publish-petclinic-benchmark-image.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
run: echo "TS=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV
3030

3131
- name: Push to GitHub packages
32-
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
32+
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
3333
with:
3434
push: true
3535
file: benchmark-overhead/Dockerfile-petclinic-base

conventions/src/main/kotlin/otel.java-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ codenarc {
429429
checkstyle {
430430
configFile = rootProject.file("buildscripts/checkstyle.xml")
431431
// this version should match the version of google_checks.xml used as basis for above configuration
432-
toolVersion = "10.20.1"
432+
toolVersion = "10.20.2"
433433
maxWarnings = 0
434434
}
435435

dependencyManagement/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ val groovyVersion = "4.0.24"
2727
// configurations.testRuntimeClasspath.resolutionStrategy.force "com.google.guava:guava:19.0"
2828

2929
val DEPENDENCY_BOMS = listOf(
30-
"com.fasterxml.jackson:jackson-bom:2.18.1",
30+
"com.fasterxml.jackson:jackson-bom:2.18.2",
3131
"com.squareup.okio:okio-bom:3.9.1", // see https://github.com/open-telemetry/opentelemetry-java/issues/5637
3232
"com.google.guava:guava-bom:33.3.1-jre",
3333
"org.apache.groovy:groovy-bom:${groovyVersion}",

examples/distro/smoke-tests/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ plugins {
44

55
dependencies {
66
testImplementation("org.testcontainers:testcontainers:1.20.4")
7-
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.18.1")
8-
testImplementation("com.google.protobuf:protobuf-java-util:4.28.3")
7+
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.18.2")
8+
testImplementation("com.google.protobuf:protobuf-java-util:4.29.0")
99
testImplementation("com.squareup.okhttp3:okhttp:4.12.0")
1010
testImplementation("io.opentelemetry.proto:opentelemetry-proto:1.4.0-alpha")
1111
testImplementation("io.opentelemetry:opentelemetry-api")

examples/extension/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ dependencies {
100100

101101
//All dependencies below are only for tests
102102
testImplementation("org.testcontainers:testcontainers:1.20.4")
103-
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.18.1")
104-
testImplementation("com.google.protobuf:protobuf-java-util:4.28.3")
103+
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.18.2")
104+
testImplementation("com.google.protobuf:protobuf-java-util:4.29.0")
105105
testImplementation("com.squareup.okhttp3:okhttp:4.12.0")
106106
testImplementation("io.opentelemetry:opentelemetry-api")
107107
testImplementation("io.opentelemetry.proto:opentelemetry-proto:1.4.0-alpha")

gradle-plugins/settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ pluginManagement {
66
}
77

88
plugins {
9-
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
9+
id("org.gradle.toolchains.foojay-resolver-convention") version "0.9.0"
1010
}

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ public final class DbClientAttributesExtractor<REQUEST, RESPONSE>
2828
// copied from DbIncubatingAttributes
2929
private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement");
3030
private static final AttributeKey<String> DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text");
31-
32-
private static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
33-
private static final AttributeKey<String> DB_OPERATION_NAME =
34-
AttributeKey.stringKey("db.operation.name");
31+
static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
32+
static final AttributeKey<String> DB_OPERATION_NAME = AttributeKey.stringKey("db.operation.name");
33+
static final AttributeKey<Long> DB_RESPONSE_STATUS_CODE =
34+
AttributeKey.longKey("db.response.status_code");
3535

3636
/** Creates the database client attributes extractor with default configuration. */
3737
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientCommonAttributesExtractor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ abstract class DbClientCommonAttributesExtractor<
2222

2323
// copied from DbIncubatingAttributes
2424
private static final AttributeKey<String> DB_NAME = AttributeKey.stringKey("db.name");
25-
private static final AttributeKey<String> DB_NAMESPACE = AttributeKey.stringKey("db.namespace");
26-
private static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system");
25+
static final AttributeKey<String> DB_NAMESPACE = AttributeKey.stringKey("db.namespace");
26+
static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system");
2727
private static final AttributeKey<String> DB_USER = AttributeKey.stringKey("db.user");
2828
private static final AttributeKey<String> DB_CONNECTION_STRING =
2929
AttributeKey.stringKey("db.connection_string");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
7+
8+
import static java.util.logging.Level.FINE;
9+
10+
import com.google.auto.value.AutoValue;
11+
import io.opentelemetry.api.common.Attributes;
12+
import io.opentelemetry.api.metrics.DoubleHistogram;
13+
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
14+
import io.opentelemetry.api.metrics.Meter;
15+
import io.opentelemetry.context.Context;
16+
import io.opentelemetry.context.ContextKey;
17+
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
18+
import io.opentelemetry.instrumentation.api.instrumenter.OperationListener;
19+
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
20+
import io.opentelemetry.instrumentation.api.internal.OperationMetricsUtil;
21+
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
22+
import java.util.concurrent.TimeUnit;
23+
import java.util.logging.Logger;
24+
25+
/**
26+
* {@link OperationListener} which keeps track of <a
27+
* href="https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration">Database
28+
* client metrics</a>.
29+
*
30+
* @since 2.11.0
31+
*/
32+
public final class DbClientMetrics implements OperationListener {
33+
34+
private static final double NANOS_PER_S = TimeUnit.SECONDS.toNanos(1);
35+
36+
private static final ContextKey<State> DB_CLIENT_OPERATION_METRICS_STATE =
37+
ContextKey.named("db-client-metrics-state");
38+
39+
private static final Logger logger = Logger.getLogger(DbClientMetrics.class.getName());
40+
41+
/**
42+
* Returns an {@link OperationMetrics} instance which can be used to enable recording of {@link
43+
* DbClientMetrics}.
44+
*
45+
* @see InstrumenterBuilder#addOperationMetrics(OperationMetrics)
46+
*/
47+
public static OperationMetrics get() {
48+
if (SemconvStability.emitStableDatabaseSemconv()) {
49+
return OperationMetricsUtil.create("database client", DbClientMetrics::new);
50+
}
51+
return meter -> OperationMetricsUtil.NOOP_OPERATION_LISTENER;
52+
}
53+
54+
private final DoubleHistogram duration;
55+
56+
private DbClientMetrics(Meter meter) {
57+
DoubleHistogramBuilder stableDurationBuilder =
58+
meter
59+
.histogramBuilder("db.client.operation.duration")
60+
.setUnit("s")
61+
.setDescription("Duration of database client operations.")
62+
.setExplicitBucketBoundariesAdvice(DbClientMetricsAdvice.DURATION_SECONDS_BUCKETS);
63+
DbClientMetricsAdvice.applyClientDurationAdvice(stableDurationBuilder);
64+
duration = stableDurationBuilder.build();
65+
}
66+
67+
@Override
68+
public Context onStart(Context context, Attributes startAttributes, long startNanos) {
69+
return context.with(
70+
DB_CLIENT_OPERATION_METRICS_STATE,
71+
new AutoValue_DbClientMetrics_State(startAttributes, startNanos));
72+
}
73+
74+
@Override
75+
public void onEnd(Context context, Attributes endAttributes, long endNanos) {
76+
State state = context.get(DB_CLIENT_OPERATION_METRICS_STATE);
77+
if (state == null) {
78+
logger.log(
79+
FINE,
80+
"No state present when ending context {0}. Cannot record database operation metrics.",
81+
context);
82+
return;
83+
}
84+
85+
Attributes attributes = state.startAttributes().toBuilder().putAll(endAttributes).build();
86+
87+
duration.record((endNanos - state.startTimeNanos()) / NANOS_PER_S, attributes, context);
88+
}
89+
90+
@AutoValue
91+
abstract static class State {
92+
93+
abstract Attributes startAttributes();
94+
95+
abstract long startTimeNanos();
96+
}
97+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
7+
8+
import static java.util.Arrays.asList;
9+
import static java.util.Collections.unmodifiableList;
10+
11+
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
12+
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
13+
import io.opentelemetry.semconv.ErrorAttributes;
14+
import io.opentelemetry.semconv.NetworkAttributes;
15+
import io.opentelemetry.semconv.ServerAttributes;
16+
import java.util.List;
17+
18+
final class DbClientMetricsAdvice {
19+
20+
static final List<Double> DURATION_SECONDS_BUCKETS =
21+
unmodifiableList(
22+
asList(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0));
23+
24+
static void applyClientDurationAdvice(DoubleHistogramBuilder builder) {
25+
if (!(builder instanceof ExtendedDoubleHistogramBuilder)) {
26+
return;
27+
}
28+
((ExtendedDoubleHistogramBuilder) builder)
29+
.setAttributesAdvice(
30+
asList(
31+
DbClientCommonAttributesExtractor.DB_SYSTEM,
32+
SqlClientAttributesExtractor.DB_COLLECTION_NAME,
33+
DbClientCommonAttributesExtractor.DB_NAMESPACE,
34+
DbClientAttributesExtractor.DB_OPERATION_NAME,
35+
// will be implemented in
36+
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/12804
37+
DbClientAttributesExtractor.DB_RESPONSE_STATUS_CODE,
38+
// will be implemented in
39+
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/12804
40+
ErrorAttributes.ERROR_TYPE,
41+
NetworkAttributes.NETWORK_PEER_ADDRESS,
42+
NetworkAttributes.NETWORK_PEER_PORT,
43+
ServerAttributes.SERVER_ADDRESS,
44+
ServerAttributes.SERVER_PORT));
45+
}
46+
47+
private DbClientMetricsAdvice() {}
48+
}

0 commit comments

Comments
 (0)