Skip to content

Commit

Permalink
environmental variable
Browse files Browse the repository at this point in the history
  • Loading branch information
YifeiZhuang committed Sep 11, 2024
1 parent 4a72006 commit b2e6ff1
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Stopwatch;
import com.google.common.base.Strings;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
Expand Down Expand Up @@ -62,6 +63,11 @@ public Stopwatch get() {
}
};

@VisibleForTesting
static boolean ENABLE_OTEL_TRACING =
Strings.isNullOrEmpty(System.getenv("GRPC_EXPERIMENTAL_ENABLE_OTEL_TRACING"))
|| Boolean.parseBoolean(System.getenv("GRPC_EXPERIMENTAL_ENABLE_OTEL_TRACING"));

private final OpenTelemetry openTelemetrySdk;
private final MeterProvider meterProvider;
private final Meter meter;
Expand Down Expand Up @@ -160,16 +166,9 @@ public void configureChannelBuilder(ManagedChannelBuilder<?> builder) {
InternalManagedChannelBuilder.addMetricSink(builder, sink);
InternalManagedChannelBuilder.interceptWithTarget(
builder, openTelemetryMetricsModule::getClientInterceptor);
}

void configTracingForChannel(ManagedChannelBuilder<?> builder) {
builder.intercept(openTelemetryTracingModule.getClientInterceptor());
}

void configureTracingForServer(ServerBuilder<?> serverBuilder) {
serverBuilder.addStreamTracerFactory(
openTelemetryTracingModule.getServerTracerFactory());
serverBuilder.intercept(openTelemetryTracingModule.getServerSpanPropagationInterceptor());
if (ENABLE_OTEL_TRACING) {
builder.intercept(openTelemetryTracingModule.getClientInterceptor());
}
}

/**
Expand All @@ -179,6 +178,11 @@ void configureTracingForServer(ServerBuilder<?> serverBuilder) {
*/
public void configureServerBuilder(ServerBuilder<?> serverBuilder) {
serverBuilder.addStreamTracerFactory(openTelemetryMetricsModule.getServerTracerFactory());
if (ENABLE_OTEL_TRACING) {
serverBuilder.addStreamTracerFactory(
openTelemetryTracingModule.getServerTracerFactory());
serverBuilder.intercept(openTelemetryTracingModule.getServerSpanPropagationInterceptor());
}
}

@VisibleForTesting
Expand Down Expand Up @@ -360,6 +364,11 @@ public Builder disableAllMetrics() {
return this;
}

Builder enableTracing(boolean enable) {
ENABLE_OTEL_TRACING = enable;
return this;
}

/**
* Returns a new {@link GrpcOpenTelemetry} built with the configuration of this {@link
* Builder}.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
package io.grpc.opentelemetry;

import io.grpc.Internal;
import io.grpc.ManagedChannelBuilder;
import io.grpc.ServerBuilder;

/**
* Internal accessor for {@link GrpcOpenTelemetry}.
Expand All @@ -32,14 +30,7 @@ public static void builderPlugin(
builder.plugin(plugin);
}


public static void configTracingForChannelExperimental(
ManagedChannelBuilder<?> builder, GrpcOpenTelemetry grpcOpenTelemetry) {
grpcOpenTelemetry.configTracingForChannel(builder);
}

public static void configChannelBuilderExperimental(
ServerBuilder<?> builder, GrpcOpenTelemetry grpcOpenTelemetry) {
grpcOpenTelemetry.configureTracingForServer(builder);
public static void enableTracing(GrpcOpenTelemetry.Builder builder, boolean enable) {
builder.enableTracing(enable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;

import com.google.common.collect.ImmutableList;
import io.grpc.ClientInterceptor;
import io.grpc.ManagedChannelBuilder;
import io.grpc.MetricSink;
import io.grpc.ServerBuilder;
Expand All @@ -34,6 +35,8 @@
import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import java.util.Arrays;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
Expand All @@ -45,6 +48,17 @@ public class GrpcOpenTelemetryTest {
SdkMeterProvider.builder().registerMetricReader(inMemoryMetricReader).build();
private final SdkTracerProvider tracerProvider = SdkTracerProvider.builder().build();
private final OpenTelemetry noopOpenTelemetry = OpenTelemetry.noop();
private boolean originalEnableOtelTracing;

@Before
public void setup() {
originalEnableOtelTracing = GrpcOpenTelemetry.ENABLE_OTEL_TRACING;
}

@After
public void tearDown() {
GrpcOpenTelemetry.ENABLE_OTEL_TRACING = originalEnableOtelTracing;
}

@Test
public void build() {
Expand All @@ -70,22 +84,24 @@ public void buildTracer() {
OpenTelemetrySdk sdk =
OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();

GrpcOpenTelemetry openTelemetryModule = GrpcOpenTelemetry.newBuilder()
GrpcOpenTelemetry grpcOpenTelemetry = GrpcOpenTelemetry.newBuilder()
.enableTracing(true)
.sdk(sdk).build();

assertThat(openTelemetryModule.getOpenTelemetryInstance()).isSameInstanceAs(sdk);
assertThat(openTelemetryModule.getTracer()).isSameInstanceAs(
assertThat(grpcOpenTelemetry.getOpenTelemetryInstance()).isSameInstanceAs(sdk);
assertThat(grpcOpenTelemetry.getTracer()).isSameInstanceAs(
tracerProvider.tracerBuilder("grpc-java")
.setInstrumentationVersion(GrpcUtil.IMPLEMENTATION_VERSION)
.build());
ServerBuilder<?> mockServerBuiler = mock(ServerBuilder.class);
openTelemetryModule.configureServerBuilder(mockServerBuiler);
verify(mockServerBuiler).addStreamTracerFactory(any());
grpcOpenTelemetry.configureServerBuilder(mockServerBuiler);
verify(mockServerBuiler, times(2)).addStreamTracerFactory(any());
verify(mockServerBuiler).intercept(any());
verifyNoMoreInteractions(mockServerBuiler);

ManagedChannelBuilder<?> mockChannelBuilder = mock(ManagedChannelBuilder.class);
openTelemetryModule.configureChannelBuilder(mockChannelBuilder);
verify(mockChannelBuilder, never()).intercept();
grpcOpenTelemetry.configureChannelBuilder(mockChannelBuilder);
verify(mockChannelBuilder).intercept(any(ClientInterceptor.class));
}

@Test
Expand Down

0 comments on commit b2e6ff1

Please sign in to comment.