aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java48
-rw-r--r--contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java84
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();
+ }
}
}