bucketCounts = new ArrayList<>();
+ for (Bucket bucket : buckets) {
+ bucketCounts.add(bucket.getCount());
+ }
+ return bucketCounts;
}
- // Convert a Census Timestamp to a StackDriver Timestamp
+ // Convert a OpenCensus Timestamp to a StackDriver Timestamp
@VisibleForTesting
static Timestamp convertTimestamp(io.opencensus.common.Timestamp censusTimestamp) {
if (censusTimestamp.getSeconds() < 0) {
- // Stackdriver doesn't handle negative timestamps.
+ // StackDriver doesn't handle negative timestamps.
return Timestamp.newBuilder().build();
}
return Timestamp.newBuilder()
@@ -451,7 +352,7 @@ static Timestamp convertTimestamp(io.opencensus.common.Timestamp censusTimestamp
.build();
}
- /* Return a self-configured Stackdriver monitored resource. */
+ /* Return a self-configured StackDriver monitored resource. */
static MonitoredResource getDefaultResource() {
MonitoredResource.Builder builder = MonitoredResource.newBuilder();
io.opencensus.contrib.monitoredresource.util.MonitoredResource autoDetectedResource =
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
index 5ffed9d5c5..e493803cef 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
@@ -29,17 +29,19 @@
import com.google.monitoring.v3.TimeSeries;
import io.opencensus.common.Duration;
import io.opencensus.common.Scope;
-import io.opencensus.stats.View;
-import io.opencensus.stats.ViewData;
-import io.opencensus.stats.ViewManager;
+import io.opencensus.metrics.export.Metric;
+import io.opencensus.metrics.export.MetricProducer;
+import io.opencensus.metrics.export.MetricProducerManager;
import io.opencensus.trace.Sampler;
import io.opencensus.trace.Span;
import io.opencensus.trace.Status;
import io.opencensus.trace.Tracer;
import io.opencensus.trace.Tracing;
import io.opencensus.trace.samplers.Samplers;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
@@ -51,7 +53,7 @@
*/
/**
- * Worker {@code Runnable} that polls ViewData from Stats library and batch export to StackDriver.
+ * Worker {@code Runnable} that polls Metric from Metrics library and batch export to StackDriver.
*
* {@code StackdriverExporterWorker} will be started in a daemon {@code Thread}.
*
@@ -76,11 +78,12 @@ final class StackdriverExporterWorker implements Runnable {
private final String projectId;
private final ProjectName projectName;
private final MetricServiceClient metricServiceClient;
- private final ViewManager viewManager;
+ private final MetricProducerManager metricProducerManager;
private final MonitoredResource monitoredResource;
private final String domain;
private final String displayNamePrefix;
- private final Map registeredViews = new HashMap();
+ private final Map
+ registeredMetricDescriptors = new LinkedHashMap<>();
private static final Tracer tracer = Tracing.getTracer();
private static final Sampler probabilitySampler = Samplers.probabilitySampler(0.0001);
@@ -89,14 +92,14 @@ final class StackdriverExporterWorker implements Runnable {
String projectId,
MetricServiceClient metricServiceClient,
Duration exportInterval,
- ViewManager viewManager,
+ MetricProducerManager metricProducerManager,
MonitoredResource monitoredResource,
@javax.annotation.Nullable String metricNamePrefix) {
this.scheduleDelayMillis = exportInterval.toMillis();
this.projectId = projectId;
projectName = ProjectName.newBuilder().setProject(projectId).build();
this.metricServiceClient = metricServiceClient;
- this.viewManager = viewManager;
+ this.metricProducerManager = metricProducerManager;
this.monitoredResource = monitoredResource;
this.domain = getDomain(metricNamePrefix);
this.displayNamePrefix = getDisplayNamePrefix(metricNamePrefix);
@@ -107,42 +110,37 @@ final class StackdriverExporterWorker implements Runnable {
Collections.singletonList("ExportStatsToStackdriverMonitoring"));
}
- // Returns true if the given view is successfully registered to Stackdriver Monitoring, or the
- // exact same view has already been registered. Returns false otherwise.
+ // Returns true if the given metricDescriptor is successfully registered to Stackdriver
+ // Monitoring, or the
+ // exact same metric has already been registered. Returns false otherwise.
@VisibleForTesting
- boolean registerView(View view) {
- View existing = registeredViews.get(view.getName());
- if (existing != null) {
- if (existing.equals(view)) {
- // Ignore views that are already registered.
+ boolean registerMetricDescriptor(io.opencensus.metrics.export.MetricDescriptor metricDescriptor) {
+ io.opencensus.metrics.export.MetricDescriptor existingMetricDescriptor =
+ registeredMetricDescriptors.get(metricDescriptor.getName());
+ if (existingMetricDescriptor != null) {
+ if (existingMetricDescriptor.equals(metricDescriptor)) {
+ // Ignore metricDescriptor that are already registered.
return true;
} else {
- // If we upload a view that has the same name with a registered view but with different
- // attributes, Stackdriver client will throw an exception.
logger.log(
Level.WARNING,
- "A different view with the same name is already registered: " + existing);
+ "A different metric with the same name is already registered: "
+ + existingMetricDescriptor);
return false;
}
}
- registeredViews.put(view.getName(), view);
+ registeredMetricDescriptors.put(metricDescriptor.getName(), metricDescriptor);
Span span = tracer.getCurrentSpan();
span.addAnnotation("Create Stackdriver Metric.");
- // TODO(songya): don't need to create MetricDescriptor for RpcViewConstants once we defined
- // canonical metrics. Registration is required only for custom view definitions. Canonical
- // views should be pre-registered.
- MetricDescriptor metricDescriptor =
- StackdriverExportUtils.createMetricDescriptor(view, projectId, domain, displayNamePrefix);
- if (metricDescriptor == null) {
- // Don't register interval views in this version.
- return false;
- }
+ MetricDescriptor stackDriverMetricDescriptor =
+ StackdriverExportUtils.createMetricDescriptor(
+ metricDescriptor, projectId, domain, displayNamePrefix);
CreateMetricDescriptorRequest request =
CreateMetricDescriptorRequest.newBuilder()
.setName(projectName.toString())
- .setMetricDescriptor(metricDescriptor)
+ .setMetricDescriptor(stackDriverMetricDescriptor)
.build();
try {
metricServiceClient.createMetricDescriptor(request);
@@ -165,23 +163,27 @@ boolean registerView(View view) {
}
}
- // Polls ViewData from Stats library for all exported views, and upload them as TimeSeries to
- // StackDriver.
+ // Polls MetricProducerManager from Metrics library for all registered MetricDescriptors, and
+ // upload them as TimeSeries to StackDriver.
@VisibleForTesting
void export() {
- List*@Nullable*/ ViewData> viewDataList = Lists.newArrayList();
- for (View view : viewManager.getAllExportedViews()) {
- if (registerView(view)) {
- // Only upload stats for valid views.
- viewDataList.add(viewManager.getView(view.getName()));
+ ArrayList metricsList = Lists.newArrayList();
+ for (MetricProducer metricProducer : metricProducerManager.getAllMetricProducer()) {
+ Collection producerMetricsList = metricProducer.getMetrics();
+ metricsList.ensureCapacity(metricsList.size() + producerMetricsList.size());
+ for (Metric metric : producerMetricsList) {
+ if (registerMetricDescriptor(metric.getMetricDescriptor())) {
+ metricsList.add(metric);
+ }
}
}
List timeSeriesList = Lists.newArrayList();
- for (/*@Nullable*/ ViewData viewData : viewDataList) {
+ for (Metric metric : metricsList) {
timeSeriesList.addAll(
- StackdriverExportUtils.createTimeSeriesList(viewData, monitoredResource, domain));
+ StackdriverExportUtils.createTimeSeriesList(metric, monitoredResource, domain));
}
+
for (List batchedTimeSeries :
Lists.partition(timeSeriesList, MAX_BATCH_EXPORT_SIZE)) {
Span span = tracer.getCurrentSpan();
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java
index 51c54916fa..7ad78f7bd9 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java
@@ -30,8 +30,8 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.util.concurrent.MoreExecutors;
import io.opencensus.common.Duration;
-import io.opencensus.stats.Stats;
-import io.opencensus.stats.ViewManager;
+import io.opencensus.metrics.Metrics;
+import io.opencensus.metrics.export.MetricProducerManager;
import java.io.IOException;
import java.util.concurrent.ThreadFactory;
import javax.annotation.Nullable;
@@ -78,7 +78,7 @@ public final class StackdriverStatsExporter {
String projectId,
MetricServiceClient metricServiceClient,
Duration exportInterval,
- ViewManager viewManager,
+ MetricProducerManager metricProducerManager,
MonitoredResource monitoredResource,
@Nullable String metricNamePrefix) {
checkArgument(exportInterval.compareTo(ZERO) > 0, "Duration must be positive");
@@ -87,7 +87,7 @@ public final class StackdriverStatsExporter {
projectId,
metricServiceClient,
exportInterval,
- viewManager,
+ metricProducerManager,
monitoredResource,
metricNamePrefix);
this.workerThread = new DaemonThreadFactory().newThread(worker);
@@ -325,7 +325,7 @@ private static void createInternal(
projectId,
metricServiceClient,
exportInterval,
- Stats.getViewManager(),
+ Metrics.getExportComponent().getMetricProducerManager(),
monitoredResource,
metricNamePrefix);
exporter.workerThread.start();
diff --git a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java
index cd536e8f09..8b8cd5b0aa 100644
--- a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java
+++ b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java
@@ -28,224 +28,174 @@
import com.google.api.MetricDescriptor;
import com.google.api.MetricDescriptor.MetricKind;
import com.google.api.MonitoredResource;
-import com.google.common.collect.ImmutableMap;
-import com.google.monitoring.v3.Point;
import com.google.monitoring.v3.TimeInterval;
import com.google.monitoring.v3.TimeSeries;
import com.google.monitoring.v3.TypedValue;
-import io.opencensus.common.Duration;
import io.opencensus.common.Timestamp;
-import io.opencensus.stats.Aggregation.Count;
-import io.opencensus.stats.Aggregation.Distribution;
-import io.opencensus.stats.Aggregation.LastValue;
-import io.opencensus.stats.Aggregation.Mean;
-import io.opencensus.stats.Aggregation.Sum;
-import io.opencensus.stats.AggregationData.CountData;
-import io.opencensus.stats.AggregationData.DistributionData;
-import io.opencensus.stats.AggregationData.LastValueDataDouble;
-import io.opencensus.stats.AggregationData.LastValueDataLong;
-import io.opencensus.stats.AggregationData.MeanData;
-import io.opencensus.stats.AggregationData.SumDataDouble;
-import io.opencensus.stats.AggregationData.SumDataLong;
-import io.opencensus.stats.BucketBoundaries;
-import io.opencensus.stats.Measure.MeasureDouble;
-import io.opencensus.stats.Measure.MeasureLong;
-import io.opencensus.stats.View;
-import io.opencensus.stats.View.AggregationWindow.Cumulative;
-import io.opencensus.stats.View.AggregationWindow.Interval;
-import io.opencensus.stats.View.Name;
-import io.opencensus.stats.ViewData;
-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 io.opencensus.metrics.LabelKey;
+import io.opencensus.metrics.LabelValue;
+import io.opencensus.metrics.export.Distribution.Bucket;
+import io.opencensus.metrics.export.MetricDescriptor.Type;
+import io.opencensus.metrics.export.Point;
+import io.opencensus.metrics.export.Summary;
+import io.opencensus.metrics.export.Summary.Snapshot;
+import io.opencensus.metrics.export.Summary.Snapshot.ValueAtPercentile;
+import io.opencensus.metrics.export.Value;
import java.lang.management.ManagementFactory;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Unit tests for {@link StackdriverExportUtils}. */
@RunWith(JUnit4.class)
public class StackdriverExportUtilsTest {
+ private static final String METRIC_NAME = "my measurement";
+ private static final String METRIC_DESCRIPTION = "measure description";
+ private static final String METRIC_UNIT = "us";
+ private static final String METRIC_UNIT_2 = "1";
+ private static final List LABEL_KEY =
+ Collections.singletonList(LabelKey.create("KEY1", "key description"));
+ private static final List LABEL_VALUE =
+ Collections.singletonList(LabelValue.create("VALUE1"));
+ private static final List LABEL_VALUE_2 =
+ Collections.singletonList(LabelValue.create("VALUE2"));
+ private static final List EMPTY_LABEL_KEY = new ArrayList<>();
+ private static final List EMPTY_LABEL_VALUE = new ArrayList<>();
+ private static final io.opencensus.metrics.export.MetricDescriptor METRIC_DESCRIPTOR =
+ io.opencensus.metrics.export.MetricDescriptor.create(
+ METRIC_NAME, METRIC_DESCRIPTION, METRIC_UNIT, Type.CUMULATIVE_DOUBLE, LABEL_KEY);
+ private static final io.opencensus.metrics.export.MetricDescriptor METRIC_DESCRIPTOR_2 =
+ io.opencensus.metrics.export.MetricDescriptor.create(
+ METRIC_NAME, METRIC_DESCRIPTION, METRIC_UNIT_2, Type.CUMULATIVE_INT64, EMPTY_LABEL_KEY);
+ private static final io.opencensus.metrics.export.MetricDescriptor GAUGE_METRIC_DESCRIPTOR =
+ io.opencensus.metrics.export.MetricDescriptor.create(
+ METRIC_NAME, METRIC_DESCRIPTION, METRIC_UNIT, Type.GAUGE_DOUBLE, LABEL_KEY);
- @Rule public final ExpectedException thrown = ExpectedException.none();
+ private static final List BUCKET_BOUNDARIES = Arrays.asList(1.0, 3.0, 5.0);
+ private static final io.opencensus.metrics.export.Distribution.BucketOptions BUCKET_OPTIONS =
+ io.opencensus.metrics.export.Distribution.BucketOptions.explicitOptions(BUCKET_BOUNDARIES);
+ private static final Value VALUE_DOUBLE = Value.doubleValue(12345678.2);
+ private static final Value VALUE_DOUBLE_2 = Value.doubleValue(133.79);
- private static final TagKey KEY = TagKey.create("KEY");
- private static final TagKey KEY_2 = TagKey.create("KEY2");
- private static final TagKey KEY_3 = TagKey.create("KEY3");
- private static final TagValue VALUE_1 = TagValue.create("VALUE1");
- private static final TagValue VALUE_2 = TagValue.create("VALUE2");
- private static final String MEASURE_UNIT = "us";
- private static final String MEASURE_DESCRIPTION = "measure description";
- private static final MeasureDouble MEASURE_DOUBLE =
- MeasureDouble.create("measure1", MEASURE_DESCRIPTION, MEASURE_UNIT);
- private static final MeasureLong MEASURE_LONG =
- MeasureLong.create("measure2", MEASURE_DESCRIPTION, MEASURE_UNIT);
- private static final String VIEW_NAME = "view";
- private static final String VIEW_DESCRIPTION = "view description";
- private static final Duration TEN_SECONDS = Duration.create(10, 0);
- private static final Cumulative CUMULATIVE = Cumulative.create();
- private static final Interval INTERVAL = Interval.create(TEN_SECONDS);
- private static final BucketBoundaries BUCKET_BOUNDARIES =
- BucketBoundaries.create(Arrays.asList(0.0, 1.0, 3.0, 5.0));
- private static final Sum SUM = Sum.create();
- private static final Count COUNT = Count.create();
- private static final Mean MEAN = Mean.create();
- private static final Distribution DISTRIBUTION = Distribution.create(BUCKET_BOUNDARIES);
- private static final LastValue LAST_VALUE = LastValue.create();
+ private static final Timestamp TIMESTAMP = Timestamp.fromMillis(3000);
+ private static final Timestamp TIMESTAMP_2 = Timestamp.fromMillis(1000);
+ private static final Timestamp TIMESTAMP_3 = Timestamp.fromMillis(2000);
+ private static final Point POINT = Point.create(VALUE_DOUBLE, TIMESTAMP);
+ private static final Point POINT_2 = Point.create(VALUE_DOUBLE_2, TIMESTAMP_3);
+ private static final io.opencensus.metrics.export.TimeSeries CUMULATIVE_TIME_SERIES =
+ io.opencensus.metrics.export.TimeSeries.createWithOnePoint(LABEL_VALUE, POINT, TIMESTAMP_2);
+ private static final io.opencensus.metrics.export.TimeSeries GAUGE_TIME_SERIES =
+ io.opencensus.metrics.export.TimeSeries.createWithOnePoint(LABEL_VALUE, POINT, null);
+ private static final io.opencensus.metrics.export.TimeSeries GAUGE_TIME_SERIES_2 =
+ io.opencensus.metrics.export.TimeSeries.createWithOnePoint(LABEL_VALUE_2, POINT_2, null);
+ private static final io.opencensus.metrics.export.Metric METRIC =
+ io.opencensus.metrics.export.Metric.createWithOneTimeSeries(
+ METRIC_DESCRIPTOR, CUMULATIVE_TIME_SERIES);
private static final String PROJECT_ID = "id";
private static final MonitoredResource DEFAULT_RESOURCE =
MonitoredResource.newBuilder().setType("global").build();
private static final String DEFAULT_TASK_VALUE =
"java-" + ManagementFactory.getRuntimeMXBean().getName();
- @Test
- public void testConstant() {
- assertThat(StackdriverExportUtils.LABEL_DESCRIPTION).isEqualTo("OpenCensus TagKey");
- }
+ private static final io.opencensus.metrics.export.Distribution DISTRIBUTION =
+ io.opencensus.metrics.export.Distribution.create(
+ 3,
+ 2,
+ 14,
+ BUCKET_OPTIONS,
+ Arrays.asList(Bucket.create(3), Bucket.create(1), Bucket.create(2), Bucket.create(4)));
+ private static final Summary SUMMARY =
+ Summary.create(
+ 10L,
+ 10.0,
+ Snapshot.create(
+ 10L, 87.07, Collections.singletonList(ValueAtPercentile.create(0.98, 10.2))));
+ private static final Value DOUBLE_VALUE = Value.doubleValue(1.1);
+ private static final Value LONG_VALUE = Value.longValue(10000);
+ private static final Value DISTRIBUTION_VALUE = Value.distributionValue(DISTRIBUTION);
+ private static final Value SUMMARY_VALUE = Value.summaryValue(SUMMARY);
@Test
public void createLabelDescriptor() {
- assertThat(StackdriverExportUtils.createLabelDescriptor(TagKey.create("string")))
+ assertThat(StackdriverExportUtils.createLabelDescriptor(LabelKey.create("key", "desc")))
.isEqualTo(
LabelDescriptor.newBuilder()
- .setKey("string")
- .setDescription(StackdriverExportUtils.LABEL_DESCRIPTION)
+ .setKey("key")
+ .setDescription("desc")
.setValueType(ValueType.STRING)
.build());
}
@Test
public void createMetricKind() {
- assertThat(StackdriverExportUtils.createMetricKind(CUMULATIVE, SUM))
+ assertThat(StackdriverExportUtils.createMetricKind(Type.CUMULATIVE_INT64))
.isEqualTo(MetricKind.CUMULATIVE);
- assertThat(StackdriverExportUtils.createMetricKind(INTERVAL, COUNT))
+ assertThat(StackdriverExportUtils.createMetricKind(Type.SUMMARY))
.isEqualTo(MetricKind.UNRECOGNIZED);
- assertThat(StackdriverExportUtils.createMetricKind(CUMULATIVE, LAST_VALUE))
+ assertThat(StackdriverExportUtils.createMetricKind(Type.GAUGE_INT64))
.isEqualTo(MetricKind.GAUGE);
- assertThat(StackdriverExportUtils.createMetricKind(INTERVAL, LAST_VALUE))
+ assertThat(StackdriverExportUtils.createMetricKind(Type.GAUGE_DOUBLE))
.isEqualTo(MetricKind.GAUGE);
}
@Test
public void createValueType() {
- assertThat(StackdriverExportUtils.createValueType(SUM, MEASURE_DOUBLE))
+ assertThat(StackdriverExportUtils.createValueType(Type.GAUGE_DOUBLE))
.isEqualTo(MetricDescriptor.ValueType.DOUBLE);
- assertThat(StackdriverExportUtils.createValueType(SUM, MEASURE_LONG))
+ assertThat(StackdriverExportUtils.createValueType(Type.CUMULATIVE_INT64))
.isEqualTo(MetricDescriptor.ValueType.INT64);
- assertThat(StackdriverExportUtils.createValueType(COUNT, MEASURE_DOUBLE))
+ assertThat(StackdriverExportUtils.createValueType(Type.GAUGE_INT64))
.isEqualTo(MetricDescriptor.ValueType.INT64);
- assertThat(StackdriverExportUtils.createValueType(COUNT, MEASURE_LONG))
- .isEqualTo(MetricDescriptor.ValueType.INT64);
- assertThat(StackdriverExportUtils.createValueType(MEAN, MEASURE_DOUBLE))
- .isEqualTo(MetricDescriptor.ValueType.DOUBLE);
- assertThat(StackdriverExportUtils.createValueType(MEAN, MEASURE_LONG))
+ assertThat(StackdriverExportUtils.createValueType(Type.CUMULATIVE_DOUBLE))
.isEqualTo(MetricDescriptor.ValueType.DOUBLE);
- assertThat(StackdriverExportUtils.createValueType(DISTRIBUTION, MEASURE_DOUBLE))
+ assertThat(StackdriverExportUtils.createValueType(Type.GAUGE_DISTRIBUTION))
.isEqualTo(MetricDescriptor.ValueType.DISTRIBUTION);
- assertThat(StackdriverExportUtils.createValueType(DISTRIBUTION, MEASURE_LONG))
+ assertThat(StackdriverExportUtils.createValueType(Type.CUMULATIVE_DISTRIBUTION))
.isEqualTo(MetricDescriptor.ValueType.DISTRIBUTION);
- assertThat(StackdriverExportUtils.createValueType(LAST_VALUE, MEASURE_DOUBLE))
- .isEqualTo(MetricDescriptor.ValueType.DOUBLE);
- assertThat(StackdriverExportUtils.createValueType(LAST_VALUE, MEASURE_LONG))
- .isEqualTo(MetricDescriptor.ValueType.INT64);
- }
-
- @Test
- public void createUnit() {
- assertThat(StackdriverExportUtils.createUnit(SUM, MEASURE_DOUBLE)).isEqualTo(MEASURE_UNIT);
- assertThat(StackdriverExportUtils.createUnit(COUNT, MEASURE_DOUBLE)).isEqualTo("1");
- assertThat(StackdriverExportUtils.createUnit(MEAN, MEASURE_DOUBLE)).isEqualTo(MEASURE_UNIT);
- assertThat(StackdriverExportUtils.createUnit(DISTRIBUTION, MEASURE_DOUBLE))
- .isEqualTo(MEASURE_UNIT);
- assertThat(StackdriverExportUtils.createUnit(LAST_VALUE, MEASURE_DOUBLE))
- .isEqualTo(MEASURE_UNIT);
}
@Test
public void createMetric() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY),
- CUMULATIVE);
assertThat(
StackdriverExportUtils.createMetric(
- view, Arrays.asList(VALUE_1), CUSTOM_OPENCENSUS_DOMAIN))
+ METRIC_DESCRIPTOR, LABEL_VALUE, CUSTOM_OPENCENSUS_DOMAIN))
.isEqualTo(
Metric.newBuilder()
- .setType("custom.googleapis.com/opencensus/" + VIEW_NAME)
- .putLabels("KEY", "VALUE1")
+ .setType("custom.googleapis.com/opencensus/" + METRIC_NAME)
+ .putLabels("KEY1", "VALUE1")
.putLabels(StackdriverExportUtils.OPENCENSUS_TASK, DEFAULT_TASK_VALUE)
.build());
}
@Test
public void createMetric_WithExternalMetricDomain() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY),
- CUMULATIVE);
String prometheusDomain = "external.googleapis.com/prometheus/";
- assertThat(StackdriverExportUtils.createMetric(view, Arrays.asList(VALUE_1), prometheusDomain))
+ assertThat(
+ StackdriverExportUtils.createMetric(METRIC_DESCRIPTOR, LABEL_VALUE, prometheusDomain))
.isEqualTo(
Metric.newBuilder()
- .setType(prometheusDomain + VIEW_NAME)
- .putLabels("KEY", "VALUE1")
+ .setType(prometheusDomain + METRIC_NAME)
+ .putLabels("KEY1", "VALUE1")
.putLabels(StackdriverExportUtils.OPENCENSUS_TASK, DEFAULT_TASK_VALUE)
.build());
}
@Test
- public void createMetric_skipNullTagValue() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY, KEY_2, KEY_3),
- CUMULATIVE);
+ public void createMetric_EmptyLabel() {
assertThat(
StackdriverExportUtils.createMetric(
- view, Arrays.asList(VALUE_1, null, VALUE_2), CUSTOM_OPENCENSUS_DOMAIN))
+ METRIC_DESCRIPTOR_2, EMPTY_LABEL_VALUE, CUSTOM_OPENCENSUS_DOMAIN))
.isEqualTo(
Metric.newBuilder()
- .setType("custom.googleapis.com/opencensus/" + VIEW_NAME)
- .putLabels("KEY", "VALUE1")
- .putLabels("KEY3", "VALUE2")
+ .setType("custom.googleapis.com/opencensus/" + METRIC_NAME)
.putLabels(StackdriverExportUtils.OPENCENSUS_TASK, DEFAULT_TASK_VALUE)
.build());
}
- @Test
- public void createMetric_throwWhenTagKeysAndValuesHaveDifferentSize() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY, KEY_2, KEY_3),
- CUMULATIVE);
- List tagValues = Arrays.asList(VALUE_1, null);
- thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("TagKeys and TagValues don't have same size.");
- StackdriverExportUtils.createMetric(view, tagValues, CUSTOM_OPENCENSUS_DOMAIN);
- }
-
@Test
public void convertTimestamp() {
Timestamp censusTimestamp1 = Timestamp.create(100, 3000);
@@ -260,141 +210,104 @@ public void convertTimestamp() {
.isEqualTo(com.google.protobuf.Timestamp.newBuilder().build());
}
- @Test
- public void createTimeInterval_cumulative() {
- Timestamp censusTimestamp1 = Timestamp.create(100, 3000);
- Timestamp censusTimestamp2 = Timestamp.create(200, 0);
- assertThat(
- StackdriverExportUtils.createTimeInterval(
- CumulativeData.create(censusTimestamp1, censusTimestamp2), DISTRIBUTION))
- .isEqualTo(
- TimeInterval.newBuilder()
- .setStartTime(StackdriverExportUtils.convertTimestamp(censusTimestamp1))
- .setEndTime(StackdriverExportUtils.convertTimestamp(censusTimestamp2))
- .build());
- assertThat(
- StackdriverExportUtils.createTimeInterval(
- CumulativeData.create(censusTimestamp1, censusTimestamp2), LAST_VALUE))
- .isEqualTo(
- TimeInterval.newBuilder()
- .setEndTime(StackdriverExportUtils.convertTimestamp(censusTimestamp2))
- .build());
- }
-
- @Test
- public void createTimeInterval_interval() {
- IntervalData intervalData = IntervalData.create(Timestamp.create(200, 0));
- // Only Cumulative view will supported in this version.
- thrown.expect(IllegalArgumentException.class);
- StackdriverExportUtils.createTimeInterval(intervalData, SUM);
- }
-
@Test
public void createBucketOptions() {
- assertThat(StackdriverExportUtils.createBucketOptions(BUCKET_BOUNDARIES))
+ assertThat(StackdriverExportUtils.createBucketOptions(BUCKET_OPTIONS))
.isEqualTo(
BucketOptions.newBuilder()
.setExplicitBuckets(
- Explicit.newBuilder().addAllBounds(Arrays.asList(0.0, 1.0, 3.0, 5.0)))
+ Explicit.newBuilder().addAllBounds(Arrays.asList(1.0, 3.0, 5.0)))
.build());
}
+ @Test
+ public void createBucketOptions_Null() {
+ assertThat(StackdriverExportUtils.createBucketOptions(null))
+ .isEqualTo(BucketOptions.newBuilder().build());
+ }
+
@Test
public void createDistribution() {
- DistributionData distributionData =
- DistributionData.create(2, 3, 0, 5, 14, Arrays.asList(0L, 1L, 1L, 0L, 1L));
- assertThat(StackdriverExportUtils.createDistribution(distributionData, BUCKET_BOUNDARIES))
+ assertThat(StackdriverExportUtils.createDistribution(DISTRIBUTION))
.isEqualTo(
com.google.api.Distribution.newBuilder()
- .setMean(2)
.setCount(3)
- // TODO(songya): uncomment this once Stackdriver supports setting max and min.
- // .setRange(
- // com.google.api.Distribution.Range.newBuilder().setMin(0).setMax(5).build())
- .setBucketOptions(StackdriverExportUtils.createBucketOptions(BUCKET_BOUNDARIES))
- .addAllBucketCounts(Arrays.asList(0L, 1L, 1L, 0L, 1L))
+ .setMean(0.6666666666666666)
+ .setBucketOptions(StackdriverExportUtils.createBucketOptions(BUCKET_OPTIONS))
+ .addAllBucketCounts(Arrays.asList(3L, 1L, 2L, 4L))
.setSumOfSquaredDeviation(14)
.build());
}
@Test
public void createTypedValue() {
- assertThat(StackdriverExportUtils.createTypedValue(SUM, SumDataDouble.create(1.1)))
+ assertThat(StackdriverExportUtils.createTypedValue(DOUBLE_VALUE))
.isEqualTo(TypedValue.newBuilder().setDoubleValue(1.1).build());
- assertThat(StackdriverExportUtils.createTypedValue(SUM, SumDataLong.create(10000)))
+ assertThat(StackdriverExportUtils.createTypedValue(LONG_VALUE))
.isEqualTo(TypedValue.newBuilder().setInt64Value(10000).build());
- assertThat(StackdriverExportUtils.createTypedValue(COUNT, CountData.create(55)))
- .isEqualTo(TypedValue.newBuilder().setInt64Value(55).build());
- assertThat(StackdriverExportUtils.createTypedValue(MEAN, MeanData.create(7.7, 8)))
- .isEqualTo(TypedValue.newBuilder().setDoubleValue(7.7).build());
- DistributionData distributionData =
- DistributionData.create(2, 3, 0, 5, 14, Arrays.asList(0L, 1L, 1L, 0L, 1L));
- assertThat(StackdriverExportUtils.createTypedValue(DISTRIBUTION, distributionData))
+ assertThat(StackdriverExportUtils.createTypedValue(DISTRIBUTION_VALUE))
.isEqualTo(
TypedValue.newBuilder()
- .setDistributionValue(
- StackdriverExportUtils.createDistribution(distributionData, BUCKET_BOUNDARIES))
+ .setDistributionValue(StackdriverExportUtils.createDistribution(DISTRIBUTION))
.build());
- assertThat(StackdriverExportUtils.createTypedValue(LAST_VALUE, LastValueDataDouble.create(9.9)))
- .isEqualTo(TypedValue.newBuilder().setDoubleValue(9.9).build());
- assertThat(StackdriverExportUtils.createTypedValue(LAST_VALUE, LastValueDataLong.create(90000)))
- .isEqualTo(TypedValue.newBuilder().setInt64Value(90000).build());
}
@Test
- public void createPoint_cumulative() {
- Timestamp censusTimestamp1 = Timestamp.create(100, 3000);
- Timestamp censusTimestamp2 = Timestamp.create(200, 0);
- CumulativeData cumulativeData = CumulativeData.create(censusTimestamp1, censusTimestamp2);
- SumDataDouble sumDataDouble = SumDataDouble.create(33.3);
+ public void createTypedValue_UnknownType() {
+ assertThat(StackdriverExportUtils.createTypedValue(SUMMARY_VALUE))
+ .isEqualTo(TypedValue.newBuilder().build());
+ }
- assertThat(StackdriverExportUtils.createPoint(sumDataDouble, cumulativeData, SUM))
+ @Test
+ public void createPoint() {
+ assertThat(StackdriverExportUtils.createPoint(POINT, null))
.isEqualTo(
- Point.newBuilder()
- .setInterval(StackdriverExportUtils.createTimeInterval(cumulativeData, SUM))
- .setValue(StackdriverExportUtils.createTypedValue(SUM, sumDataDouble))
+ com.google.monitoring.v3.Point.newBuilder()
+ .setInterval(
+ TimeInterval.newBuilder()
+ .setEndTime(StackdriverExportUtils.convertTimestamp(TIMESTAMP))
+ .build())
+ .setValue(StackdriverExportUtils.createTypedValue(VALUE_DOUBLE))
.build());
}
@Test
- public void createPoint_interval() {
- IntervalData intervalData = IntervalData.create(Timestamp.create(200, 0));
- SumDataDouble sumDataDouble = SumDataDouble.create(33.3);
- // Only Cumulative view will supported in this version.
- thrown.expect(IllegalArgumentException.class);
- StackdriverExportUtils.createPoint(sumDataDouble, intervalData, SUM);
+ public void createPoint_Cumulative() {
+ assertThat(StackdriverExportUtils.createPoint(POINT, TIMESTAMP_2))
+ .isEqualTo(
+ com.google.monitoring.v3.Point.newBuilder()
+ .setInterval(
+ TimeInterval.newBuilder()
+ .setStartTime(StackdriverExportUtils.convertTimestamp(TIMESTAMP_2))
+ .setEndTime(StackdriverExportUtils.convertTimestamp(TIMESTAMP))
+ .build())
+ .setValue(StackdriverExportUtils.createTypedValue(VALUE_DOUBLE))
+ .build());
}
@Test
- public void createMetricDescriptor_cumulative() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY),
- CUMULATIVE);
+ public void createMetricDescriptor() {
MetricDescriptor metricDescriptor =
StackdriverExportUtils.createMetricDescriptor(
- view, PROJECT_ID, "custom.googleapis.com/myorg/", "myorg/");
+ METRIC_DESCRIPTOR, PROJECT_ID, "custom.googleapis.com/myorg/", "myorg/");
assertThat(metricDescriptor.getName())
.isEqualTo(
"projects/"
+ PROJECT_ID
+ "/metricDescriptors/custom.googleapis.com/myorg/"
- + VIEW_NAME);
- assertThat(metricDescriptor.getDescription()).isEqualTo(VIEW_DESCRIPTION);
- assertThat(metricDescriptor.getDisplayName()).isEqualTo("myorg/" + VIEW_NAME);
- assertThat(metricDescriptor.getType()).isEqualTo("custom.googleapis.com/myorg/" + VIEW_NAME);
- assertThat(metricDescriptor.getUnit()).isEqualTo(MEASURE_UNIT);
+ + METRIC_NAME);
+ assertThat(metricDescriptor.getDescription()).isEqualTo(METRIC_DESCRIPTION);
+ assertThat(metricDescriptor.getDisplayName()).isEqualTo("myorg/" + METRIC_NAME);
+ assertThat(metricDescriptor.getType()).isEqualTo("custom.googleapis.com/myorg/" + METRIC_NAME);
+ assertThat(metricDescriptor.getUnit()).isEqualTo(METRIC_UNIT);
assertThat(metricDescriptor.getMetricKind()).isEqualTo(MetricKind.CUMULATIVE);
- assertThat(metricDescriptor.getValueType()).isEqualTo(MetricDescriptor.ValueType.DISTRIBUTION);
+
+ assertThat(metricDescriptor.getValueType()).isEqualTo(MetricDescriptor.ValueType.DOUBLE);
assertThat(metricDescriptor.getLabelsList())
.containsExactly(
LabelDescriptor.newBuilder()
- .setKey(KEY.getName())
- .setDescription(StackdriverExportUtils.LABEL_DESCRIPTION)
+ .setKey(LABEL_KEY.get(0).getKey())
+ .setDescription(LABEL_KEY.get(0).getDescription())
.setValueType(ValueType.STRING)
.build(),
LabelDescriptor.newBuilder()
@@ -405,38 +318,25 @@ public void createMetricDescriptor_cumulative() {
}
@Test
- public void createMetricDescriptor_cumulative_count() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- COUNT,
- Arrays.asList(KEY),
- CUMULATIVE);
+ public void createMetricDescriptor_cumulative() {
MetricDescriptor metricDescriptor =
StackdriverExportUtils.createMetricDescriptor(
- view, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX);
+ METRIC_DESCRIPTOR_2, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX);
assertThat(metricDescriptor.getName())
.isEqualTo(
"projects/"
+ PROJECT_ID
+ "/metricDescriptors/custom.googleapis.com/opencensus/"
- + VIEW_NAME);
- assertThat(metricDescriptor.getDescription()).isEqualTo(VIEW_DESCRIPTION);
- assertThat(metricDescriptor.getDisplayName()).isEqualTo("OpenCensus/" + VIEW_NAME);
+ + METRIC_NAME);
+ assertThat(metricDescriptor.getDescription()).isEqualTo(METRIC_DESCRIPTION);
+ assertThat(metricDescriptor.getDisplayName()).isEqualTo("OpenCensus/" + METRIC_NAME);
assertThat(metricDescriptor.getType())
- .isEqualTo("custom.googleapis.com/opencensus/" + VIEW_NAME);
+ .isEqualTo("custom.googleapis.com/opencensus/" + METRIC_NAME);
assertThat(metricDescriptor.getUnit()).isEqualTo("1");
assertThat(metricDescriptor.getMetricKind()).isEqualTo(MetricKind.CUMULATIVE);
assertThat(metricDescriptor.getValueType()).isEqualTo(MetricDescriptor.ValueType.INT64);
assertThat(metricDescriptor.getLabelsList())
.containsExactly(
- LabelDescriptor.newBuilder()
- .setKey(KEY.getName())
- .setDescription(StackdriverExportUtils.LABEL_DESCRIPTION)
- .setValueType(ValueType.STRING)
- .build(),
LabelDescriptor.newBuilder()
.setKey(StackdriverExportUtils.OPENCENSUS_TASK)
.setDescription(StackdriverExportUtils.OPENCENSUS_TASK_DESCRIPTION)
@@ -445,114 +345,63 @@ public void createMetricDescriptor_cumulative_count() {
}
@Test
- public void createMetricDescriptor_interval() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY),
- INTERVAL);
- assertThat(
- StackdriverExportUtils.createMetricDescriptor(
- view, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX))
- .isNull();
+ public void createTimeSeriesList_Cumulative() {
+ List timeSeriesList =
+ StackdriverExportUtils.createTimeSeriesList(
+ METRIC, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN);
+ assertThat(timeSeriesList).hasSize(1);
+ TimeSeries expectedTimeSeries =
+ TimeSeries.newBuilder()
+ .setMetricKind(MetricKind.CUMULATIVE)
+ .setValueType(MetricDescriptor.ValueType.DOUBLE)
+ .setMetric(
+ StackdriverExportUtils.createMetric(
+ METRIC_DESCRIPTOR, LABEL_VALUE, CUSTOM_OPENCENSUS_DOMAIN))
+ .setResource(MonitoredResource.newBuilder().setType("global"))
+ .addPoints(StackdriverExportUtils.createPoint(POINT, TIMESTAMP_2))
+ .build();
+ assertThat(timeSeriesList).containsExactly(expectedTimeSeries);
}
@Test
- public void createTimeSeriesList_cumulative() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY),
- CUMULATIVE);
- DistributionData distributionData1 =
- DistributionData.create(2, 3, 0, 5, 14, Arrays.asList(0L, 1L, 1L, 0L, 1L));
- DistributionData distributionData2 =
- DistributionData.create(-1, 1, -1, -1, 0, Arrays.asList(1L, 0L, 0L, 0L, 0L));
- Map, DistributionData> aggregationMap =
- ImmutableMap.of(
- Arrays.asList(VALUE_1), distributionData1, Arrays.asList(VALUE_2), distributionData2);
- CumulativeData cumulativeData =
- CumulativeData.create(Timestamp.fromMillis(1000), Timestamp.fromMillis(2000));
- ViewData viewData = ViewData.create(view, aggregationMap, cumulativeData);
+ public void createTimeSeriesList_Gauge() {
+ io.opencensus.metrics.export.Metric metric =
+ io.opencensus.metrics.export.Metric.create(
+ GAUGE_METRIC_DESCRIPTOR, Arrays.asList(GAUGE_TIME_SERIES, GAUGE_TIME_SERIES_2));
+
List timeSeriesList =
StackdriverExportUtils.createTimeSeriesList(
- viewData, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN);
+ metric, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN);
assertThat(timeSeriesList).hasSize(2);
TimeSeries expected1 =
TimeSeries.newBuilder()
- .setMetricKind(MetricKind.CUMULATIVE)
- .setValueType(MetricDescriptor.ValueType.DISTRIBUTION)
+ .setMetricKind(MetricKind.GAUGE)
+ .setValueType(MetricDescriptor.ValueType.DOUBLE)
.setMetric(
StackdriverExportUtils.createMetric(
- view, Arrays.asList(VALUE_1), CUSTOM_OPENCENSUS_DOMAIN))
+ GAUGE_METRIC_DESCRIPTOR, LABEL_VALUE, CUSTOM_OPENCENSUS_DOMAIN))
.setResource(MonitoredResource.newBuilder().setType("global"))
- .addPoints(
- StackdriverExportUtils.createPoint(distributionData1, cumulativeData, DISTRIBUTION))
+ .addPoints(StackdriverExportUtils.createPoint(POINT, null))
.build();
TimeSeries expected2 =
TimeSeries.newBuilder()
- .setMetricKind(MetricKind.CUMULATIVE)
- .setValueType(MetricDescriptor.ValueType.DISTRIBUTION)
+ .setMetricKind(MetricKind.GAUGE)
+ .setValueType(MetricDescriptor.ValueType.DOUBLE)
.setMetric(
StackdriverExportUtils.createMetric(
- view, Arrays.asList(VALUE_2), CUSTOM_OPENCENSUS_DOMAIN))
+ GAUGE_METRIC_DESCRIPTOR, LABEL_VALUE_2, CUSTOM_OPENCENSUS_DOMAIN))
.setResource(MonitoredResource.newBuilder().setType("global"))
- .addPoints(
- StackdriverExportUtils.createPoint(distributionData2, cumulativeData, DISTRIBUTION))
+ .addPoints(StackdriverExportUtils.createPoint(POINT_2, null))
.build();
assertThat(timeSeriesList).containsExactly(expected1, expected2);
}
- @Test
- public void createTimeSeriesList_interval() {
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- DISTRIBUTION,
- Arrays.asList(KEY),
- INTERVAL);
- Map, DistributionData> aggregationMap =
- ImmutableMap.of(
- Arrays.asList(VALUE_1),
- DistributionData.create(2, 3, 0, 5, 14, Arrays.asList(0L, 1L, 1L, 0L, 1L)),
- Arrays.asList(VALUE_2),
- DistributionData.create(-1, 1, -1, -1, 0, Arrays.asList(1L, 0L, 0L, 0L, 0L)));
- ViewData viewData =
- ViewData.create(view, aggregationMap, IntervalData.create(Timestamp.fromMillis(2000)));
- assertThat(
- StackdriverExportUtils.createTimeSeriesList(
- viewData, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN))
- .isEmpty();
- }
-
@Test
public void createTimeSeriesList_withCustomMonitoredResource() {
MonitoredResource resource =
MonitoredResource.newBuilder().setType("global").putLabels("key", "value").build();
- View view =
- View.create(
- Name.create(VIEW_NAME),
- VIEW_DESCRIPTION,
- MEASURE_DOUBLE,
- SUM,
- Arrays.asList(KEY),
- CUMULATIVE);
- SumDataDouble sumData = SumDataDouble.create(55.5);
- Map, SumDataDouble> aggregationMap =
- ImmutableMap.of(Arrays.asList(VALUE_1), sumData);
- CumulativeData cumulativeData =
- CumulativeData.create(Timestamp.fromMillis(1000), Timestamp.fromMillis(2000));
- ViewData viewData = ViewData.create(view, aggregationMap, cumulativeData);
List timeSeriesList =
- StackdriverExportUtils.createTimeSeriesList(viewData, resource, CUSTOM_OPENCENSUS_DOMAIN);
+ StackdriverExportUtils.createTimeSeriesList(METRIC, resource, CUSTOM_OPENCENSUS_DOMAIN);
assertThat(timeSeriesList)
.containsExactly(
TimeSeries.newBuilder()
@@ -560,9 +409,9 @@ public void createTimeSeriesList_withCustomMonitoredResource() {
.setValueType(MetricDescriptor.ValueType.DOUBLE)
.setMetric(
StackdriverExportUtils.createMetric(
- view, Arrays.asList(VALUE_1), CUSTOM_OPENCENSUS_DOMAIN))
+ METRIC_DESCRIPTOR, LABEL_VALUE, CUSTOM_OPENCENSUS_DOMAIN))
.setResource(resource)
- .addPoints(StackdriverExportUtils.createPoint(sumData, cumulativeData, SUM))
+ .addPoints(StackdriverExportUtils.createPoint(POINT, TIMESTAMP_2))
.build());
}
}
diff --git a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java
index 27593829e6..46f0bc7fdd 100644
--- a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java
+++ b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java
@@ -31,7 +31,6 @@
import com.google.api.gax.rpc.UnaryCallable;
import com.google.cloud.monitoring.v3.MetricServiceClient;
import com.google.cloud.monitoring.v3.stub.MetricServiceStub;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.monitoring.v3.CreateMetricDescriptorRequest;
import com.google.monitoring.v3.CreateTimeSeriesRequest;
@@ -39,21 +38,15 @@
import com.google.protobuf.Empty;
import io.opencensus.common.Duration;
import io.opencensus.common.Timestamp;
-import io.opencensus.stats.Aggregation.Sum;
-import io.opencensus.stats.AggregationData;
-import io.opencensus.stats.AggregationData.SumDataLong;
-import io.opencensus.stats.Measure.MeasureLong;
-import io.opencensus.stats.View;
-import io.opencensus.stats.View.AggregationWindow.Cumulative;
-import io.opencensus.stats.View.AggregationWindow.Interval;
-import io.opencensus.stats.View.Name;
-import io.opencensus.stats.ViewData;
-import io.opencensus.stats.ViewData.AggregationWindowData.CumulativeData;
-import io.opencensus.stats.ViewManager;
-import io.opencensus.tags.TagKey;
-import io.opencensus.tags.TagValue;
+import io.opencensus.metrics.LabelKey;
+import io.opencensus.metrics.LabelValue;
+import io.opencensus.metrics.export.Metric;
+import io.opencensus.metrics.export.MetricDescriptor.Type;
+import io.opencensus.metrics.export.MetricProducer;
+import io.opencensus.metrics.export.MetricProducerManager;
+import io.opencensus.metrics.export.Point;
+import io.opencensus.metrics.export.Value;
import java.io.IOException;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
@@ -66,25 +59,45 @@
/** Unit tests for {@link StackdriverExporterWorker}. */
@RunWith(JUnit4.class)
public class StackdriverExporterWorkerTest {
-
private static final String PROJECT_ID = "projectId";
private static final Duration ONE_SECOND = Duration.create(1, 0);
- private static final TagKey KEY = TagKey.create("KEY");
- private static final TagValue VALUE = TagValue.create("VALUE");
- private static final String MEASURE_NAME = "my measurement";
- private static final String MEASURE_UNIT = "us";
- private static final String MEASURE_DESCRIPTION = "measure description";
- private static final MeasureLong MEASURE =
- MeasureLong.create(MEASURE_NAME, MEASURE_DESCRIPTION, MEASURE_UNIT);
- private static final Name VIEW_NAME = Name.create("my view");
- private static final String VIEW_DESCRIPTION = "view description";
- private static final Cumulative CUMULATIVE = Cumulative.create();
- private static final Interval INTERVAL = Interval.create(ONE_SECOND);
- private static final Sum SUM = Sum.create();
+
+ private static final String METRIC_NAME = "my metric";
+ private static final String METRIC_DESCRIPTION = "metric description";
+ private static final String METRIC_DESCRIPTION_2 = "metric description2";
+ private static final String METRIC_UNIT = "us";
+ private static final List LABEL_KEY =
+ Collections.singletonList(LabelKey.create("KEY", "key description"));
+ private static final List LABEL_VALUE =
+ Collections.singletonList(LabelValue.create("VALUE"));
+
+ private static final io.opencensus.metrics.export.MetricDescriptor METRIC_DESCRIPTOR =
+ io.opencensus.metrics.export.MetricDescriptor.create(
+ METRIC_NAME, METRIC_DESCRIPTION, METRIC_UNIT, Type.CUMULATIVE_INT64, LABEL_KEY);
+
+ private static final io.opencensus.metrics.export.MetricDescriptor METRIC_DESCRIPTOR_2 =
+ io.opencensus.metrics.export.MetricDescriptor.create(
+ METRIC_NAME, METRIC_DESCRIPTION_2, METRIC_UNIT, Type.CUMULATIVE_INT64, LABEL_KEY);
+
+ private static final Value VALUE_LONG = Value.longValue(12345678);
+ private static final Timestamp TIMESTAMP = Timestamp.fromMillis(3000);
+ private static final Timestamp TIMESTAMP_2 = Timestamp.fromMillis(1000);
+ private static final Point POINT = Point.create(VALUE_LONG, TIMESTAMP);
+
+ private static final io.opencensus.metrics.export.TimeSeries CUMULATIVE_TIME_SERIES =
+ io.opencensus.metrics.export.TimeSeries.createWithOnePoint(LABEL_VALUE, POINT, TIMESTAMP_2);
+
+ private static final Metric METRIC =
+ Metric.createWithOneTimeSeries(METRIC_DESCRIPTOR, CUMULATIVE_TIME_SERIES);
+ private static final Metric METRIC_2 =
+ Metric.createWithOneTimeSeries(METRIC_DESCRIPTOR_2, CUMULATIVE_TIME_SERIES);
+
private static final MonitoredResource DEFAULT_RESOURCE =
MonitoredResource.newBuilder().setType("global").build();
- @Mock private ViewManager mockViewManager;
+ @Mock private MetricProducerManager metricProducerManager;
+
+ @Mock private MetricProducer metricProducer;
@Mock private MetricServiceStub mockStub;
@@ -104,6 +117,7 @@ public void setUp() {
.when(mockCreateMetricDescriptorCallable)
.call(any(CreateMetricDescriptorRequest.class));
doReturn(null).when(mockCreateTimeSeriesCallable).call(any(CreateTimeSeriesRequest.class));
+ doReturn(ImmutableSet.of(metricProducer)).when(metricProducerManager).getAllMetricProducer();
}
@Test
@@ -116,23 +130,14 @@ public void testConstants() {
}
@Test
- public void export() throws IOException {
- View view =
- View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), CUMULATIVE);
- ViewData viewData =
- ViewData.create(
- view,
- ImmutableMap.of(Arrays.asList(VALUE), SumDataLong.create(1)),
- CumulativeData.create(Timestamp.fromMillis(100), Timestamp.fromMillis(200)));
- doReturn(ImmutableSet.of(view)).when(mockViewManager).getAllExportedViews();
- doReturn(viewData).when(mockViewManager).getView(VIEW_NAME);
-
+ public void export() {
+ doReturn(Collections.singletonList(METRIC)).when(metricProducer).getMetrics();
StackdriverExporterWorker worker =
new StackdriverExporterWorker(
PROJECT_ID,
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
- mockViewManager,
+ metricProducerManager,
DEFAULT_RESOURCE,
null);
worker.export();
@@ -142,10 +147,10 @@ public void export() throws IOException {
MetricDescriptor descriptor =
StackdriverExportUtils.createMetricDescriptor(
- view, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX);
+ METRIC_DESCRIPTOR, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX);
List timeSeries =
StackdriverExportUtils.createTimeSeriesList(
- viewData, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN);
+ METRIC, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN);
verify(mockCreateMetricDescriptorCallable, times(1))
.call(
eq(
@@ -163,112 +168,88 @@ public void export() throws IOException {
}
@Test
- public void doNotExportForEmptyViewData() {
- View view =
- View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), CUMULATIVE);
- ViewData empty =
- ViewData.create(
- view,
- Collections., AggregationData>emptyMap(),
- CumulativeData.create(Timestamp.fromMillis(100), Timestamp.fromMillis(200)));
- doReturn(ImmutableSet.of(view)).when(mockViewManager).getAllExportedViews();
- doReturn(empty).when(mockViewManager).getView(VIEW_NAME);
-
+ public void doNotExportForEmptyMetrics() {
+ doReturn(Collections.EMPTY_LIST).when(metricProducer).getMetrics();
StackdriverExporterWorker worker =
new StackdriverExporterWorker(
PROJECT_ID,
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
- mockViewManager,
+ metricProducerManager,
DEFAULT_RESOURCE,
null);
-
worker.export();
- verify(mockStub, times(1)).createMetricDescriptorCallable();
+ verify(mockStub, times(0)).createMetricDescriptorCallable();
verify(mockStub, times(0)).createTimeSeriesCallable();
}
@Test
- public void doNotExportIfFailedToRegisterView() {
- View view =
- View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), CUMULATIVE);
- doReturn(ImmutableSet.of(view)).when(mockViewManager).getAllExportedViews();
+ public void doNotExportIfFailedToRegisterMetric() {
doThrow(new IllegalArgumentException()).when(mockStub).createMetricDescriptorCallable();
StackdriverExporterWorker worker =
new StackdriverExporterWorker(
PROJECT_ID,
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
- mockViewManager,
+ metricProducerManager,
DEFAULT_RESOURCE,
null);
- assertThat(worker.registerView(view)).isFalse();
+ assertThat(worker.registerMetricDescriptor(METRIC_DESCRIPTOR)).isFalse();
worker.export();
verify(mockStub, times(1)).createMetricDescriptorCallable();
verify(mockStub, times(0)).createTimeSeriesCallable();
}
@Test
- public void skipDifferentViewWithSameName() throws IOException {
+ public void skipDifferentMetricWithSameName() throws IOException {
StackdriverExporterWorker worker =
new StackdriverExporterWorker(
PROJECT_ID,
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
- mockViewManager,
+ metricProducerManager,
DEFAULT_RESOURCE,
null);
- View view1 =
- View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), CUMULATIVE);
- assertThat(worker.registerView(view1)).isTrue();
+ assertThat(worker.registerMetricDescriptor(METRIC_DESCRIPTOR)).isTrue();
verify(mockStub, times(1)).createMetricDescriptorCallable();
- View view2 =
- View.create(
- VIEW_NAME,
- "This is a different description.",
- MEASURE,
- SUM,
- Arrays.asList(KEY),
- CUMULATIVE);
- assertThat(worker.registerView(view2)).isFalse();
+ assertThat(worker.registerMetricDescriptor(METRIC_DESCRIPTOR_2)).isFalse();
verify(mockStub, times(1)).createMetricDescriptorCallable();
}
@Test
- public void doNotCreateMetricDescriptorForRegisteredView() {
+ public void skipSameMetricWithSameName() throws IOException {
StackdriverExporterWorker worker =
new StackdriverExporterWorker(
PROJECT_ID,
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
- mockViewManager,
+ metricProducerManager,
DEFAULT_RESOURCE,
null);
- View view =
- View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), CUMULATIVE);
- assertThat(worker.registerView(view)).isTrue();
+ assertThat(worker.registerMetricDescriptor(METRIC_DESCRIPTOR)).isTrue();
verify(mockStub, times(1)).createMetricDescriptorCallable();
- assertThat(worker.registerView(view)).isTrue();
+ assertThat(worker.registerMetricDescriptor(METRIC_DESCRIPTOR)).isTrue();
verify(mockStub, times(1)).createMetricDescriptorCallable();
}
@Test
- public void doNotCreateMetricDescriptorForIntervalView() {
+ public void doNotCreateMetricDescriptorForRegisteredeMetric() {
StackdriverExporterWorker worker =
new StackdriverExporterWorker(
PROJECT_ID,
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
- mockViewManager,
+ metricProducerManager,
DEFAULT_RESOURCE,
null);
- View view =
- View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), INTERVAL);
- assertThat(worker.registerView(view)).isFalse();
- verify(mockStub, times(0)).createMetricDescriptorCallable();
+ assertThat(worker.registerMetricDescriptor(METRIC_DESCRIPTOR)).isTrue();
+ verify(mockStub, times(1)).createMetricDescriptorCallable();
+
+ assertThat(worker.registerMetricDescriptor(METRIC_DESCRIPTOR)).isTrue();
+ verify(mockStub, times(1)).createMetricDescriptorCallable();
}
@Test