feat(bigquery): Integrate Otel in client lib · googleapis/java-bigquery@165bb24 · GitHub | Latest TMZ Celebrity News & Gossip | Watch TMZ Live
Skip to content

Commit 165bb24

Browse files
committed
feat(bigquery): Integrate Otel in client lib
1 parent 82e5587 commit 165bb24

File tree

4 files changed

+105
-0
lines changed

4 files changed

+105
-0
lines changed

google-cloud-bigquery/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,19 @@
202202
<artifactId>proto-google-cloud-datacatalog-v1</artifactId>
203203
<scope>test</scope>
204204
</dependency>
205+
<!-- OpenTelemetry -->
206+
<dependency>
207+
<groupId>io.opentelemetry</groupId>
208+
<artifactId>opentelemetry-sdk</artifactId>
209+
</dependency>
210+
<dependency>
211+
<groupId>io.opentelemetry</groupId>
212+
<artifactId>opentelemetry-sdk-extension-autoconfigure-spi</artifactId>
213+
</dependency>
214+
<dependency>
215+
<groupId>io.opentelemetry</groupId>
216+
<artifactId>opentelemetry-exporter-logging</artifactId>
217+
</dependency>
205218
</dependencies>
206219

207220
<build>

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryOptions.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.cloud.http.HttpTransportOptions;
2626
import com.google.common.annotations.VisibleForTesting;
2727
import com.google.common.collect.ImmutableSet;
28+
import io.opentelemetry.api.trace.Tracer;
2829
import java.util.Set;
2930

3031
public class BigQueryOptions extends ServiceOptions<BigQuery, BigQueryOptions> {
@@ -39,6 +40,8 @@ public class BigQueryOptions extends ServiceOptions<BigQuery, BigQueryOptions> {
3940
private boolean setThrowNotFound;
4041
private boolean useInt64Timestamps;
4142
private String queryPreviewEnabled = System.getenv("QUERY_PREVIEW_ENABLED");
43+
private boolean enableOpenTelemetryTracing;
44+
private Tracer openTelemetryTracer;
4245

4346
public static class DefaultBigQueryFactory implements BigQueryFactory {
4447

@@ -64,6 +67,8 @@ public static class Builder extends ServiceOptions.Builder<BigQuery, BigQueryOpt
6467

6568
private String location;
6669
private boolean useInt64Timestamps;
70+
private boolean enableOpenTelemetryTracing;
71+
private Tracer openTelemetryTracer;
6772

6873
private Builder() {}
6974

@@ -90,6 +95,16 @@ public Builder setUseInt64Timestamps(boolean useInt64Timestamps) {
9095
return this;
9196
}
9297

98+
public Builder setEnableOpenTelemetryTracing(boolean enableOpenTelemetryTracing) {
99+
this.enableOpenTelemetryTracing = enableOpenTelemetryTracing;
100+
return this;
101+
}
102+
103+
public Builder setOpenTelemetryTracer(Tracer tracer) {
104+
this.openTelemetryTracer = tracer;
105+
return this;
106+
}
107+
93108
@Override
94109
public BigQueryOptions build() {
95110
return new BigQueryOptions(this);
@@ -100,6 +115,8 @@ private BigQueryOptions(Builder builder) {
100115
super(BigQueryFactory.class, BigQueryRpcFactory.class, builder, new BigQueryDefaults());
101116
this.location = builder.location;
102117
this.useInt64Timestamps = builder.useInt64Timestamps;
118+
this.enableOpenTelemetryTracing = builder.enableOpenTelemetryTracing;
119+
this.openTelemetryTracer = builder.openTelemetryTracer;
103120
}
104121

105122
private static class BigQueryDefaults implements ServiceDefaults<BigQuery, BigQueryOptions> {
@@ -164,6 +181,14 @@ public boolean getUseInt64Timestamps() {
164181
return useInt64Timestamps;
165182
}
166183

184+
public boolean isOpenTelemetryTracingEnabled() {
185+
return enableOpenTelemetryTracing;
186+
}
187+
188+
public Tracer getOpenTelemetryTracer() {
189+
return openTelemetryTracer;
190+
}
191+
167192
@SuppressWarnings("unchecked")
168193
@Override
169194
public Builder toBuilder() {
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.google.cloud.bigquery;
2+
3+
import io.opentelemetry.api.common.AttributeKey;
4+
import io.opentelemetry.api.trace.SpanKind;
5+
import io.opentelemetry.api.trace.Tracer;
6+
import io.opentelemetry.api.trace.Span;
7+
import io.opentelemetry.sdk.OpenTelemetrySdk;
8+
import io.opentelemetry.sdk.trace.SdkTracerProvider;
9+
import io.opentelemetry.sdk.trace.samplers.Sampler;
10+
import io.opentelemetry.context.Scope;
11+
import java.util.logging.Logger;
12+
import java.time.Instant;
13+
import org.junit.Test;
14+
15+
public class OpenTelemetryTest {
16+
private static final Logger log = Logger.getLogger(OpenTelemetryTest.class.getName());
17+
private static OpenTelemetrySdk sdk = null;
18+
19+
private void fillInSpanData(Tracer tracer) {
20+
Span childSpan = tracer.spanBuilder("childSpan").setSpanKind(SpanKind.INTERNAL).setAttribute(AttributeKey.stringKey("fillInSpanData-key"), "running fillInSpanData()").startSpan();
21+
try {
22+
int result = 0;
23+
for (int i = 0; i < 5000; ++i) {
24+
if (i % 2 == 0) {
25+
result += i;
26+
}
27+
}
28+
childSpan.addEvent("finished loop at: ", Instant.now());
29+
} finally {
30+
childSpan.end();
31+
log.info(childSpan.toString());
32+
}
33+
}
34+
35+
@Test
36+
public void testOtel() {
37+
Sampler alwaysOn = Sampler.alwaysOn();
38+
sdk =
39+
OpenTelemetrySdk.builder()
40+
.setTracerProvider(
41+
SdkTracerProvider.builder()
42+
.setSampler(alwaysOn)
43+
.build())
44+
.build();
45+
46+
Tracer tracer = sdk.getTracer("TracerExample");
47+
Span parentSpan = tracer.spanBuilder("parentSpan").setNoParent().setSpanKind(SpanKind.INTERNAL).setAttribute(
48+
AttributeKey.longKey("long-key"), 25L).setAttribute(AttributeKey.booleanKey("bool-key"), true).setAttribute(AttributeKey.stringKey("string-key"), "qwerty").startSpan();
49+
50+
try (Scope parentScope = parentSpan.makeCurrent()) {
51+
fillInSpanData(tracer);
52+
}
53+
finally {
54+
parentSpan.end();
55+
log.info(parentSpan.toString());
56+
}
57+
}
58+
}

pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@
5959

6060
<dependencyManagement>
6161
<dependencies>
62+
<!-- OpenTelemetry -->
63+
<dependency>
64+
<groupId>io.opentelemetry</groupId>
65+
<artifactId>opentelemetry-bom</artifactId>
66+
<version>1.48.0</version>
67+
<type>pom</type>
68+
<scope>import</scope>
69+
</dependency>
70+
6271
<dependency>
6372
<groupId>com.google.cloud</groupId>
6473
<artifactId>google-cloud-shared-dependencies</artifactId>

0 commit comments

Comments
 (0)

TMZ Celebrity News – Breaking Stories, Videos & Gossip

Looking for the latest TMZ celebrity news? You've come to the right place. From shocking Hollywood scandals to exclusive videos, TMZ delivers it all in real time.

Whether it’s a red carpet slip-up, a viral paparazzi moment, or a legal drama involving your favorite stars, TMZ news is always first to break the story. Stay in the loop with daily updates, insider tips, and jaw-dropping photos.

🎥 Watch TMZ Live

TMZ Live brings you daily celebrity news and interviews straight from the TMZ newsroom. Don’t miss a beat—watch now and see what’s trending in Hollywood.