diff options
3 files changed, 87 insertions, 46 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 56a59ac3..99e2d7a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ## Unreleased +- Add APIs to register gRPC client and server views separately. ## 0.15.0 - 2018-06-20 - Expose the factory methods of MonitoredResource. diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java index f765092f..ef06ba2b 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java @@ -56,7 +56,7 @@ public final class RpcViews { RpcViewConstants.RPC_SERVER_FINISHED_COUNT_CUMULATIVE_VIEW); @VisibleForTesting - static final ImmutableSet<View> GRPC_CUMULATIVE_VIEWS_SET = + static final ImmutableSet<View> GRPC_CLIENT_VIEWS_SET = ImmutableSet.of( RpcViewConstants.GRPC_CLIENT_ROUNDTRIP_LATENCY_VIEW, RpcViewConstants.GRPC_CLIENT_SENT_BYTES_PER_RPC_VIEW, @@ -65,7 +65,11 @@ public final class RpcViews { RpcViewConstants.GRPC_CLIENT_RECEIVED_MESSAGES_PER_RPC_VIEW, RpcViewConstants.GRPC_CLIENT_SERVER_LATENCY_VIEW, RpcViewConstants.GRPC_CLIENT_COMPLETED_RPC_VIEW, - RpcViewConstants.GRPC_CLIENT_STARTED_RPC_VIEW, + RpcViewConstants.GRPC_CLIENT_STARTED_RPC_VIEW); + + @VisibleForTesting + static final ImmutableSet<View> GRPC_SERVER_VIEWS_SET = + ImmutableSet.of( RpcViewConstants.GRPC_SERVER_SERVER_LATENCY_VIEW, RpcViewConstants.GRPC_SERVER_SENT_BYTES_PER_RPC_VIEW, RpcViewConstants.GRPC_SERVER_RECEIVED_BYTES_PER_RPC_VIEW, @@ -127,6 +131,9 @@ public final class RpcViews { * * <p>It is recommended to call this method before doing any RPC call to avoid missing stats. * + * <p>This is equivalent with calling {@link #registerClientGrpcViews()} and {@link + * #registerServerGrpcViews()}. + * * @since 0.13 */ public static void registerAllGrpcViews() { @@ -135,7 +142,42 @@ public final class RpcViews { @VisibleForTesting static void registerAllGrpcViews(ViewManager viewManager) { - for (View view : GRPC_CUMULATIVE_VIEWS_SET) { + registerClientGrpcViews(viewManager); + registerServerGrpcViews(viewManager); + } + + /** + * Registers all standard client gRPC views. + * + * <p>It is recommended to call this method before doing any RPC call to avoid missing stats. + * + * @since 0.16 + */ + public static void registerClientGrpcViews() { + registerClientGrpcViews(Stats.getViewManager()); + } + + @VisibleForTesting + static void registerClientGrpcViews(ViewManager viewManager) { + for (View view : GRPC_CLIENT_VIEWS_SET) { + viewManager.registerView(view); + } + } + + /** + * Registers all standard server gRPC views. + * + * <p>It is recommended to call this method before doing any RPC call to avoid missing stats. + * + * @since 0.16 + */ + public static void registerServerGrpcViews() { + registerServerGrpcViews(Stats.getViewManager()); + } + + @VisibleForTesting + static void registerServerGrpcViews(ViewManager viewManager) { + for (View view : GRPC_SERVER_VIEWS_SET) { viewManager.registerView(view); } } diff --git a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java index c3727f1f..a908629f 100644 --- a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java +++ b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java @@ -18,10 +18,12 @@ package io.opencensus.contrib.grpc.metrics; import static com.google.common.truth.Truth.assertThat; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import io.opencensus.stats.View; import io.opencensus.stats.ViewData; import io.opencensus.stats.ViewManager; +import java.util.Collection; import java.util.Map; import java.util.Set; import javax.annotation.Nullable; @@ -37,60 +39,56 @@ public class RpcViewsTest { public void registerCumulative() { FakeViewManager fakeViewManager = new FakeViewManager(); RpcViews.registerAllCumulativeViews(fakeViewManager); - for (View view : RpcViews.RPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isTrue(); - } - for (View view : RpcViews.RPC_INTERVAL_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isFalse(); - } - for (View view : RpcViews.GRPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isFalse(); - } + assertThat(fakeViewManager.getRegisteredViews()) + .containsExactlyElementsIn(RpcViews.RPC_CUMULATIVE_VIEWS_SET); } @Test public void registerInterval() { FakeViewManager fakeViewManager = new FakeViewManager(); RpcViews.registerAllIntervalViews(fakeViewManager); - for (View view : RpcViews.RPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isFalse(); - } - for (View view : RpcViews.RPC_INTERVAL_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isTrue(); - } - for (View view : RpcViews.GRPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isFalse(); - } + assertThat(fakeViewManager.getRegisteredViews()) + .containsExactlyElementsIn(RpcViews.RPC_INTERVAL_VIEWS_SET); + } + + @Test + public void registerAll() { + FakeViewManager fakeViewManager = new FakeViewManager(); + RpcViews.registerAllViews(fakeViewManager); + assertThat(fakeViewManager.getRegisteredViews()) + .containsExactlyElementsIn( + ImmutableSet.builder() + .addAll(RpcViews.RPC_CUMULATIVE_VIEWS_SET) + .addAll(RpcViews.RPC_INTERVAL_VIEWS_SET) + .build()); } @Test - public void registerGrpcViews() { + public void registerAllGrpcViews() { FakeViewManager fakeViewManager = new FakeViewManager(); RpcViews.registerAllGrpcViews(fakeViewManager); - for (View view : RpcViews.RPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isFalse(); - } - for (View view : RpcViews.RPC_INTERVAL_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isFalse(); - } - for (View view : RpcViews.GRPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isTrue(); - } + assertThat(fakeViewManager.getRegisteredViews()) + .containsExactlyElementsIn( + ImmutableSet.builder() + .addAll(RpcViews.GRPC_CLIENT_VIEWS_SET) + .addAll(RpcViews.GRPC_SERVER_VIEWS_SET) + .build()); } @Test - public void registerAll() { + public void registerClientGrpcViews() { FakeViewManager fakeViewManager = new FakeViewManager(); - RpcViews.registerAllViews(fakeViewManager); - for (View view : RpcViews.RPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isTrue(); - } - for (View view : RpcViews.RPC_INTERVAL_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isTrue(); - } - for (View view : RpcViews.GRPC_CUMULATIVE_VIEWS_SET) { - assertThat(fakeViewManager.isRegistered(view)).isFalse(); - } + RpcViews.registerClientGrpcViews(fakeViewManager); + assertThat(fakeViewManager.getRegisteredViews()) + .containsExactlyElementsIn(RpcViews.GRPC_CLIENT_VIEWS_SET); + } + + @Test + public void registerServerGrpcViews() { + FakeViewManager fakeViewManager = new FakeViewManager(); + RpcViews.registerServerGrpcViews(fakeViewManager); + assertThat(fakeViewManager.getRegisteredViews()) + .containsExactlyElementsIn(RpcViews.GRPC_SERVER_VIEWS_SET); } // TODO(bdrutu): Test with reflection that all defined gRPC views are registered. @@ -105,10 +103,6 @@ public class RpcViewsTest { registeredViews.put(view.getName(), view); } - private boolean isRegistered(View view) { - return registeredViews.containsKey(view.getName()); - } - @Nullable @Override public ViewData getView(View.Name view) { @@ -119,5 +113,9 @@ public class RpcViewsTest { public Set<View> getAllExportedViews() { throw new UnsupportedOperationException(); } + + private Collection<View> getRegisteredViews() { + return registeredViews.values(); + } } } |
