Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 4002b2b

Browse files
committed
Add sample without parent span
1 parent 102afb9 commit 4002b2b

5 files changed

Lines changed: 212 additions & 19 deletions

File tree

samples/install-without-bom/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
<artifactId>google-oauth-client-jetty</artifactId>
6060
<version>1.39.0</version>
6161
</dependency>
62-
6362
<dependency>
6463
<groupId>io.opentelemetry</groupId>
6564
<artifactId>opentelemetry-api</artifactId>

samples/snapshot/pom.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,35 @@
8282
<version>1.4.4</version>
8383
<scope>test</scope>
8484
</dependency>
85+
<dependency>
86+
<groupId>com.google.cloud</groupId>
87+
<artifactId>google-cloud-bigquery</artifactId>
88+
</dependency>
89+
<dependency>
90+
<groupId>io.opentelemetry</groupId>
91+
<artifactId>opentelemetry-api</artifactId>
92+
<version>1.46.0</version>
93+
</dependency>
94+
<dependency>
95+
<groupId>io.opentelemetry</groupId>
96+
<artifactId>opentelemetry-context</artifactId>
97+
<version>1.46.0</version>
98+
</dependency>
99+
<dependency>
100+
<groupId>io.opentelemetry</groupId>
101+
<artifactId>opentelemetry-sdk</artifactId>
102+
<version>1.46.0</version>
103+
</dependency>
104+
<dependency>
105+
<groupId>io.opentelemetry</groupId>
106+
<artifactId>opentelemetry-sdk-common</artifactId>
107+
<version>1.46.0</version>
108+
</dependency>
109+
<dependency>
110+
<groupId>io.opentelemetry</groupId>
111+
<artifactId>opentelemetry-sdk-trace</artifactId>
112+
<version>1.46.0</version>
113+
</dependency>
85114
</dependencies>
86115

87116
<!-- compile and run all snippet tests -->
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
/*
2+
* Copyright 2025 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.example.bigquery;
18+
19+
// [START bigquery_enable_otel_tracing]
20+
import com.google.cloud.bigquery.BigQuery;
21+
import com.google.cloud.bigquery.BigQueryOptions;
22+
import com.google.cloud.bigquery.Dataset;
23+
import com.google.cloud.bigquery.DatasetInfo;
24+
import io.opentelemetry.api.OpenTelemetry;
25+
import io.opentelemetry.api.common.AttributeKey;
26+
import io.opentelemetry.api.trace.Span;
27+
import io.opentelemetry.api.trace.Tracer;
28+
import io.opentelemetry.context.Scope;
29+
import io.opentelemetry.sdk.OpenTelemetrySdk;
30+
import io.opentelemetry.sdk.common.CompletableResultCode;
31+
import io.opentelemetry.sdk.trace.SdkTracerProvider;
32+
import io.opentelemetry.sdk.trace.data.SpanData;
33+
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
34+
import io.opentelemetry.sdk.trace.samplers.Sampler;
35+
import java.util.Collection;
36+
import java.util.HashMap;
37+
import java.util.Map;
38+
39+
public class EnableOpenTelemetryTracing {
40+
// Maps Span names to their Span IDs.
41+
private static final Map<String, String> OTEL_SPAN_IDS = new HashMap<>();
42+
43+
// Create a SpanExporter to determine how to handle captured Span data.
44+
// See more at https://opentelemetry.io/docs/languages/java/sdk/#spanexporter
45+
private static class SampleSpanExporter
46+
implements io.opentelemetry.sdk.trace.export.SpanExporter {
47+
48+
// TODO(developer): Replace export output before running the sample.
49+
@Override
50+
public CompletableResultCode export(Collection<SpanData> collection) {
51+
// Export data. This data can be sent out of process via netowork calls, though
52+
// for this example local data structures are used.
53+
if (collection.isEmpty()) {
54+
// No span data was collected.
55+
return CompletableResultCode.ofFailure();
56+
}
57+
58+
for (SpanData data : collection) {
59+
OTEL_SPAN_IDS.put(data.getName(), data.getSpanId());
60+
}
61+
return CompletableResultCode.ofSuccess();
62+
}
63+
64+
// TODO(developer): Replace these functions to suit your needs.
65+
@Override
66+
public CompletableResultCode flush() {
67+
// Export any data that has been queued up but not yet exported.
68+
return CompletableResultCode.ofSuccess();
69+
}
70+
71+
@Override
72+
public CompletableResultCode shutdown() {
73+
// Shut down the exporter and clean up any resources.
74+
return CompletableResultCode.ofSuccess();
75+
}
76+
}
77+
78+
public static void main(String[] args) {
79+
// TODO(developer): Replace Tracer name
80+
final String tracerName = "Sample Tracer";
81+
enableOpenTelemetry(tracerName);
82+
}
83+
84+
public static void enableOpenTelemetry(String tracerName) {
85+
// Create TracerProvider using the custom SpanExporter.
86+
SdkTracerProvider tracerProvider =
87+
SdkTracerProvider.builder()
88+
.addSpanProcessor(SimpleSpanProcessor.create(new SampleSpanExporter()))
89+
.setSampler(Sampler.alwaysOn())
90+
.build();
91+
92+
// Create global OpenTelemetry instance using the TracerProvider.
93+
OpenTelemetry otel =
94+
OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).buildAndRegisterGlobal();
95+
96+
// Create Tracer instance from the global OpenTelemetry object. Tracers are used to create
97+
// Spans. There can be multiple Tracers in a global OpenTelemetry instance.
98+
Tracer tracer = otel.getTracer(tracerName);
99+
100+
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
101+
// be set to enable tracing.
102+
BigQueryOptions otelOptions =
103+
BigQueryOptions.newBuilder()
104+
.setEnableOpenTelemetryTracing(true)
105+
.setOpenTelemetryTracer(tracer)
106+
.build();
107+
BigQuery bigquery = otelOptions.getService();
108+
109+
// Create dataset.
110+
final String datasetId = "sampleDatasetId";
111+
DatasetInfo info = DatasetInfo.newBuilder(datasetId).build();
112+
Dataset dataset = bigquery.create(info);
113+
114+
if (OTEL_SPAN_IDS.containsKey("com.google.cloud.bigquery.BigQuery.createDataset")) {
115+
System.out.println("createDataset Span was captured!");
116+
}
117+
118+
bigquery.delete(datasetId);
119+
}
120+
}
121+
// [END bigquery_enable_otel_tracing]

samples/snippets/src/main/java/com/example/bigquery/EnableOpenTelemetryTracingWithParentSpan.java

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public class EnableOpenTelemetryTracingWithParentSpan {
4949
// See more at https://opentelemetry.io/docs/languages/java/sdk/#spanexporter
5050
private static class SampleSpanExporter
5151
implements io.opentelemetry.sdk.trace.export.SpanExporter {
52+
53+
// TODO(developer): Replace export output before running the sample.
5254
@Override
5355
public CompletableResultCode export(Collection<SpanData> collection) {
5456
// Export data. This data can be sent out of process via netowork calls, though
@@ -57,7 +59,7 @@ public CompletableResultCode export(Collection<SpanData> collection) {
5759
// No span data was collected.
5860
return CompletableResultCode.ofFailure();
5961
}
60-
// TODO(developer): Replace export output before running the sample.
62+
6163
for (SpanData data : collection) {
6264
OTEL_ATTRIBUTES.put(data.getName(), data.getAttributes().asMap());
6365
OTEL_PARENT_SPAN_IDS.put(data.getName(), data.getParentSpanId());
@@ -81,6 +83,7 @@ public CompletableResultCode shutdown() {
8183
}
8284

8385
public static void main(String[] args) {
86+
// TODO(developer): Replace Tracer name
8487
final String tracerName = "Sample Tracer";
8588
enableOpenTelemetryWithParentSpan(tracerName);
8689
}
@@ -99,8 +102,7 @@ public static void enableOpenTelemetryWithParentSpan(String tracerName) {
99102

100103
// Create Tracer instance from the global OpenTelemetry object. Tracers are used to create
101104
// Spans. There can be multiple Tracers in a global OpenTelemetry instance.
102-
// TODO(developer): Replace Tracer name
103-
Tracer tracer = otel.getTracer(tracerName);
105+
final Tracer tracer = otel.getTracer(tracerName);
104106

105107
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
106108
// be set to enable tracing.
@@ -158,20 +160,5 @@ public static void enableOpenTelemetryWithParentSpan(String tracerName) {
158160
bigquery.delete(datasetId);
159161
}
160162
}
161-
162-
public static void createDataset(BigQuery bigquery, String datasetId, Tracer tracer) {
163-
// Parent Span Context is automatically passed on here. childSpan's parent Span is set to be
164-
// parentSpan.
165-
Span childSpan =
166-
tracer
167-
.spanBuilder("Sample Child Span")
168-
.setNoParent()
169-
.setAttribute("sample-child-attribute", "sample-child-value")
170-
.startSpan();
171-
172-
DatasetInfo info = DatasetInfo.newBuilder(datasetId).build();
173-
174-
Dataset dataset = bigquery.create(info);
175-
}
176163
}
177164
// [END bigquery_enable_otel_tracing_with_parent_span]
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright 2025 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.example.bigquery;
18+
19+
import static com.google.common.truth.Truth.assertThat;
20+
21+
import java.io.ByteArrayOutputStream;
22+
import java.io.PrintStream;
23+
import java.util.logging.Level;
24+
import java.util.logging.Logger;
25+
import org.junit.After;
26+
import org.junit.Before;
27+
import org.junit.Test;
28+
29+
public class EnableOpenTelemetryTracingIT {
30+
private final Logger log = Logger.getLogger(this.getClass().getName());
31+
private ByteArrayOutputStream bout;
32+
private PrintStream out;
33+
private PrintStream originalPrintStream;
34+
35+
@Before
36+
public void setUp() {
37+
bout = new ByteArrayOutputStream();
38+
out = new PrintStream(bout);
39+
originalPrintStream = System.out;
40+
System.setOut(out);
41+
}
42+
43+
@After
44+
public void tearDown() {
45+
// restores print statements in the original method
46+
System.out.flush();
47+
System.setOut(originalPrintStream);
48+
log.log(Level.INFO, "\n" + bout.toString());
49+
}
50+
51+
@Test
52+
public void testCreateJob() {
53+
EnableOpenTelemetryTracing.enableOpenTelemetry("Sample Test Tracer");
54+
55+
assertThat(bout.toString()).contains("createDataset Span was captured!");
56+
}
57+
}

0 commit comments

Comments
 (0)