Skip to content

Commit ac93c34

Browse files
committed
refactors
1 parent 91cde4c commit ac93c34

File tree

15 files changed

+344
-24
lines changed

15 files changed

+344
-24
lines changed

docs/instrumentation-list.yaml

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2082,19 +2082,54 @@ libraries:
20822082
type: LONG
20832083
couchbase:
20842084
- name: couchbase-2.0
2085+
description: This instrumentation enables database CLIENT spans and metrics for
2086+
Couchbase 2.0 operations. It automatically traces key-value operations (get,
2087+
upsert, replace, remove), view queries, N1QL queries, and cluster management
2088+
operations. Supports Spring Data integration for repositories and templates.
20852089
source_path: instrumentation/couchbase/couchbase-2.0
20862090
scope:
20872091
name: io.opentelemetry.couchbase-2.0
20882092
target_versions:
20892093
javaagent:
20902094
- com.couchbase.client:java-client:[2,3)
2091-
configurations:
2092-
- name: otel.instrumentation.couchbase.experimental-span-attributes
2093-
description: Enables experimental span attributes `couchbase.operation_id` and
2094-
`couchbase.local.address`
2095-
type: boolean
2096-
default: false
2095+
telemetry:
2096+
- when: default
2097+
spans:
2098+
- span_kind: CLIENT
2099+
attributes:
2100+
- name: db.name
2101+
type: STRING
2102+
- name: db.operation
2103+
type: STRING
2104+
- name: db.statement
2105+
type: STRING
2106+
- name: db.system
2107+
type: STRING
2108+
- when: otel.semconv-stability.opt-in=database
2109+
metrics:
2110+
- name: db.client.operation.duration
2111+
description: Duration of database client operations.
2112+
type: HISTOGRAM
2113+
unit: s
2114+
attributes:
2115+
- name: db.operation.name
2116+
type: STRING
2117+
- name: db.system.name
2118+
type: STRING
2119+
spans:
2120+
- span_kind: CLIENT
2121+
attributes:
2122+
- name: db.namespace
2123+
type: STRING
2124+
- name: db.operation.name
2125+
type: STRING
2126+
- name: db.query.text
2127+
type: STRING
2128+
- name: db.system.name
2129+
type: STRING
20972130
- name: couchbase-2.6
2131+
description: |
2132+
This instrumentation enables database CLIENT spans and metrics for Couchbase 2.6 operations. It automatically traces key-value operations (get, upsert, replace, remove), view queries, N1QL queries, and cluster management operations. Supports Spring Data integration for repositories and templates.
20982133
source_path: instrumentation/couchbase/couchbase-2.6
20992134
scope:
21002135
name: io.opentelemetry.couchbase-2.6
@@ -2103,13 +2138,13 @@ libraries:
21032138
- com.couchbase.client:java-client:[2.6.0,3)
21042139
configurations:
21052140
- name: otel.instrumentation.couchbase.experimental-span-attributes
2106-
description: Enables experimental span attributes couchbase.operation_id and
2107-
couchbase.local.address
2141+
description: |
2142+
Enables experimental span attributes `couchbase.operation_id` and `couchbase.local.address`. Different operation types receive different experimental attributes: key-value operations get both attributes, view queries get only local.address, N1QL queries get only operation_id, and cluster management operations get none.
21082143
type: boolean
21092144
default: false
21102145
- name: couchbase-3.1
21112146
description: |
2112-
Couchbase instrumentation is owned by the Couchbase project. This instrumentation automatically configures the instrumentation provided by the Couchbase library.
2147+
Couchbase instrumentation is owned by the Couchbase project for versions 3+. This instrumentation automatically configures the instrumentation provided by the Couchbase library.
21132148
source_path: instrumentation/couchbase/couchbase-3.1
21142149
scope:
21152150
name: io.opentelemetry.couchbase-3.1
@@ -2118,7 +2153,7 @@ libraries:
21182153
- com.couchbase.client:java-client:[3.1,3.1.6)
21192154
- name: couchbase-3.1.6
21202155
description: |
2121-
Couchbase instrumentation is owned by the Couchbase project. This instrumentation automatically configures the instrumentation provided by the Couchbase library.
2156+
Couchbase instrumentation is owned by the Couchbase project for versions 3+. This instrumentation automatically configures the instrumentation provided by the Couchbase library.
21222157
source_path: instrumentation/couchbase/couchbase-3.1.6
21232158
scope:
21242159
name: io.opentelemetry.couchbase-3.1.6
@@ -2127,7 +2162,7 @@ libraries:
21272162
- com.couchbase.client:java-client:[3.1.6,3.2.0)
21282163
- name: couchbase-3.2
21292164
description: |
2130-
Couchbase instrumentation is owned by the Couchbase project. This instrumentation automatically configures the instrumentation provided by the Couchbase library.
2165+
Couchbase instrumentation is owned by the Couchbase project for versions 3+. This instrumentation automatically configures the instrumentation provided by the Couchbase library.
21312166
source_path: instrumentation/couchbase/couchbase-3.2
21322167
scope:
21332168
name: io.opentelemetry.couchbase-3.2
@@ -4031,7 +4066,7 @@ libraries:
40314066
javaagent:
40324067
- com.openai:openai-java:[1.1.0,3)
40334068
library:
4034-
- com.openai:openai-java:[1.1.0,2.+)
4069+
- com.openai:openai-java:1.1.0
40354070
configurations:
40364071
- name: otel.instrumentation.genai.capture-message-content
40374072
description: |

instrumentation/couchbase/couchbase-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseAsyncClientTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.couchbase.client.java.cluster.BucketSettings;
99
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
1010
import io.opentelemetry.instrumentation.couchbase.AbstractCouchbaseAsyncClientTest;
11+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
12+
import java.util.List;
1113

1214
class CouchbaseAsyncClientTest extends AbstractCouchbaseAsyncClientTest {
1315

@@ -16,4 +18,24 @@ protected DefaultCouchbaseEnvironment.Builder envBuilder(
1618
BucketSettings bucketSettings, int carrierDirectPort, int httpDirectPort) {
1719
return CouchbaseUtil.envBuilder(bucketSettings, carrierDirectPort, httpDirectPort);
1820
}
21+
22+
@Override
23+
protected List<AttributeAssertion> couchbaseAttributes() {
24+
return CouchbaseUtil.couchbaseAttributes();
25+
}
26+
27+
@Override
28+
protected List<AttributeAssertion> couchbaseQueryAttributes() {
29+
return CouchbaseUtil.couchbaseQueryAttributes();
30+
}
31+
32+
@Override
33+
protected List<AttributeAssertion> couchbaseClusterManagerAttributes() {
34+
return CouchbaseUtil.couchbaseClusterManagerAttributes();
35+
}
36+
37+
@Override
38+
protected List<AttributeAssertion> couchbaseN1qlAttributes() {
39+
return CouchbaseUtil.couchbaseN1qlAttributes();
40+
}
1941
}

instrumentation/couchbase/couchbase-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseClientTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import com.couchbase.client.java.cluster.ClusterManager;
1616
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
1717
import io.opentelemetry.instrumentation.couchbase.AbstractCouchbaseClientTest;
18+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
19+
import java.util.List;
1820
import org.junit.jupiter.api.Test;
1921

2022
class CouchbaseClientTest extends AbstractCouchbaseClientTest {
@@ -25,6 +27,26 @@ protected DefaultCouchbaseEnvironment.Builder envBuilder(
2527
return CouchbaseUtil.envBuilder(bucketSettings, carrierDirectPort, httpDirectPort);
2628
}
2729

30+
@Override
31+
protected List<AttributeAssertion> couchbaseAttributes() {
32+
return CouchbaseUtil.couchbaseAttributes();
33+
}
34+
35+
@Override
36+
protected List<AttributeAssertion> couchbaseQueryAttributes() {
37+
return CouchbaseUtil.couchbaseQueryAttributes();
38+
}
39+
40+
@Override
41+
protected List<AttributeAssertion> couchbaseClusterManagerAttributes() {
42+
return CouchbaseUtil.couchbaseClusterManagerAttributes();
43+
}
44+
45+
@Override
46+
protected List<AttributeAssertion> couchbaseN1qlAttributes() {
47+
return CouchbaseUtil.couchbaseN1qlAttributes();
48+
}
49+
2850
@Test
2951
void hasDurationMetric() {
3052
CouchbaseCluster cluster = prepareCluster(bucketCouchbase);

instrumentation/couchbase/couchbase-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseUtil.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,39 @@
99
import com.couchbase.client.core.metrics.DefaultMetricsCollectorConfig;
1010
import com.couchbase.client.java.cluster.BucketSettings;
1111
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
12+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
13+
import java.util.ArrayList;
14+
import java.util.List;
1215
import java.util.concurrent.TimeUnit;
1316

1417
public class CouchbaseUtil {
1518

19+
// Couchbase 2.0 instrumentation does not support experimental attributes
20+
21+
public static List<AttributeAssertion> couchbaseAttributes() {
22+
return couchbaseKvAttributes();
23+
}
24+
25+
public static List<AttributeAssertion> couchbaseKvAttributes() {
26+
// Couchbase 2.0 instrumentation does not support experimental attributes or network attributes
27+
return new ArrayList<>();
28+
}
29+
30+
public static List<AttributeAssertion> couchbaseQueryAttributes() {
31+
// Couchbase 2.0 instrumentation does not support experimental attributes or network attributes
32+
return new ArrayList<>();
33+
}
34+
35+
public static List<AttributeAssertion> couchbaseClusterManagerAttributes() {
36+
// Couchbase 2.0 instrumentation does not support experimental attributes or network attributes
37+
return new ArrayList<>();
38+
}
39+
40+
public static List<AttributeAssertion> couchbaseN1qlAttributes() {
41+
// Couchbase 2.0 instrumentation does not support experimental attributes or network attributes
42+
return new ArrayList<>();
43+
}
44+
1645
public static DefaultCouchbaseEnvironment.Builder envBuilder(
1746
BucketSettings bucketSettings, int carrierDirectPort, int httpDirectPort) {
1847
// Couchbase seems to be really slow to start sometimes

instrumentation/couchbase/couchbase-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/springdata/CouchbaseSpringRepositoryTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import io.opentelemetry.instrumentation.couchbase.springdata.TestDocument;
1212
import io.opentelemetry.instrumentation.couchbase.springdata.TestRepository;
1313
import io.opentelemetry.javaagent.instrumentation.couchbase.v2_0.CouchbaseUtil;
14+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
15+
import java.util.List;
1416

1517
class CouchbaseSpringRepositoryTest extends AbstractCouchbaseSpringRepositoryTest {
1618

@@ -20,6 +22,26 @@ protected DefaultCouchbaseEnvironment.Builder envBuilder(
2022
return CouchbaseUtil.envBuilder(bucketSettings, carrierDirectPort, httpDirectPort);
2123
}
2224

25+
@Override
26+
protected List<AttributeAssertion> couchbaseAttributes() {
27+
return CouchbaseUtil.couchbaseAttributes();
28+
}
29+
30+
@Override
31+
protected List<AttributeAssertion> couchbaseQueryAttributes() {
32+
return CouchbaseUtil.couchbaseQueryAttributes();
33+
}
34+
35+
@Override
36+
protected List<AttributeAssertion> couchbaseClusterManagerAttributes() {
37+
return CouchbaseUtil.couchbaseClusterManagerAttributes();
38+
}
39+
40+
@Override
41+
protected List<AttributeAssertion> couchbaseN1qlAttributes() {
42+
return CouchbaseUtil.couchbaseN1qlAttributes();
43+
}
44+
2345
@Override
2446
protected TestDocument findById(TestRepository repository, String id) {
2547
return repository.findOne(id);

instrumentation/couchbase/couchbase-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/springdata/CouchbaseSpringTemplateTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
1010
import io.opentelemetry.instrumentation.couchbase.springdata.AbstractCouchbaseSpringTemplateTest;
1111
import io.opentelemetry.javaagent.instrumentation.couchbase.v2_0.CouchbaseUtil;
12+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
13+
import java.util.List;
1214

1315
class CouchbaseSpringTemplateTest extends AbstractCouchbaseSpringTemplateTest {
1416

@@ -17,4 +19,24 @@ protected DefaultCouchbaseEnvironment.Builder envBuilder(
1719
BucketSettings bucketSettings, int carrierDirectPort, int httpDirectPort) {
1820
return CouchbaseUtil.envBuilder(bucketSettings, carrierDirectPort, httpDirectPort);
1921
}
22+
23+
@Override
24+
protected List<AttributeAssertion> couchbaseAttributes() {
25+
return CouchbaseUtil.couchbaseAttributes();
26+
}
27+
28+
@Override
29+
protected List<AttributeAssertion> couchbaseQueryAttributes() {
30+
return CouchbaseUtil.couchbaseQueryAttributes();
31+
}
32+
33+
@Override
34+
protected List<AttributeAssertion> couchbaseClusterManagerAttributes() {
35+
return CouchbaseUtil.couchbaseClusterManagerAttributes();
36+
}
37+
38+
@Override
39+
protected List<AttributeAssertion> couchbaseN1qlAttributes() {
40+
return CouchbaseUtil.couchbaseN1qlAttributes();
41+
}
2042
}
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
descriptions: This instrumentation enables database CLIENT spans and metrics for Couchbase operations.
1+
description: >
2+
This instrumentation enables database CLIENT spans and metrics for Couchbase 2.0 operations.
3+
It automatically traces key-value operations (get, upsert, replace, remove), view queries,
4+
N1QL queries, and cluster management operations. Supports Spring Data integration for
5+
repositories and templates.

instrumentation/couchbase/couchbase-2.6/javaagent/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@ tasks {
3838
// required on jdk17
3939
jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
4040
jvmArgs("-XX:+IgnoreUnrecognizedVMOptions")
41+
42+
systemProperty("collectMetadata", findProperty("collectMetadata")?.toString() ?: "false")
4143
}
4244

4345
val testStableSemconv by registering(Test::class) {
4446
jvmArgs("-Dotel.semconv-stability.opt-in=database")
47+
systemProperty("metadataConfig", "otel.semconv-stability.opt-in=database")
4548
}
4649

4750
val testExperimental by registering(Test::class) {

instrumentation/couchbase/couchbase-2.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/Couchbase26Util.java

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,25 @@
88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
99
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1010
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
11+
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS;
12+
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_PORT;
13+
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE;
1114

1215
import com.couchbase.client.core.metrics.DefaultLatencyMetricsCollectorConfig;
1316
import com.couchbase.client.core.metrics.DefaultMetricsCollectorConfig;
1417
import com.couchbase.client.java.cluster.BucketSettings;
1518
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
1619
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
17-
import io.opentelemetry.semconv.NetworkAttributes;
18-
import java.util.Arrays;
20+
import java.util.ArrayList;
1921
import java.util.List;
2022
import java.util.concurrent.TimeUnit;
2123
import org.assertj.core.api.AbstractAssert;
2224

2325
public class Couchbase26Util {
2426

27+
private static final String EXPERIMENTAL_FLAG =
28+
"otel.instrumentation.couchbase.experimental-span-attributes";
29+
2530
public static DefaultCouchbaseEnvironment.Builder envBuilder(
2631
BucketSettings bucketSettings, int carrierDirectPort, int httpDirectPort) {
2732
// Couchbase seems to be really slow to start sometimes
@@ -47,12 +52,57 @@ public static DefaultCouchbaseEnvironment.Builder envBuilder(
4752
}
4853

4954
public static List<AttributeAssertion> couchbaseAttributes() {
50-
return Arrays.asList(
51-
equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"),
52-
equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"),
53-
satisfies(NetworkAttributes.NETWORK_PEER_PORT, AbstractAssert::isNotNull),
54-
satisfies(stringKey("couchbase.local.address"), AbstractAssert::isNotNull),
55-
satisfies(stringKey("couchbase.operation_id"), AbstractAssert::isNotNull));
55+
return couchbaseKvAttributes();
56+
}
57+
58+
public static List<AttributeAssertion> couchbaseKvAttributes() {
59+
return baseNetworkAttributes().withLocalAddress().withOperationId().build();
60+
}
61+
62+
public static List<AttributeAssertion> couchbaseQueryAttributes() {
63+
return baseNetworkAttributes().withLocalAddress().build();
64+
}
65+
66+
public static List<AttributeAssertion> couchbaseN1qlAttributes() {
67+
return baseNetworkAttributes().withOperationId().build();
68+
}
69+
70+
public static List<AttributeAssertion> couchbaseClusterManagerAttributes() {
71+
return baseNetworkAttributes().build();
72+
}
73+
74+
private static AttributeAssertionBuilder baseNetworkAttributes() {
75+
return new AttributeAssertionBuilder()
76+
.add(equalTo(NETWORK_TYPE, "ipv4"))
77+
.add(equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"))
78+
.add(satisfies(NETWORK_PEER_PORT, AbstractAssert::isNotNull));
79+
}
80+
81+
private static class AttributeAssertionBuilder {
82+
private final List<AttributeAssertion> assertions = new ArrayList<>();
83+
84+
AttributeAssertionBuilder add(AttributeAssertion assertion) {
85+
assertions.add(assertion);
86+
return this;
87+
}
88+
89+
AttributeAssertionBuilder withLocalAddress() {
90+
if (Boolean.getBoolean(EXPERIMENTAL_FLAG)) {
91+
assertions.add(satisfies(stringKey("couchbase.local.address"), AbstractAssert::isNotNull));
92+
}
93+
return this;
94+
}
95+
96+
AttributeAssertionBuilder withOperationId() {
97+
if (Boolean.getBoolean(EXPERIMENTAL_FLAG)) {
98+
assertions.add(satisfies(stringKey("couchbase.operation_id"), AbstractAssert::isNotNull));
99+
}
100+
return this;
101+
}
102+
103+
List<AttributeAssertion> build() {
104+
return new ArrayList<>(assertions);
105+
}
56106
}
57107

58108
private Couchbase26Util() {}

0 commit comments

Comments
 (0)