From 8d75c101ab0ae0efd5faea9906ce399f00fb4394 Mon Sep 17 00:00:00 2001 From: Yang Song Date: Tue, 21 Aug 2018 13:14:31 -0700 Subject: Metrics: Combine TimeSeriesCumulative and TimeSeriesGauge. (#1380) --- .../main/java/io/opencensus/metrics/Metric.java | 61 ++++++---- .../java/io/opencensus/metrics/TimeSeries.java | 50 +++++++- .../opencensus/metrics/TimeSeriesCumulative.java | 70 ----------- .../io/opencensus/metrics/TimeSeriesGauge.java | 57 --------- .../java/io/opencensus/metrics/TimeSeriesList.java | 134 --------------------- 5 files changed, 85 insertions(+), 287 deletions(-) delete mode 100644 api/src/main/java/io/opencensus/metrics/TimeSeriesCumulative.java delete mode 100644 api/src/main/java/io/opencensus/metrics/TimeSeriesGauge.java delete mode 100644 api/src/main/java/io/opencensus/metrics/TimeSeriesList.java (limited to 'api/src/main/java') diff --git a/api/src/main/java/io/opencensus/metrics/Metric.java b/api/src/main/java/io/opencensus/metrics/Metric.java index e8be0b90..9cbd418b 100644 --- a/api/src/main/java/io/opencensus/metrics/Metric.java +++ b/api/src/main/java/io/opencensus/metrics/Metric.java @@ -19,8 +19,10 @@ package io.opencensus.metrics; import com.google.auto.value.AutoValue; import io.opencensus.common.ExperimentalApi; import io.opencensus.internal.Utils; -import io.opencensus.metrics.TimeSeriesList.TimeSeriesCumulativeList; -import io.opencensus.metrics.TimeSeriesList.TimeSeriesGaugeList; +import io.opencensus.metrics.Value.ValueDistribution; +import io.opencensus.metrics.Value.ValueDouble; +import io.opencensus.metrics.Value.ValueLong; +import java.util.List; import javax.annotation.concurrent.Immutable; /** @@ -39,11 +41,11 @@ public abstract class Metric { * Creates a {@link Metric}. * * @param metricDescriptor the {@link MetricDescriptor}. - * @param timeSeriesList the {@link TimeSeriesList} for this metric. + * @param timeSeriesList the {@link TimeSeries} list for this metric. * @return a {@code Metric}. * @since 0.16 */ - public static Metric create(MetricDescriptor metricDescriptor, TimeSeriesList timeSeriesList) { + public static Metric create(MetricDescriptor metricDescriptor, List timeSeriesList) { checkTypeMatch(metricDescriptor.getType(), timeSeriesList); return new AutoValue_Metric(metricDescriptor, timeSeriesList); } @@ -57,32 +59,43 @@ public abstract class Metric { public abstract MetricDescriptor getMetricDescriptor(); /** - * Returns the {@link TimeSeriesList} for this metric. + * Returns the {@link TimeSeries} list for this metric. * - *

The type of the {@link TimeSeriesList} must match {@link MetricDescriptor.Type}. + *

The type of the {@link TimeSeries#getPoints()} must match {@link MetricDescriptor.Type}. * * @return the {@code TimeSeriesList} for this metric. * @since 0.16 */ - public abstract TimeSeriesList getTimeSeriesList(); + public abstract List getTimeSeriesList(); - private static void checkTypeMatch(MetricDescriptor.Type type, TimeSeriesList timeSeriesList) { - switch (type) { - case GAUGE_INT64: - case GAUGE_DOUBLE: - Utils.checkArgument( - timeSeriesList instanceof TimeSeriesGaugeList, - String.format( - "Type mismatch: %s, %s.", type, timeSeriesList.getClass().getSimpleName())); - break; - case CUMULATIVE_DISTRIBUTION: - case CUMULATIVE_DOUBLE: - case CUMULATIVE_INT64: - Utils.checkArgument( - timeSeriesList instanceof TimeSeriesCumulativeList, - String.format( - "Type mismatch: %s, %s.", type, timeSeriesList.getClass().getSimpleName())); - break; + private static void checkTypeMatch(MetricDescriptor.Type type, List timeSeriesList) { + for (TimeSeries timeSeries : timeSeriesList) { + for (Point point : timeSeries.getPoints()) { + Value value = point.getValue(); + String valueClassName = ""; + if (value.getClass().getSuperclass() != null) { // work around nullness check + // AutoValue classes should always have a super class. + valueClassName = value.getClass().getSuperclass().getSimpleName(); + } + switch (type) { + case GAUGE_INT64: + case CUMULATIVE_INT64: + Utils.checkArgument( + value instanceof ValueLong, + String.format("Type mismatch: %s, %s.", type, valueClassName)); + break; + case CUMULATIVE_DOUBLE: + case GAUGE_DOUBLE: + Utils.checkArgument( + value instanceof ValueDouble, + String.format("Type mismatch: %s, %s.", type, valueClassName)); + break; + case CUMULATIVE_DISTRIBUTION: + Utils.checkArgument( + value instanceof ValueDistribution, + String.format("Type mismatch: %s, %s.", type, valueClassName)); + } + } } } } diff --git a/api/src/main/java/io/opencensus/metrics/TimeSeries.java b/api/src/main/java/io/opencensus/metrics/TimeSeries.java index bbbfe0e4..c62b6b72 100644 --- a/api/src/main/java/io/opencensus/metrics/TimeSeries.java +++ b/api/src/main/java/io/opencensus/metrics/TimeSeries.java @@ -16,15 +16,51 @@ package io.opencensus.metrics; +import com.google.auto.value.AutoValue; +import io.opencensus.common.ExperimentalApi; +import io.opencensus.common.Timestamp; +import io.opencensus.internal.Utils; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; -/** A collection of data points that describes the time-varying values of a {@code Metric}. */ +/** + * A collection of data points that describes the time-varying values of a {@code Metric}. + * + * @since 0.16 + */ +@ExperimentalApi @Immutable -abstract class TimeSeries { +@AutoValue +public abstract class TimeSeries { TimeSeries() {} + /** + * Creates a {@link TimeSeries}. + * + * @param labelValues the {@code LabelValue}s that uniquely identify this {@code TimeSeries}. + * @param points the data {@code Point}s of this {@code TimeSeries}. + * @param startTimestamp the start {@code Timestamp} of this {@code TimeSeries}. Must be non-null + * for cumulative {@code Point}s. + * @return a {@code TimeSeries}. + * @since 0.16 + */ + public static TimeSeries create( + List labelValues, List points, @Nullable Timestamp startTimestamp) { + // Fail fast on null lists to prevent NullPointerException when copying the lists. + Utils.checkNotNull(labelValues, "labelValues"); + Utils.checkNotNull(points, "points"); + Utils.checkListElementNotNull(labelValues, "labelValue"); + Utils.checkListElementNotNull(points, "point"); + return new AutoValue_TimeSeries( + Collections.unmodifiableList(new ArrayList(labelValues)), + Collections.unmodifiableList(new ArrayList(points)), + startTimestamp); + } + /** * Returns the set of {@link LabelValue}s that uniquely identify this {@link TimeSeries}. * @@ -45,4 +81,14 @@ abstract class TimeSeries { * @since 0.16 */ public abstract List getPoints(); + + /** + * Returns the start {@link Timestamp} of this {@link TimeSeries} if the {@link Point}s are + * cumulative, or {@code null} if the {@link Point}s are gauge. + * + * @return the start {@code Timestamp} or {@code null}. + * @since 0.16 + */ + @Nullable + public abstract Timestamp getStartTimestamp(); } diff --git a/api/src/main/java/io/opencensus/metrics/TimeSeriesCumulative.java b/api/src/main/java/io/opencensus/metrics/TimeSeriesCumulative.java deleted file mode 100644 index 5f48b770..00000000 --- a/api/src/main/java/io/opencensus/metrics/TimeSeriesCumulative.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2018, OpenCensus Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.opencensus.metrics; - -import com.google.auto.value.AutoValue; -import io.opencensus.common.ExperimentalApi; -import io.opencensus.common.Timestamp; -import io.opencensus.internal.Utils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.annotation.concurrent.Immutable; - -/** - * A collection of data points that describes the time-varying values of a cumulative {@code - * Metric}. - * - * @since 0.16 - */ -@ExperimentalApi -@Immutable -@AutoValue -public abstract class TimeSeriesCumulative extends TimeSeries { - - TimeSeriesCumulative() {} - - /** - * Creates a {@link TimeSeriesCumulative}. - * - * @param labelValues the {@code LabelValue}s that uniquely identify this {@code TimeSeries}. - * @param points the data {@code Point}s of this {@code TimeSeries}. - * @param startTimestamp the start {@code Timestamp} of this {@code TimeSeriesCumulative}. - * @return a {@code TimeSeriesCumulative}. - * @since 0.16 - */ - public static TimeSeriesCumulative create( - List labelValues, List points, Timestamp startTimestamp) { - // Fail fast on null lists to prevent NullPointerException when copying the lists. - Utils.checkNotNull(labelValues, "labelValues"); - Utils.checkNotNull(points, "points"); - Utils.checkListElementNotNull(labelValues, "labelValue"); - Utils.checkListElementNotNull(points, "point"); - return new AutoValue_TimeSeriesCumulative( - Collections.unmodifiableList(new ArrayList(labelValues)), - Collections.unmodifiableList(new ArrayList(points)), - startTimestamp); - } - - /** - * Returns the start {@link Timestamp} of this {@link TimeSeriesCumulative}. - * - * @return the start {@code Timestamp}. - * @since 0.16 - */ - public abstract Timestamp getStartTimestamp(); -} diff --git a/api/src/main/java/io/opencensus/metrics/TimeSeriesGauge.java b/api/src/main/java/io/opencensus/metrics/TimeSeriesGauge.java deleted file mode 100644 index 717505a4..00000000 --- a/api/src/main/java/io/opencensus/metrics/TimeSeriesGauge.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2018, OpenCensus Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.opencensus.metrics; - -import com.google.auto.value.AutoValue; -import io.opencensus.common.ExperimentalApi; -import io.opencensus.internal.Utils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.annotation.concurrent.Immutable; - -/** - * A collection of data points that describes the time-varying values of a gauge {@code Metric}. - * - * @since 0.16 - */ -@ExperimentalApi -@Immutable -@AutoValue -public abstract class TimeSeriesGauge extends TimeSeries { - - TimeSeriesGauge() {} - - /** - * Creates a {@link TimeSeriesGauge}. - * - * @param labelValues the {@code LabelValue}s that uniquely identify this {@code TimeSeries}. - * @param points the data {@code Point}s of this {@code TimeSeries}. - * @return a {@code TimeSeriesGauge}. - * @since 0.16 - */ - public static TimeSeriesGauge create(List labelValues, List points) { - // Fail fast on null lists to prevent NullPointerException when copying the lists. - Utils.checkNotNull(labelValues, "labelValues"); - Utils.checkNotNull(points, "points"); - Utils.checkListElementNotNull(labelValues, "labelValue"); - Utils.checkListElementNotNull(points, "point"); - return new AutoValue_TimeSeriesGauge( - Collections.unmodifiableList(new ArrayList(labelValues)), - Collections.unmodifiableList(new ArrayList(points))); - } -} diff --git a/api/src/main/java/io/opencensus/metrics/TimeSeriesList.java b/api/src/main/java/io/opencensus/metrics/TimeSeriesList.java deleted file mode 100644 index 6138eac2..00000000 --- a/api/src/main/java/io/opencensus/metrics/TimeSeriesList.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2018, OpenCensus Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.opencensus.metrics; - -import com.google.auto.value.AutoValue; -import io.opencensus.common.ExperimentalApi; -import io.opencensus.common.Function; -import io.opencensus.internal.Utils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.annotation.concurrent.Immutable; - -/** - * Class that holds a list of either {@link TimeSeriesGauge} or {@link TimeSeriesCumulative}. - * - * @since 0.16 - */ -@ExperimentalApi -@Immutable -public abstract class TimeSeriesList { - - TimeSeriesList() {} - - /** - * Applies the given match function to the underlying data type. - * - * @since 0.16 - */ - public abstract T match( - Function gaugeListFunction, - Function cumulativeListFunction, - Function defaultFunction); - - /** - * Class that holds a list of {@link TimeSeriesGauge}. - * - * @since 0.16 - */ - @ExperimentalApi - @Immutable - @AutoValue - public abstract static class TimeSeriesGaugeList extends TimeSeriesList { - - TimeSeriesGaugeList() {} - - @Override - public final T match( - Function gaugeListFunction, - Function cumulativeListFunction, - Function defaultFunction) { - return gaugeListFunction.apply(this); - } - - /** - * Creates a {@link TimeSeriesGaugeList}. - * - * @param list a list of {@link TimeSeriesGauge}. - * @return a {code TimeSeriesGaugeList}. - * @since 0.16 - */ - public static TimeSeriesGaugeList create(List list) { - Utils.checkNotNull(list, "list"); - Utils.checkListElementNotNull(list, "timeSeriesGauge"); - return new AutoValue_TimeSeriesList_TimeSeriesGaugeList( - Collections.unmodifiableList(new ArrayList(list))); - } - - /** - * Returns the list of {@link TimeSeriesGauge}. - * - * @return the list of {@code TimeSeriesGauge}. - * @since 0.16 - */ - public abstract List getList(); - } - - /** - * Class that holds a list of {@link TimeSeriesCumulative}. - * - * @since 0.16 - */ - @ExperimentalApi - @Immutable - @AutoValue - public abstract static class TimeSeriesCumulativeList extends TimeSeriesList { - - TimeSeriesCumulativeList() {} - - @Override - public final T match( - Function gaugeListFunction, - Function cumulativeListFunction, - Function defaultFunction) { - return cumulativeListFunction.apply(this); - } - - /** - * Creates a {@link TimeSeriesCumulativeList}. - * - * @param list a list of {@link TimeSeriesCumulative}. - * @return a {code TimeSeriesCumulativeList}. - * @since 0.16 - */ - public static TimeSeriesCumulativeList create(List list) { - Utils.checkNotNull(list, "list"); - Utils.checkListElementNotNull(list, "timeSeriesCumulative"); - return new AutoValue_TimeSeriesList_TimeSeriesCumulativeList( - Collections.unmodifiableList(new ArrayList(list))); - } - - /** - * Returns the list of {@link TimeSeriesCumulative}. - * - * @return the list of {@code TimeSeriesCumulative}. - * @since 0.16 - */ - public abstract List getList(); - } -} -- cgit v1.2.3