feat(datastore): Enable Otel metrics for custom Otel by lqiu96 · Pull Request #12969 · googleapis/google-cloud-java · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ static DatastoreMetricsRecorder getInstance(
// Note: Metrics will not be sent if an emulator is enabled.
if (otelOptions.isMetricsEnabled()) {
OpenTelemetry customOtel = otelOptions.getOpenTelemetry();
if (customOtel == null) {
if (customOtel.getMeterProvider() == OpenTelemetry.noop().getMeterProvider()) {
customOtel = GlobalOpenTelemetry.get();
}
recorders.add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@
import com.google.api.core.ApiFutures;
import com.google.api.core.InternalApi;
import com.google.cloud.datastore.DatastoreOptions;
import com.google.cloud.datastore.telemetry.TraceUtil.Context;
import com.google.cloud.datastore.telemetry.TraceUtil.Scope;
import com.google.cloud.datastore.telemetry.TraceUtil.Span;
import com.google.common.base.Throwables;
import io.grpc.ManagedChannelBuilder;
import io.opentelemetry.api.GlobalOpenTelemetry;
Expand All @@ -51,16 +48,12 @@ public class EnabledTraceUtil implements TraceUtil {
private final DatastoreOptions datastoreOptions;

EnabledTraceUtil(DatastoreOptions datastoreOptions) {
OpenTelemetry openTelemetry = datastoreOptions.getOpenTelemetryOptions().getOpenTelemetry();

// If tracing is enabled, but an OpenTelemetry instance is not provided, fall back
// to using GlobalOpenTelemetry.
if (openTelemetry == null) {
openTelemetry = GlobalOpenTelemetry.get();
}

this.datastoreOptions = datastoreOptions;
this.openTelemetry = openTelemetry;
OpenTelemetry otel = datastoreOptions.getOpenTelemetryOptions().getOpenTelemetry();
if (otel.getTracerProvider() == TracerProvider.noop()) {
otel = GlobalOpenTelemetry.get();
}
this.openTelemetry = otel;
this.tracer = openTelemetry.getTracer(LIBRARY_NAME);
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import com.google.api.gax.grpc.ChannelPoolSettings;
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
Expand Down Expand Up @@ -159,6 +160,45 @@ public void testTelemetrySignalsMixedEnabled() {
assertTrue(o2.isEnabled());
}

@Test
public void testOpenTelemetryMetricsAndCloudMonitoringMixed() {
DatastoreOpenTelemetryOptions o1 =
DatastoreOpenTelemetryOptions.newBuilder()
.setMetricsEnabled(true)
.setExportBuiltinMetricsToGoogleCloudMonitoring(false)
.build();
assertTrue(o1.isMetricsEnabled());
assertFalse(o1.isExportBuiltinMetricsToGoogleCloudMonitoring());
assertTrue(o1.isEnabled());

DatastoreOpenTelemetryOptions o2 =
DatastoreOpenTelemetryOptions.newBuilder()
.setMetricsEnabled(false)
.setExportBuiltinMetricsToGoogleCloudMonitoring(true)
.build();
assertFalse(o2.isMetricsEnabled());
assertTrue(o2.isExportBuiltinMetricsToGoogleCloudMonitoring());
assertFalse(o2.isEnabled());
}

@Test
public void testOpenTelemetryOptionsDefaultInstance() {
DatastoreOpenTelemetryOptions telemetryOptions =
DatastoreOpenTelemetryOptions.newBuilder().build();
assertThat(telemetryOptions.getOpenTelemetry())
.isSameInstanceAs(io.opentelemetry.api.OpenTelemetry.noop());
}

@Test
public void testOpenTelemetryOptionsSetNullThrowsNPE() {
try {
DatastoreOpenTelemetryOptions.newBuilder().setOpenTelemetry(null);
fail("Expected NullPointerException");
} catch (NullPointerException e) {
assertThat(e.getMessage()).isEqualTo("OpenTelemetry instance cannot be null");
}
Comment thread
lqiu96 marked this conversation as resolved.
}

@Test
public void testNamespace() {
assertTrue(options.build().getNamespace().isEmpty());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@
* limitations under the License.
*/

package com.google.cloud.datastore;
package com.google.cloud.datastore.it;

import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assume.assumeNotNull;

import com.google.cloud.TransportOptions;
import com.google.cloud.datastore.Datastore;
import com.google.cloud.datastore.DatastoreOpenTelemetryOptions;
import com.google.cloud.datastore.DatastoreOptions;
import com.google.cloud.datastore.Entity;
import com.google.cloud.datastore.Key;
import com.google.cloud.datastore.telemetry.TelemetryConstants;
import com.google.cloud.grpc.GrpcTransportOptions;
import com.google.cloud.http.HttpTransportOptions;
Expand Down Expand Up @@ -59,16 +64,15 @@
*/
@RunWith(Parameterized.class)
@SuppressWarnings("checkstyle:abbreviationaswordinname")
public class ITDatastoreBuiltInAndCustomMetrics {
public class ITDatastoreClientSideMetrics {

private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
private static final String DATABASE_ID =
System.getenv().getOrDefault("DATASTORE_DATABASE_ID", "");
private boolean isDatastoreClosed = false;

private final TransportOptions transportOptions;

public ITDatastoreBuiltInAndCustomMetrics(TransportOptions transportOptions) {
public ITDatastoreClientSideMetrics(TransportOptions transportOptions) {
this.transportOptions = transportOptions;
}

Expand Down Expand Up @@ -134,7 +138,7 @@ public void setUp() {

@After
public void tearDown() throws Exception {
if (datastore != null && !isDatastoreClosed) {
if (datastore != null) {
Key key = datastore.newKeyFactory().setKind(kind).newKey("metrics-it-entity");
try {
datastore.delete(key);
Expand Down
Loading