aboutsummaryrefslogtreecommitdiff
path: root/api/src/main/java/io/opencensus/metrics/Metric.java
diff options
context:
space:
mode:
authorYang Song <songy23@users.noreply.github.com>2018-09-14 15:45:30 -0700
committerGitHub <noreply@github.com>2018-09-14 15:45:30 -0700
commit937d2296642d9bcdae23a2be469d1d0f367ae3de (patch)
tree452b70aefb0a257f4373574a936ffa189f1e23c8 /api/src/main/java/io/opencensus/metrics/Metric.java
parent98fb8ad4e40b67b92d8688f45dbd8ac41399d8d7 (diff)
downloadopencensus-java-937d2296642d9bcdae23a2be469d1d0f367ae3de.tar.gz
Revert "Temporarily move "metrics" package into impl_core/ for release. (#1426)" (#1432)
This reverts commit d3fa0e5c60903f95c184d7c7bafae8fdd12156ad.
Diffstat (limited to 'api/src/main/java/io/opencensus/metrics/Metric.java')
-rw-r--r--api/src/main/java/io/opencensus/metrics/Metric.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/api/src/main/java/io/opencensus/metrics/Metric.java b/api/src/main/java/io/opencensus/metrics/Metric.java
new file mode 100644
index 00000000..fa0018b3
--- /dev/null
+++ b/api/src/main/java/io/opencensus/metrics/Metric.java
@@ -0,0 +1,98 @@
+/*
+ * 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 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;
+
+/**
+ * A {@link Metric} with one or more {@link TimeSeries}.
+ *
+ * @since 0.16
+ */
+@ExperimentalApi
+@Immutable
+@AutoValue
+public abstract class Metric {
+
+ Metric() {}
+
+ /**
+ * Creates a {@link Metric}.
+ *
+ * @param metricDescriptor the {@link MetricDescriptor}.
+ * @param timeSeriesList the {@link TimeSeries} list for this metric.
+ * @return a {@code Metric}.
+ * @since 0.16
+ */
+ public static Metric create(MetricDescriptor metricDescriptor, List<TimeSeries> timeSeriesList) {
+ checkTypeMatch(metricDescriptor.getType(), timeSeriesList);
+ return new AutoValue_Metric(metricDescriptor, timeSeriesList);
+ }
+
+ /**
+ * Returns the {@link MetricDescriptor} of this metric.
+ *
+ * @return the {@code MetricDescriptor} of this metric.
+ * @since 0.16
+ */
+ public abstract MetricDescriptor getMetricDescriptor();
+
+ /**
+ * Returns the {@link TimeSeries} list for this metric.
+ *
+ * <p>The type of the {@link TimeSeries#getPoints()} must match {@link MetricDescriptor.Type}.
+ *
+ * @return the {@code TimeSeriesList} for this metric.
+ * @since 0.16
+ */
+ public abstract List<TimeSeries> getTimeSeriesList();
+
+ private static void checkTypeMatch(MetricDescriptor.Type type, List<TimeSeries> 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, "Type mismatch: %s, %s.", type, valueClassName);
+ break;
+ case CUMULATIVE_DOUBLE:
+ case GAUGE_DOUBLE:
+ Utils.checkArgument(
+ value instanceof ValueDouble, "Type mismatch: %s, %s.", type, valueClassName);
+ break;
+ case CUMULATIVE_DISTRIBUTION:
+ Utils.checkArgument(
+ value instanceof ValueDistribution, "Type mismatch: %s, %s.", type, valueClassName);
+ }
+ }
+ }
+ }
+}