aboutsummaryrefslogtreecommitdiff
path: root/impl_core
diff options
context:
space:
mode:
authorKristen Kozak <sebright@google.com>2017-11-08 18:03:44 -0800
committerKristen Kozak <sebright@google.com>2017-11-14 13:40:09 -0800
commit1c58c313c0b13d9ef781436572645f699a2c286d (patch)
tree7a9ebddc6db1f6776c893588ac12fb003fd4bc5c /impl_core
parent9b50fa085c73ada5452e286cb030a33252d96cb4 (diff)
downloadopencensus-java-1c58c313c0b13d9ef781436572645f699a2c286d.tar.gz
Add ViewManager.getAllExportedViews().
This method currently returns all registered cumulative views. We could add a way to specify which views should be exported later. The API is currently needed for the StackDriver exporter. The NoopViewManager also returns all cumulative views. However, the exporter could choose to not export data when stats collection isn't enabled.
Diffstat (limited to 'impl_core')
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java5
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/StatsManager.java5
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/ViewManagerImpl.java15
-rw-r--r--impl_core/src/test/java/io/opencensus/implcore/stats/ViewManagerImplTest.java54
4 files changed, 78 insertions, 1 deletions
diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java b/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java
index bf3c8b25..0ee8f3ac 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/MeasureToViewMap.java
@@ -19,6 +19,7 @@ package io.opencensus.implcore.stats;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
import io.opencensus.common.Clock;
import io.opencensus.common.Function;
import io.opencensus.common.Functions;
@@ -64,6 +65,10 @@ final class MeasureToViewMap {
return view == null ? null : view.toViewData(clock.now(), state);
}
+ synchronized Collection<View> getAllViews() {
+ return Sets.newHashSet(registeredViews.values());
+ }
+
@Nullable
private synchronized MutableViewData getMutableViewData(View.Name viewName) {
View view = registeredViews.get(viewName);
diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/StatsManager.java b/impl_core/src/main/java/io/opencensus/implcore/stats/StatsManager.java
index 1a855710..044fb5a8 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/StatsManager.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/StatsManager.java
@@ -24,6 +24,7 @@ import io.opencensus.stats.StatsCollectionState;
import io.opencensus.stats.View;
import io.opencensus.stats.ViewData;
import io.opencensus.tags.TagContext;
+import java.util.Collection;
import javax.annotation.Nullable;
/** Object that stores all views and stats. */
@@ -55,6 +56,10 @@ final class StatsManager {
return measureToViewMap.getView(viewName, clock, state.getInternal());
}
+ Collection<View> getAllViews() {
+ return measureToViewMap.getAllViews();
+ }
+
void record(TagContext tags, MeasureMapInternal measurementValues) {
// TODO(songya): consider exposing No-op MeasureMap and use it when stats state is DISABLED, so
// that we don't need to create actual MeasureMapImpl.
diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/ViewManagerImpl.java b/impl_core/src/main/java/io/opencensus/implcore/stats/ViewManagerImpl.java
index abc4f921..895f1dea 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/ViewManagerImpl.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/ViewManagerImpl.java
@@ -16,9 +16,13 @@
package io.opencensus.implcore.stats;
+import com.google.common.collect.Sets;
import io.opencensus.stats.View;
+import io.opencensus.stats.View.AggregationWindow;
import io.opencensus.stats.ViewData;
import io.opencensus.stats.ViewManager;
+import java.util.Collections;
+import java.util.Set;
import javax.annotation.Nullable;
/** Implementation of {@link ViewManager}. */
@@ -40,6 +44,17 @@ public final class ViewManagerImpl extends ViewManager {
return statsManager.getView(viewName);
}
+ @Override
+ public Set<View> getAllExportedViews() {
+ Set<View> exportedViews = Sets.newHashSet();
+ for (View view : statsManager.getAllViews()) {
+ if (view.getWindow() instanceof AggregationWindow.Cumulative) {
+ exportedViews.add(view);
+ }
+ }
+ return Collections.unmodifiableSet(exportedViews);
+ }
+
void clearStats() {
statsManager.clearStats();
}
diff --git a/impl_core/src/test/java/io/opencensus/implcore/stats/ViewManagerImplTest.java b/impl_core/src/test/java/io/opencensus/implcore/stats/ViewManagerImplTest.java
index 10734023..cfbd6735 100644
--- a/impl_core/src/test/java/io/opencensus/implcore/stats/ViewManagerImplTest.java
+++ b/impl_core/src/test/java/io/opencensus/implcore/stats/ViewManagerImplTest.java
@@ -57,6 +57,7 @@ import io.opencensus.testing.common.TestClock;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -98,6 +99,7 @@ public class ViewManagerImplTest {
private static final double EPSILON = 1e-7;
private static final int MILLIS_PER_SECOND = 1000;
private static final Duration TEN_SECONDS = Duration.create(10, 0);
+ private static final Interval INTERVAL = Interval.create(TEN_SECONDS);
private static final BucketBoundaries BUCKET_BOUNDARIES =
BucketBoundaries.create(
@@ -137,6 +139,56 @@ public class ViewManagerImplTest {
}
@Test
+ public void testGetAllExportedViews() {
+ assertThat(viewManager.getAllExportedViews()).isEmpty();
+ View cumulativeView1 =
+ createCumulativeView(
+ View.Name.create("View 1"), MEASURE_DOUBLE, DISTRIBUTION, Arrays.asList(KEY));
+ View cumulativeView2 =
+ createCumulativeView(
+ View.Name.create("View 2"), MEASURE_DOUBLE, DISTRIBUTION, Arrays.asList(KEY));
+ View intervalView =
+ View.create(
+ View.Name.create("View 3"),
+ VIEW_DESCRIPTION,
+ MEASURE_DOUBLE,
+ DISTRIBUTION,
+ Arrays.asList(KEY),
+ INTERVAL);
+ viewManager.registerView(cumulativeView1);
+ viewManager.registerView(cumulativeView2);
+ viewManager.registerView(intervalView);
+
+ // Only cumulative views should be exported.
+ assertThat(viewManager.getAllExportedViews()).containsExactly(cumulativeView1, cumulativeView2);
+ }
+
+ @Test
+ public void getAllExportedViewsResultIsUnmodifiable() {
+ View view1 =
+ View.create(
+ View.Name.create("View 1"),
+ VIEW_DESCRIPTION,
+ MEASURE_DOUBLE,
+ DISTRIBUTION,
+ Arrays.asList(KEY),
+ CUMULATIVE);
+ viewManager.registerView(view1);
+ Set<View> exported = viewManager.getAllExportedViews();
+
+ View view2 =
+ View.create(
+ View.Name.create("View 2"),
+ VIEW_DESCRIPTION,
+ MEASURE_DOUBLE,
+ DISTRIBUTION,
+ Arrays.asList(KEY),
+ CUMULATIVE);
+ thrown.expect(UnsupportedOperationException.class);
+ exported.add(view2);
+ }
+
+ @Test
public void testRegisterAndGetIntervalView() {
View intervalView =
View.create(
@@ -145,7 +197,7 @@ public class ViewManagerImplTest {
MEASURE_DOUBLE,
DISTRIBUTION,
Arrays.asList(KEY),
- Interval.create(Duration.create(60, 0)));
+ INTERVAL);
viewManager.registerView(intervalView);
assertThat(viewManager.getView(VIEW_NAME).getView()).isEqualTo(intervalView);
assertThat(viewManager.getView(VIEW_NAME).getAggregationMap()).isEmpty();