Skip to content

Commit 42f95ef

Browse files
committed
Merge remote-tracking branch 'upstream/main' into r2dbc-db-system
# Conflicts: # instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java
2 parents 7f91700 + bc8deee commit 42f95ef

399 files changed

Lines changed: 2005 additions & 1763 deletions

File tree

Some content is hidden

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

benchmark-overhead/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ dependencies {
2525
testImplementation("org.junit.jupiter:junit-jupiter-params")
2626
testImplementation("com.squareup.okhttp3:okhttp:5.3.2")
2727
testImplementation("org.jooq:joox:2.0.1")
28-
testImplementation("com.jayway.jsonpath:json-path:2.10.0")
28+
testImplementation("com.jayway.jsonpath:json-path:3.0.0")
2929
testImplementation("org.slf4j:slf4j-simple:2.0.17")
3030
testImplementation("org.assertj:assertj-core:3.27.7")
3131

conventions/src/main/kotlin/io/opentelemetry/instrumentation/gradle/StaticImportFormatter.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ class StaticImportFormatter : FormatterFunc, Serializable {
3535
"java.nio.charset.StandardCharsets",
3636
"[A-Z][A-Z_0-9]*"
3737
),
38+
Triple(
39+
"Collections",
40+
"java.util.Collections",
41+
"singleton[a-zA-Z0-9]*|empty[a-zA-Z0-9]*"
42+
),
3843
Triple(
3944
"ArgumentMatchers",
4045
"org.mockito.ArgumentMatchers",
@@ -51,6 +56,11 @@ class StaticImportFormatter : FormatterFunc, Serializable {
5156
"io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions",
5257
"[a-z][a-zA-Z0-9]*"
5358
),
59+
Triple(
60+
"SemconvStability",
61+
"io.opentelemetry.instrumentation.api.internal.SemconvStability",
62+
"emit[a-zA-Z0-9]*"
63+
),
5464
)
5565

5666
var content = input

declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55

66
package io.opentelemetry.instrumentation.config.bridge;
77

8+
import static java.util.Collections.emptyList;
89
import static java.util.Collections.emptySet;
910

1011
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1112
import io.opentelemetry.common.ComponentLoader;
1213
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1314
import java.time.Duration;
1415
import java.util.ArrayList;
15-
import java.util.Collections;
1616
import java.util.HashMap;
1717
import java.util.List;
1818
import java.util.Map;
@@ -102,8 +102,7 @@ public final class ConfigPropertiesBackedDeclarativeConfigProperties
102102

103103
public static DeclarativeConfigProperties createInstrumentationConfig(
104104
ConfigProperties configProperties) {
105-
return new ConfigPropertiesBackedDeclarativeConfigProperties(
106-
configProperties, Collections.emptyList());
105+
return new ConfigPropertiesBackedDeclarativeConfigProperties(configProperties, emptyList());
107106
}
108107

109108
private ConfigPropertiesBackedDeclarativeConfigProperties(

declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
package io.opentelemetry.instrumentation.config.bridge;
77

88
import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty;
9+
import static java.util.Collections.emptyList;
10+
import static java.util.Collections.emptyMap;
911
import static java.util.Objects.requireNonNull;
1012

1113
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
@@ -115,7 +117,7 @@ public List<String> getList(String propertyName) {
115117
propertyName,
116118
o -> (List<String>) o,
117119
(properties, lastPart) -> properties.getScalarList(lastPart, String.class));
118-
return propertyValue == null ? Collections.emptyList() : propertyValue;
120+
return propertyValue == null ? emptyList() : propertyValue;
119121
}
120122

121123
@Override
@@ -126,7 +128,7 @@ public Map<String, String> getMap(String propertyName) {
126128
DeclarativeConfigProperties.class,
127129
DeclarativeConfigProperties::getStructured);
128130
if (propertyValue == null) {
129-
return Collections.emptyMap();
131+
return emptyMap();
130132
}
131133
Map<String, String> result = new HashMap<>();
132134
propertyValue

docs/contributing/style-guide.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,25 @@ Following the reasoning from
149149
- `Optional` shouldn't appear in public API signatures
150150
- Avoid `Optional` on the hot path (instrumentation code), unless the instrumented library uses it
151151

152+
## Semantic convention constants
153+
154+
**Library instrumentation**: Copy semantic convention constants directly into library
155+
instrumentation classes rather than depending on the semconv artifact. Library instrumentation is
156+
used by end users, and this avoids exposing a dependency on the semconv artifact (which may change
157+
across versions). For example:
158+
159+
```java
160+
// copied from MessagingIncubatingAttributes
161+
private static final AttributeKey<String> MESSAGING_SYSTEM =
162+
AttributeKey.stringKey("messaging.system");
163+
```
164+
165+
**Javaagent instrumentation**: Use the semconv constants from the semconv artifact directly. The
166+
javaagent bundles its own dependencies, so there is no risk of version conflicts for end users.
167+
168+
**Tests**: Use the semconv constants from the semconv artifact directly. Test dependencies do not
169+
affect end users.
170+
152171
## Tooling conventions
153172

154173
### AssertJ

docs/supported-libraries.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ These are the supported libraries and frameworks:
9191
| [Java Http Server](https://docs.oracle.com/en/java/javase/21/docs/api/jdk.httpserver/module-summary.html) | Java 8+ | [opentelemetry-java-http-server](../instrumentation/java-http-server/library) | [HTTP Server Spans], [HTTP Server Metrics] |
9292
| [java.util.logging](https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html) | Java 8+ | N/A | none |
9393
| [Java Platform](https://docs.oracle.com/javase/8/docs/api/java/lang/management/ManagementFactory.html) | Java 8+ | [opentelemetry-runtime-telemetry-java8](../instrumentation/runtime-telemetry/runtime-telemetry-java8/library),<br>[opentelemetry-runtime-telemetry-java17](../instrumentation/runtime-telemetry/runtime-telemetry-java17/library),<br>[opentelemetry-resources](../instrumentation/resources/library) | [JVM Runtime Metrics] |
94-
| [Javalin](https://javalin.io/) | 5.0+ | N/A | Provides `http.route` [2] |
94+
| [Javalin](https://javalin.io/) | 5.0+ (not including 7.0+ yet) | N/A | Provides `http.route` [2] |
9595
| [JAX-RS](https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/package-summary.html) | 0.5+ | N/A | Provides `http.route` [2], Controller Spans [3] |
9696
| [JAX-RS Client](https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/client/package-summary.html) | 1.1+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] |
9797
| [JAX-WS](https://jakarta.ee/specifications/xml-web-services/2.3/apidocs/javax/xml/ws/package-summary.html) | 2.0+ (not including 3.0+ yet) | N/A | Provides `http.route` [2], Controller Spans [3] |

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitOldDatabaseSemconv;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
810
import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE;
911
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE;
1012
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME;
@@ -93,7 +95,7 @@ static <REQUEST, RESPONSE> void onStartCommon(
9395
Long batchSize = getter.getDbOperationBatchSize(request);
9496
boolean isBatch = batchSize != null && batchSize > 1;
9597

96-
if (SemconvStability.emitStableDatabaseSemconv()) {
98+
if (emitStableDatabaseSemconv()) {
9799
attributes.put(
98100
DB_SYSTEM_NAME, SemconvStability.stableDbSystemName(getter.getDbSystemName(request)));
99101
attributes.put(DB_NAMESPACE, getter.getDbNamespace(request));
@@ -104,7 +106,7 @@ static <REQUEST, RESPONSE> void onStartCommon(
104106
attributes.put(DB_OPERATION_BATCH_SIZE, batchSize);
105107
}
106108
}
107-
if (SemconvStability.emitOldDatabaseSemconv()) {
109+
if (emitOldDatabaseSemconv()) {
108110
attributes.put(DB_SYSTEM, getter.getDbSystem(request));
109111
attributes.put(DB_USER, getter.getUser(request));
110112
attributes.put(DB_NAME, getter.getDbNamespace(request));
@@ -142,7 +144,7 @@ static <REQUEST, RESPONSE> void onEndCommon(
142144
DbClientAttributesGetter<REQUEST, RESPONSE> getter,
143145
@Nullable RESPONSE response,
144146
@Nullable Throwable error) {
145-
if (SemconvStability.emitStableDatabaseSemconv()) {
147+
if (emitStableDatabaseSemconv()) {
146148
if (error != null) {
147149
attributes.put(ERROR_TYPE, error.getClass().getName());
148150
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
77

8+
import static java.util.Collections.emptyMap;
9+
810
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter;
911
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter;
10-
import java.util.Collections;
1112
import java.util.Map;
1213
import javax.annotation.Nullable;
1314

@@ -90,6 +91,6 @@ default Long getDbOperationBatchSize(REQUEST request) {
9091

9192
// TODO: make this required to implement
9293
default Map<String, String> getDbQueryParameters(REQUEST request) {
93-
return Collections.emptyMap();
94+
return emptyMap();
9495
}
9596
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
89
import static java.util.concurrent.TimeUnit.SECONDS;
910
import static java.util.logging.Level.FINE;
1011

@@ -19,7 +20,6 @@
1920
import io.opentelemetry.instrumentation.api.instrumenter.OperationListener;
2021
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
2122
import io.opentelemetry.instrumentation.api.internal.OperationMetricsUtil;
22-
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
2323
import java.util.logging.Logger;
2424

2525
/**
@@ -45,7 +45,7 @@ public final class DbClientMetrics implements OperationListener {
4545
* @see InstrumenterBuilder#addOperationMetrics(OperationMetrics)
4646
*/
4747
public static OperationMetrics get() {
48-
if (SemconvStability.emitStableDatabaseSemconv()) {
48+
if (emitStableDatabaseSemconv()) {
4949
return OperationMetricsUtil.create("database client", DbClientMetrics::new);
5050
}
5151
return meter -> OperationMetricsUtil.NOOP_OPERATION_LISTENER;

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
9+
810
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
9-
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
1011
import java.util.Collection;
1112
import javax.annotation.Nullable;
1213

@@ -153,7 +154,7 @@ private GenericDbClientSpanNameExtractor(DbClientAttributesGetter<REQUEST, ?> ge
153154

154155
@Override
155156
public String extract(REQUEST request) {
156-
if (SemconvStability.emitStableDatabaseSemconv()) {
157+
if (emitStableDatabaseSemconv()) {
157158
String querySummary = getter.getDbQuerySummary(request);
158159
if (querySummary != null) {
159160
return querySummary;
@@ -182,7 +183,7 @@ public String extract(REQUEST request) {
182183
Collection<String> rawQueryTexts = getter.getRawQueryTexts(request);
183184

184185
if (rawQueryTexts.isEmpty()) {
185-
if (SemconvStability.emitStableDatabaseSemconv()) {
186+
if (emitStableDatabaseSemconv()) {
186187
String querySummary = getter.getDbQuerySummary(request);
187188
if (querySummary != null) {
188189
return querySummary;
@@ -194,7 +195,7 @@ public String extract(REQUEST request) {
194195
return computeSpanName(namespace, operationName, null, null);
195196
}
196197

197-
if (!SemconvStability.emitStableDatabaseSemconv()) {
198+
if (!emitStableDatabaseSemconv()) {
198199
if (rawQueryTexts.size() > 1) { // for backcompat(?)
199200
return computeSpanName(namespace, null, null, null);
200201
}
@@ -253,7 +254,7 @@ private MigratingSqlClientSpanNameExtractor(SqlClientAttributesGetter<REQUEST, ?
253254

254255
@Override
255256
public String extract(REQUEST request) {
256-
if (SemconvStability.emitStableDatabaseSemconv()) {
257+
if (emitStableDatabaseSemconv()) {
257258
return sqlDelegate.extract(request);
258259
}
259260
// For old semconv, use the generic span name format (operation + namespace)

0 commit comments

Comments
 (0)