diff options
13 files changed, 207 insertions, 93 deletions
diff --git a/api/src/main/java/io/opencensus/stats/NoopStats.java b/api/src/main/java/io/opencensus/stats/NoopStats.java index 74f8f660..97d2976a 100644 --- a/api/src/main/java/io/opencensus/stats/NoopStats.java +++ b/api/src/main/java/io/opencensus/stats/NoopStats.java @@ -27,10 +27,6 @@ import io.opencensus.common.Functions; import io.opencensus.common.Timestamp; import io.opencensus.stats.Measure.MeasureDouble; import io.opencensus.stats.Measure.MeasureLong; -import io.opencensus.stats.View.AggregationWindow; -import io.opencensus.stats.ViewData.AggregationWindowData; -import io.opencensus.stats.ViewData.AggregationWindowData.CumulativeData; -import io.opencensus.stats.ViewData.AggregationWindowData.IntervalData; import io.opencensus.tags.TagContext; import io.opencensus.tags.TagValue; import java.util.Collection; @@ -176,6 +172,7 @@ final class NoopStats { @Override @Nullable + @SuppressWarnings("deprecation") public ViewData getView(View.Name name) { checkNotNull(name, "name"); synchronized (registeredViews) { @@ -188,11 +185,12 @@ final class NoopStats { Collections.<List<TagValue>, AggregationData>emptyMap(), view.getWindow() .match( - Functions.<AggregationWindowData>returnConstant( - CumulativeData.create(ZERO_TIMESTAMP, ZERO_TIMESTAMP)), - Functions.<AggregationWindowData>returnConstant( - IntervalData.create(ZERO_TIMESTAMP)), - Functions.<AggregationWindowData>throwAssertionError())); + Functions.<ViewData.AggregationWindowData>returnConstant( + ViewData.AggregationWindowData.CumulativeData.create( + ZERO_TIMESTAMP, ZERO_TIMESTAMP)), + Functions.<ViewData.AggregationWindowData>returnConstant( + ViewData.AggregationWindowData.IntervalData.create(ZERO_TIMESTAMP)), + Functions.<ViewData.AggregationWindowData>throwAssertionError())); } } } @@ -209,12 +207,14 @@ final class NoopStats { } // Returns the subset of the given views that should be exported + @SuppressWarnings("deprecation") private static Set<View> filterExportedViews(Collection<View> allViews) { Set<View> views = Sets.newHashSet(); for (View view : allViews) { - if (view.getWindow() instanceof AggregationWindow.Cumulative) { - views.add(view); + if (view.getWindow() instanceof View.AggregationWindow.Interval) { + continue; } + views.add(view); } return Collections.unmodifiableSet(views); } diff --git a/api/src/main/java/io/opencensus/stats/View.java b/api/src/main/java/io/opencensus/stats/View.java index a26c777b..32915919 100644 --- a/api/src/main/java/io/opencensus/stats/View.java +++ b/api/src/main/java/io/opencensus/stats/View.java @@ -40,7 +40,7 @@ import javax.annotation.concurrent.Immutable; @AutoValue // Suppress Checker Framework warning about missing @Nullable in generated equals method. @AutoValue.CopyAnnotations -@SuppressWarnings("nullness") +@SuppressWarnings({"nullness", "deprecation"}) public abstract class View { @VisibleForTesting static final int NAME_MAX_LENGTH = 255; @@ -90,7 +90,9 @@ public abstract class View { * * @return the time {@link AggregationWindow}. * @since 0.8 + * @deprecated since 0.13. In the future all {@link View}s will be cumulative. */ + @Deprecated public abstract AggregationWindow getWindow(); /** @@ -105,7 +107,9 @@ public abstract class View { * @param window the {@link AggregationWindow} of view. * @return a new {@link View}. * @since 0.8 + * @deprecated in favor of {@link #create(Name, String, Measure, Aggregation, List)}. */ + @Deprecated public static View create( Name name, String description, @@ -125,6 +129,35 @@ public abstract class View { } /** + * Constructs a new {@link View}. + * + * @param name the {@link Name} of view. Must be unique. + * @param description the description of view. + * @param measure the {@link Measure} to be aggregated by this view. + * @param aggregation the basic {@link Aggregation} that this view will support. + * @param columns the {@link TagKey}s that this view will aggregate on. Columns should not contain + * duplicates. + * @return a new {@link View}. + * @since 0.13 + */ + public static View create( + Name name, + String description, + Measure measure, + Aggregation aggregation, + List<TagKey> columns) { + checkArgument(new HashSet<TagKey>(columns).size() == columns.size(), "Columns have duplicate."); + + return new AutoValue_View( + name, + description, + measure, + aggregation, + Collections.unmodifiableList(new ArrayList<TagKey>(columns)), + AggregationWindow.Cumulative.create()); + } + + /** * The name of a {@code View}. * * @since 0.8 @@ -169,7 +202,9 @@ public abstract class View { * The time window for a {@code View}. * * @since 0.8 + * @deprecated since 0.13. In the future all {@link View}s will be cumulative. */ + @Deprecated @Immutable public abstract static class AggregationWindow { @@ -189,7 +224,9 @@ public abstract class View { * Cumulative (infinite interval) time {@code AggregationWindow}. * * @since 0.8 + * @deprecated since 0.13. In the future all {@link View}s will be cumulative. */ + @Deprecated @Immutable @AutoValue // Suppress Checker Framework warning about missing @Nullable in generated equals method. @@ -227,7 +264,9 @@ public abstract class View { * Interval (finite interval) time {@code AggregationWindow}. * * @since 0.8 + * @deprecated since 0.13. In the future all {@link View}s will be cumulative. */ + @Deprecated @Immutable @AutoValue // Suppress Checker Framework warning about missing @Nullable in generated equals method. diff --git a/api/src/main/java/io/opencensus/stats/ViewData.java b/api/src/main/java/io/opencensus/stats/ViewData.java index 951afb2e..3ee67ca9 100644 --- a/api/src/main/java/io/opencensus/stats/ViewData.java +++ b/api/src/main/java/io/opencensus/stats/ViewData.java @@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkArgument; import com.google.auto.value.AutoValue; import com.google.common.collect.Maps; +import io.opencensus.common.Duration; import io.opencensus.common.Function; import io.opencensus.common.Functions; import io.opencensus.common.Timestamp; @@ -34,7 +35,6 @@ import io.opencensus.stats.AggregationData.SumDataDouble; import io.opencensus.stats.AggregationData.SumDataLong; import io.opencensus.stats.Measure.MeasureDouble; import io.opencensus.stats.Measure.MeasureLong; -import io.opencensus.stats.View.AggregationWindow; import io.opencensus.tags.TagValue; import java.util.ArrayList; import java.util.Collections; @@ -56,7 +56,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; @AutoValue // Suppress Checker Framework warning about missing @Nullable in generated equals method. @AutoValue.CopyAnnotations -@SuppressWarnings("nullness") +@SuppressWarnings({"nullness", "deprecation"}) public abstract class ViewData { // Prevents this class from being subclassed anywhere else. @@ -80,12 +80,33 @@ public abstract class ViewData { /** * Returns the {@link AggregationWindowData} associated with this {@link ViewData}. * + * <p>{@link AggregationWindowData} is deprecated since 0.13, please avoid using this method. Use + * {@link #getStart()} and {@link #getEnd()} instead. + * * @return the {@code AggregationWindowData}. * @since 0.8 + * @deprecated in favor of {@link #getStart()} and {@link #getEnd()}. */ + @Deprecated public abstract AggregationWindowData getWindowData(); /** + * Returns the start {@code Timestamp} for a {@link ViewData}. + * + * @return the start {@code Timestamp}. + * @since 0.13 + */ + public abstract Timestamp getStart(); + + /** + * Returns the end {@code Timestamp} for a {@link ViewData}. + * + * @return the end {@code Timestamp}. + * @since 0.13 + */ + public abstract Timestamp getEnd(); + + /** * Constructs a new {@link ViewData}. * * @param view the {@link View} associated with this {@link ViewData}. @@ -96,12 +117,62 @@ public abstract class ViewData { * AggregationData} don't match, or the types of {@code Window} and {@code WindowData} don't * match. * @since 0.8 + * @deprecated in favor of {@link #create(View, Map, Timestamp, Timestamp)}. */ + @Deprecated public static ViewData create( - View view, + final View view, Map<? extends List</*@Nullable*/ TagValue>, ? extends AggregationData> map, final AggregationWindowData windowData) { checkWindow(view.getWindow(), windowData); + final Map<List<TagValue>, AggregationData> deepCopy = Maps.newHashMap(); + for (Entry<? extends List<TagValue>, ? extends AggregationData> entry : map.entrySet()) { + checkAggregation(view.getAggregation(), entry.getValue(), view.getMeasure()); + deepCopy.put( + Collections.unmodifiableList(new ArrayList</*@Nullable*/ TagValue>(entry.getKey())), + entry.getValue()); + } + return windowData.match( + new Function<ViewData.AggregationWindowData.CumulativeData, ViewData>() { + @Override + public ViewData apply(ViewData.AggregationWindowData.CumulativeData arg) { + return new AutoValue_ViewData( + view, Collections.unmodifiableMap(deepCopy), arg, arg.getStart(), arg.getEnd()); + } + }, + new Function<ViewData.AggregationWindowData.IntervalData, ViewData>() { + @Override + public ViewData apply(ViewData.AggregationWindowData.IntervalData arg) { + Duration duration = ((View.AggregationWindow.Interval) view.getWindow()).getDuration(); + return new AutoValue_ViewData( + view, + Collections.unmodifiableMap(deepCopy), + arg, + arg.getEnd() + .addDuration(Duration.create(-duration.getSeconds(), -duration.getNanos())), + arg.getEnd()); + } + }, + Functions.<ViewData>throwAssertionError()); + } + + /** + * Constructs a new {@link ViewData}. + * + * @param view the {@link View} associated with this {@link ViewData}. + * @param map the mapping from {@link TagValue} list to {@link AggregationData}. + * @param start the start {@link Timestamp} for this {@link ViewData}. + * @param end the end {@link Timestamp} for this {@link ViewData}. + * @return a {@code ViewData}. + * @throws IllegalArgumentException if the types of {@code Aggregation} and {@code + * AggregationData} don't match. + * @since 0.13 + */ + public static ViewData create( + View view, + Map<? extends List</*@Nullable*/ TagValue>, ? extends AggregationData> map, + Timestamp start, + Timestamp end) { Map<List<TagValue>, AggregationData> deepCopy = Maps.newHashMap(); for (Entry<? extends List<TagValue>, ? extends AggregationData> entry : map.entrySet()) { checkAggregation(view.getAggregation(), entry.getValue(), view.getMeasure()); @@ -109,11 +180,16 @@ public abstract class ViewData { Collections.unmodifiableList(new ArrayList</*@Nullable*/ TagValue>(entry.getKey())), entry.getValue()); } - return new AutoValue_ViewData(view, Collections.unmodifiableMap(deepCopy), windowData); + return new AutoValue_ViewData( + view, + Collections.unmodifiableMap(deepCopy), + AggregationWindowData.CumulativeData.create(start, end), + start, + end); } private static void checkWindow( - AggregationWindow window, final AggregationWindowData windowData) { + View.AggregationWindow window, final AggregationWindowData windowData) { window.match( new Function<View.AggregationWindow.Cumulative, Void>() { @Override @@ -133,11 +209,11 @@ public abstract class ViewData { return null; } }, - Functions.</*@Nullable*/ Void>throwIllegalArgumentException()); + Functions.</*@Nullable*/ Void>throwAssertionError()); } private static String createErrorMessageForWindow( - AggregationWindow window, AggregationWindowData windowData) { + View.AggregationWindow window, AggregationWindowData windowData) { return "AggregationWindow and AggregationWindowData types mismatch. " + "AggregationWindow: " + window @@ -217,7 +293,9 @@ public abstract class ViewData { * The {@code AggregationWindowData} for a {@link ViewData}. * * @since 0.8 + * @deprecated since 0.13, please use start and end {@link Timestamp} instead. */ + @Deprecated @Immutable public abstract static class AggregationWindowData { @@ -237,7 +315,9 @@ public abstract class ViewData { * Cumulative {@code AggregationWindowData}. * * @since 0.8 + * @deprecated since 0.13, please use start and end {@link Timestamp} instead. */ + @Deprecated @Immutable @AutoValue // Suppress Checker Framework warning about missing @Nullable in generated equals method. @@ -288,7 +368,9 @@ public abstract class ViewData { * Interval {@code AggregationWindowData}. * * @since 0.8 + * @deprecated since 0.13, please use start and end {@link Timestamp} instead. */ + @Deprecated @Immutable @AutoValue // Suppress Checker Framework warning about missing @Nullable in generated equals method. diff --git a/api/src/test/java/io/opencensus/stats/NoopViewManagerTest.java b/api/src/test/java/io/opencensus/stats/NoopViewManagerTest.java index 4aaa60dc..44c7626f 100644 --- a/api/src/test/java/io/opencensus/stats/NoopViewManagerTest.java +++ b/api/src/test/java/io/opencensus/stats/NoopViewManagerTest.java @@ -105,6 +105,8 @@ public final class NoopViewManagerTest { ViewData viewData = viewManager.getView(VIEW_NAME); assertThat(viewData.getView()).isEqualTo(view); assertThat(viewData.getAggregationMap()).isEmpty(); + assertThat(viewData.getStart()).isEqualTo(Timestamp.create(0, 0)); + assertThat(viewData.getEnd()).isEqualTo(Timestamp.create(0, 0)); assertThat(viewData.getWindowData()) .isEqualTo(CumulativeData.create(Timestamp.create(0, 0), Timestamp.create(0, 0))); } @@ -171,23 +173,13 @@ public final class NoopViewManagerTest { ViewManager viewManager = NoopStats.newNoopViewManager(); View view1 = View.create( - View.Name.create("View 1"), - VIEW_DESCRIPTION, - MEASURE, - AGGREGATION, - Arrays.asList(KEY), - CUMULATIVE); + View.Name.create("View 1"), VIEW_DESCRIPTION, MEASURE, AGGREGATION, Arrays.asList(KEY)); viewManager.registerView(view1); Set<View> exported = viewManager.getAllExportedViews(); View view2 = View.create( - View.Name.create("View 2"), - VIEW_DESCRIPTION, - MEASURE, - AGGREGATION, - Arrays.asList(KEY), - CUMULATIVE); + View.Name.create("View 2"), VIEW_DESCRIPTION, MEASURE, AGGREGATION, Arrays.asList(KEY)); thrown.expect(UnsupportedOperationException.class); exported.add(view2); } diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java index b643c3dd..093d55a9 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java @@ -49,9 +49,6 @@ import io.opencensus.stats.Aggregation.Distribution; import io.opencensus.stats.Aggregation.Mean; import io.opencensus.stats.BucketBoundaries; import io.opencensus.stats.View; -import io.opencensus.stats.View.AggregationWindow; -import io.opencensus.stats.View.AggregationWindow.Cumulative; -import io.opencensus.stats.View.AggregationWindow.Interval; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -61,6 +58,7 @@ import java.util.List; * * @since 0.8 */ +@SuppressWarnings("deprecation") public final class RpcViewConstants { // Common histogram bucket boundaries for bytes received/sets Views. @@ -118,9 +116,16 @@ public final class RpcViewConstants { @VisibleForTesting static final Duration MINUTE = Duration.create(60, 0); @VisibleForTesting static final Duration HOUR = Duration.create(60 * 60, 0); - @VisibleForTesting static final AggregationWindow CUMULATIVE = Cumulative.create(); - @VisibleForTesting static final AggregationWindow INTERVAL_MINUTE = Interval.create(MINUTE); - @VisibleForTesting static final AggregationWindow INTERVAL_HOUR = Interval.create(HOUR); + + @VisibleForTesting + static final View.AggregationWindow CUMULATIVE = View.AggregationWindow.Cumulative.create(); + + @VisibleForTesting + static final View.AggregationWindow INTERVAL_MINUTE = + View.AggregationWindow.Interval.create(MINUTE); + + @VisibleForTesting + static final View.AggregationWindow INTERVAL_HOUR = View.AggregationWindow.Interval.create(HOUR); // Rpc client cumulative views. diff --git a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/RpczZPageHandler.java b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/RpczZPageHandler.java index 1a2ebb82..56ccb734 100644 --- a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/RpczZPageHandler.java +++ b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/RpczZPageHandler.java @@ -88,8 +88,6 @@ import io.opencensus.stats.AggregationData.DistributionData; import io.opencensus.stats.AggregationData.MeanData; import io.opencensus.stats.View; import io.opencensus.stats.ViewData; -import io.opencensus.stats.ViewData.AggregationWindowData; -import io.opencensus.stats.ViewData.AggregationWindowData.CumulativeData; import io.opencensus.stats.ViewManager; import io.opencensus.tags.TagValue; import java.io.BufferedWriter; @@ -108,6 +106,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; */ /** HTML page formatter for gRPC cumulative and interval stats. */ +@SuppressWarnings("deprecation") final class RpczZPageHandler extends ZPageHandler { private final ViewManager viewManager; @@ -364,7 +363,10 @@ final class RpczZPageHandler extends ZPageHandler { // Gets RPC stats by its view definition, and set it to stats snapshot. private static void getStats( - StatsSnapshot snapshot, AggregationData data, View view, AggregationWindowData windowData) { + StatsSnapshot snapshot, + AggregationData data, + View view, + ViewData.AggregationWindowData windowData) { if (view == RPC_CLIENT_ROUNDTRIP_LATENCY_VIEW || view == RPC_SERVER_SERVER_LATENCY_VIEW) { snapshot.avgLatencyTotal = ((DistributionData) data).getMean(); } else if (view == RPC_CLIENT_ROUNDTRIP_LATENCY_MINUTE_VIEW @@ -387,7 +389,7 @@ final class RpczZPageHandler extends ZPageHandler { distributionData.getCount() * distributionData.getMean() / BYTES_PER_KB - / getDurationInSecs((CumulativeData) windowData); + / getDurationInSecs((ViewData.AggregationWindowData.CumulativeData) windowData); } else if (view == RPC_CLIENT_REQUEST_BYTES_MINUTE_VIEW || view == RPC_SERVER_REQUEST_BYTES_MINUTE_VIEW) { MeanData meanData = (MeanData) data; @@ -404,7 +406,7 @@ final class RpczZPageHandler extends ZPageHandler { distributionData.getCount() * distributionData.getMean() / BYTES_PER_KB - / getDurationInSecs((CumulativeData) windowData); + / getDurationInSecs((ViewData.AggregationWindowData.CumulativeData) windowData); } else if (view == RPC_CLIENT_RESPONSE_BYTES_MINUTE_VIEW || view == RPC_SERVER_RESPONSE_BYTES_MINUTE_VIEW) { MeanData meanData = (MeanData) data; @@ -426,12 +428,15 @@ final class RpczZPageHandler extends ZPageHandler { } else if (view == RPC_CLIENT_STARTED_COUNT_CUMULATIVE_VIEW || view == RPC_SERVER_STARTED_COUNT_CUMULATIVE_VIEW) { snapshot.countTotal = ((CountData) data).getCount(); - snapshot.rpcRateTotal = snapshot.countTotal / getDurationInSecs((CumulativeData) windowData); + snapshot.rpcRateTotal = + snapshot.countTotal + / getDurationInSecs((ViewData.AggregationWindowData.CumulativeData) windowData); } // TODO(songya): compute and store latency percentiles. } // Calculates the duration of the given CumulativeData in seconds. - private static double getDurationInSecs(CumulativeData cumulativeData) { + private static double getDurationInSecs( + ViewData.AggregationWindowData.CumulativeData cumulativeData) { return toDoubleSeconds(cumulativeData.getEnd().subtractTimestamp(cumulativeData.getStart())); } diff --git a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/StatszZPageHandler.java b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/StatszZPageHandler.java index bcf87d57..bacdc294 100644 --- a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/StatszZPageHandler.java +++ b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/StatszZPageHandler.java @@ -41,8 +41,6 @@ import io.opencensus.stats.AggregationData.SumDataLong; import io.opencensus.stats.Measure; import io.opencensus.stats.View; import io.opencensus.stats.ViewData; -import io.opencensus.stats.ViewData.AggregationWindowData; -import io.opencensus.stats.ViewData.AggregationWindowData.CumulativeData; import io.opencensus.stats.ViewManager; import io.opencensus.tags.TagKey; import io.opencensus.tags.TagValue; @@ -66,6 +64,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; */ /** HTML page formatter for all exported {@link View}s. */ +@SuppressWarnings("deprecation") final class StatszZPageHandler extends ZPageHandler { private static final Object monitor = new Object(); @@ -305,7 +304,7 @@ final class StatszZPageHandler extends ZPageHandler { } private static void emitViewInfo( - View view, AggregationWindowData windowData, PrintWriter out, Formatter formatter) { + View view, ViewData.AggregationWindowData windowData, PrintWriter out, Formatter formatter) { formatter.format("<table width=100%% %s>", TABLE_BORDER); emitViewInfoHeader(out, formatter); @@ -324,9 +323,9 @@ final class StatszZPageHandler extends ZPageHandler { Functions.<String>throwAssertionError()); formatter.format("<td>%s</td>", aggregationType); windowData.match( - new Function<CumulativeData, Void>() { + new Function<ViewData.AggregationWindowData.CumulativeData, Void>() { @Override - public Void apply(CumulativeData arg) { + public Void apply(ViewData.AggregationWindowData.CumulativeData arg) { formatter.format("<td>%s</td>", toDate(arg.getStart())); formatter.format("<td>%s</td>", toDate(arg.getEnd())); return null; diff --git a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/ZPageHandlers.java b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/ZPageHandlers.java index fa581d11..710e9a20 100644 --- a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/ZPageHandlers.java +++ b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/ZPageHandlers.java @@ -22,7 +22,6 @@ import com.sun.net.httpserver.HttpServer; import io.opencensus.stats.Measure; import io.opencensus.stats.Stats; import io.opencensus.stats.View; -import io.opencensus.stats.View.AggregationWindow.Cumulative; import io.opencensus.trace.Tracing; import java.io.IOException; import java.net.InetSocketAddress; @@ -128,7 +127,7 @@ public final class ZPageHandlers { /** * Returns a {@code ZPageHandler} for all registered {@link View}s and {@link Measure}s. * - * <p>Only {@link Cumulative} views are exported. {@link View}s are grouped by directories. + * <p>Only {@code Cumulative} views are exported. {@link View}s are grouped by directories. * * @return a {@code ZPageHandler} for all registered {@code View}s and {@code Measure}s. * @since 0.12.0 diff --git a/exporters/stats/prometheus/src/main/java/io/opencensus/exporter/stats/prometheus/PrometheusExportUtils.java b/exporters/stats/prometheus/src/main/java/io/opencensus/exporter/stats/prometheus/PrometheusExportUtils.java index 2e0dd232..4a650b97 100644 --- a/exporters/stats/prometheus/src/main/java/io/opencensus/exporter/stats/prometheus/PrometheusExportUtils.java +++ b/exporters/stats/prometheus/src/main/java/io/opencensus/exporter/stats/prometheus/PrometheusExportUtils.java @@ -33,8 +33,6 @@ import io.opencensus.stats.AggregationData.MeanData; import io.opencensus.stats.AggregationData.SumDataDouble; import io.opencensus.stats.AggregationData.SumDataLong; import io.opencensus.stats.View; -import io.opencensus.stats.View.AggregationWindow; -import io.opencensus.stats.View.AggregationWindow.Cumulative; import io.opencensus.stats.ViewData; import io.opencensus.tags.TagKey; import io.opencensus.tags.TagValue; @@ -55,7 +53,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; * Util methods to convert OpenCensus Stats data models to Prometheus data models. * * <p>Each OpenCensus {@link View} will be converted to a Prometheus {@link MetricFamilySamples} - * with no {@link Sample}s, and is used for registering Prometheus {@code Metric}s. Only {@link + * with no {@link Sample}s, and is used for registering Prometheus {@code Metric}s. Only {@code * Cumulative} views are supported. All views are under namespace "opencensus". * * <p>{@link Aggregation} will be converted to a corresponding Prometheus {@link Type}. {@link Sum} @@ -78,6 +76,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; * <p>Please note that Prometheus Metric and Label name can only have alphanumeric characters and * underscore. All other characters will be sanitized by underscores. */ +@SuppressWarnings("deprecation") final class PrometheusExportUtils { @VisibleForTesting static final String OPENCENSUS_NAMESPACE = "opencensus"; @@ -112,8 +111,8 @@ final class PrometheusExportUtils { } @VisibleForTesting - static Type getType(Aggregation aggregation, AggregationWindow window) { - if (!(window instanceof Cumulative)) { + static Type getType(Aggregation aggregation, View.AggregationWindow window) { + if (!(window instanceof View.AggregationWindow.Cumulative)) { return Type.UNTYPED; } return aggregation.match( diff --git a/exporters/stats/signalfx/src/main/java/io/opencensus/exporter/stats/signalfx/SignalFxSessionAdaptor.java b/exporters/stats/signalfx/src/main/java/io/opencensus/exporter/stats/signalfx/SignalFxSessionAdaptor.java index 8fc74e9c..67a6dfc6 100644 --- a/exporters/stats/signalfx/src/main/java/io/opencensus/exporter/stats/signalfx/SignalFxSessionAdaptor.java +++ b/exporters/stats/signalfx/src/main/java/io/opencensus/exporter/stats/signalfx/SignalFxSessionAdaptor.java @@ -33,7 +33,6 @@ import io.opencensus.stats.AggregationData.MeanData; import io.opencensus.stats.AggregationData.SumDataDouble; import io.opencensus.stats.AggregationData.SumDataLong; import io.opencensus.stats.View; -import io.opencensus.stats.View.AggregationWindow; import io.opencensus.stats.ViewData; import io.opencensus.tags.TagKey; import io.opencensus.tags.TagValue; @@ -48,6 +47,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; */ /** Adapter for a {@code ViewData}'s contents into SignalFx datapoints. */ +@SuppressWarnings("deprecation") final class SignalFxSessionAdaptor { private SignalFxSessionAdaptor() {} @@ -87,11 +87,12 @@ final class SignalFxSessionAdaptor { @VisibleForTesting @javax.annotation.Nullable - static MetricType getMetricTypeForAggregation(Aggregation aggregation, AggregationWindow window) { + static MetricType getMetricTypeForAggregation( + Aggregation aggregation, View.AggregationWindow window) { if (aggregation instanceof Aggregation.Mean) { return MetricType.GAUGE; } else if (aggregation instanceof Aggregation.Count || aggregation instanceof Aggregation.Sum) { - if (window instanceof AggregationWindow.Cumulative) { + if (window instanceof View.AggregationWindow.Cumulative) { return MetricType.CUMULATIVE_COUNTER; } // TODO(mpetazzoni): support incremental counters when AggregationWindow.Interval is ready diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java index fbd8d250..82216b6a 100644 --- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java +++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java @@ -47,12 +47,7 @@ import io.opencensus.stats.AggregationData.SumDataLong; import io.opencensus.stats.BucketBoundaries; import io.opencensus.stats.Measure; import io.opencensus.stats.View; -import io.opencensus.stats.View.AggregationWindow; -import io.opencensus.stats.View.AggregationWindow.Cumulative; import io.opencensus.stats.ViewData; -import io.opencensus.stats.ViewData.AggregationWindowData; -import io.opencensus.stats.ViewData.AggregationWindowData.CumulativeData; -import io.opencensus.stats.ViewData.AggregationWindowData.IntervalData; import io.opencensus.tags.TagKey; import io.opencensus.tags.TagValue; import java.lang.management.ManagementFactory; @@ -70,6 +65,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; */ /** Util methods to convert OpenCensus Stats data models to StackDriver monitoring data models. */ +@SuppressWarnings("deprecation") final class StackdriverExportUtils { // TODO(songya): do we want these constants to be customizable? @VisibleForTesting static final String LABEL_DESCRIPTION = "OpenCensus TagKey"; @@ -101,7 +97,7 @@ final class StackdriverExportUtils { // Construct a MetricDescriptor using a View. @javax.annotation.Nullable static MetricDescriptor createMetricDescriptor(View view, String projectId) { - if (!(view.getWindow() instanceof Cumulative)) { + if (!(view.getWindow() instanceof View.AggregationWindow.Cumulative)) { // TODO(songya): Only Cumulative view will be exported to Stackdriver in this version. return null; } @@ -147,7 +143,7 @@ final class StackdriverExportUtils { // Construct a MetricKind from an AggregationWindow @VisibleForTesting - static MetricKind createMetricKind(AggregationWindow window) { + static MetricKind createMetricKind(View.AggregationWindow window) { return window.match( Functions.returnConstant(MetricKind.CUMULATIVE), // Cumulative // TODO(songya): We don't support exporting Interval stats to StackDriver in this version. @@ -179,7 +175,7 @@ final class StackdriverExportUtils { return timeSeriesList; } View view = viewData.getView(); - if (!(view.getWindow() instanceof Cumulative)) { + if (!(view.getWindow() instanceof View.AggregationWindow.Cumulative)) { // TODO(songya): Only Cumulative view will be exported to Stackdriver in this version. return timeSeriesList; } @@ -229,7 +225,9 @@ final class StackdriverExportUtils { // Create Point from AggregationData, AggregationWindowData and Aggregation. @VisibleForTesting static Point createPoint( - AggregationData aggregationData, AggregationWindowData windowData, Aggregation aggregation) { + AggregationData aggregationData, + ViewData.AggregationWindowData windowData, + Aggregation aggregation) { Point.Builder builder = Point.newBuilder(); builder.setInterval(createTimeInterval(windowData)); builder.setValue(createTypedValue(aggregation, aggregationData)); @@ -238,24 +236,18 @@ final class StackdriverExportUtils { // Convert AggregationWindowData to TimeInterval, currently only support CumulativeData. @VisibleForTesting - static TimeInterval createTimeInterval(AggregationWindowData windowData) { + static TimeInterval createTimeInterval(ViewData.AggregationWindowData windowData) { final TimeInterval.Builder builder = TimeInterval.newBuilder(); windowData.match( - new Function<CumulativeData, Void>() { + new Function<ViewData.AggregationWindowData.CumulativeData, Void>() { @Override - public Void apply(CumulativeData arg) { + public Void apply(ViewData.AggregationWindowData.CumulativeData arg) { builder.setStartTime(convertTimestamp(arg.getStart())); builder.setEndTime(convertTimestamp(arg.getEnd())); return null; } }, - new Function<IntervalData, Void>() { - @Override - public Void apply(IntervalData arg) { - // TODO(songya): we don't export IntervalData in this version. - throw new IllegalArgumentException("IntervalData not supported"); - } - }, + Functions.</*@Nullable*/ Void>throwIllegalArgumentException(), Functions.</*@Nullable*/ Void>throwIllegalArgumentException()); return builder.build(); } 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 64173713..34341bad 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 @@ -30,7 +30,6 @@ import io.opencensus.stats.Measurement.MeasurementDouble; import io.opencensus.stats.Measurement.MeasurementLong; import io.opencensus.stats.StatsCollectionState; import io.opencensus.stats.View; -import io.opencensus.stats.View.AggregationWindow; import io.opencensus.stats.ViewData; import io.opencensus.tags.TagContext; import java.util.Collection; @@ -47,6 +46,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; */ /** A class that stores a singleton map from {@code MeasureName}s to {@link MutableViewData}s. */ +@SuppressWarnings("deprecation") final class MeasureToViewMap { /* @@ -89,7 +89,7 @@ final class MeasureToViewMap { private static Set<View> filterExportedViews(Collection<View> allViews) { Set<View> views = Sets.newHashSet(); for (View view : allViews) { - if (view.getWindow() instanceof AggregationWindow.Cumulative) { + if (view.getWindow() instanceof View.AggregationWindow.Cumulative) { views.add(view); } } diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java index 8ecb7dca..b82136d3 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java +++ b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java @@ -46,11 +46,7 @@ import io.opencensus.stats.AggregationData.SumDataLong; import io.opencensus.stats.Measure; import io.opencensus.stats.StatsCollectionState; import io.opencensus.stats.View; -import io.opencensus.stats.View.AggregationWindow.Cumulative; -import io.opencensus.stats.View.AggregationWindow.Interval; import io.opencensus.stats.ViewData; -import io.opencensus.stats.ViewData.AggregationWindowData.CumulativeData; -import io.opencensus.stats.ViewData.AggregationWindowData.IntervalData; import io.opencensus.tags.InternalUtils; import io.opencensus.tags.Tag; import io.opencensus.tags.TagContext; @@ -69,6 +65,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; */ /** A mutable version of {@link ViewData}, used for recording stats and start/end time. */ +@SuppressWarnings("deprecation") abstract class MutableViewData { private static final long MILLIS_PER_SECOND = 1000L; @@ -230,13 +227,13 @@ abstract class MutableViewData { return ViewData.create( super.view, createAggregationMap(tagValueAggregationMap, super.view.getMeasure()), - CumulativeData.create(start, now)); + ViewData.AggregationWindowData.CumulativeData.create(start, now)); } else { // If Stats state is DISABLED, return an empty ViewData. return ViewData.create( super.view, Collections.<List<TagValue>, AggregationData>emptyMap(), - CumulativeData.create(ZERO_TIMESTAMP, ZERO_TIMESTAMP)); + ViewData.AggregationWindowData.CumulativeData.create(ZERO_TIMESTAMP, ZERO_TIMESTAMP)); } } @@ -298,7 +295,7 @@ abstract class MutableViewData { private IntervalMutableViewData(View view, Timestamp start) { super(view); - Duration totalDuration = ((Interval) view.getWindow()).getDuration(); + Duration totalDuration = ((View.AggregationWindow.Interval) view.getWindow()).getDuration(); this.totalDuration = totalDuration; this.bucketDuration = Duration.fromMillis(toMillis(totalDuration) / N); @@ -321,13 +318,15 @@ abstract class MutableViewData { refreshBucketList(now); if (state == StatsCollectionState.ENABLED) { return ViewData.create( - super.view, combineBucketsAndGetAggregationMap(now), IntervalData.create(now)); + super.view, + combineBucketsAndGetAggregationMap(now), + ViewData.AggregationWindowData.IntervalData.create(now)); } else { // If Stats state is DISABLED, return an empty ViewData. return ViewData.create( super.view, Collections.<List<TagValue>, AggregationData>emptyMap(), - IntervalData.create(ZERO_TIMESTAMP)); + ViewData.AggregationWindowData.IntervalData.create(ZERO_TIMESTAMP)); } } @@ -576,9 +575,10 @@ abstract class MutableViewData { private static final CreateDistributionData INSTANCE = new CreateDistributionData(); } - private static final class CreateCumulative implements Function<Cumulative, MutableViewData> { + private static final class CreateCumulative + implements Function<View.AggregationWindow.Cumulative, MutableViewData> { @Override - public MutableViewData apply(Cumulative arg) { + public MutableViewData apply(View.AggregationWindow.Cumulative arg) { return new CumulativeMutableViewData(view, start); } @@ -591,9 +591,10 @@ abstract class MutableViewData { } } - private static final class CreateInterval implements Function<Interval, MutableViewData> { + private static final class CreateInterval + implements Function<View.AggregationWindow.Interval, MutableViewData> { @Override - public MutableViewData apply(Interval arg) { + public MutableViewData apply(View.AggregationWindow.Interval arg) { return new IntervalMutableViewData(view, start); } |