aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMayur Kale <mayurkale@google.com>2018-10-14 17:36:19 -0700
committerGitHub <noreply@github.com>2018-10-14 17:36:19 -0700
commit418e675ee250299b77370620229bf7d3cd6c6830 (patch)
treecc1d1ff1105fe5f1c7b387e97984a0fb0908d9d3
parent53b1b60633cc3704bdaf0bd84efb3d2503578b20 (diff)
downloadopencensus-java-418e675ee250299b77370620229bf7d3cd6c6830.tar.gz
Metrics/Metric: Add a version of create that accepts only one timeseries. (#1495)
* Metrics/Metric: Add createWithOneTimeSeries method * Fix review comments
-rw-r--r--api/src/main/java/io/opencensus/metrics/export/Metric.java35
-rw-r--r--api/src/test/java/io/opencensus/metrics/export/MetricTest.java45
-rw-r--r--contrib/dropwizard/src/main/java/io/opencensus/contrib/dropwizard/DropWizardMetrics.java8
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/metrics/Gauge.java2
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/metrics/LongGaugeImpl.java21
-rw-r--r--impl_core/src/test/java/io/opencensus/implcore/metrics/GaugeTest.java20
-rw-r--r--impl_core/src/test/java/io/opencensus/implcore/metrics/LongGaugeImplTest.java23
7 files changed, 103 insertions, 51 deletions
diff --git a/api/src/main/java/io/opencensus/metrics/export/Metric.java b/api/src/main/java/io/opencensus/metrics/export/Metric.java
index 5e2fa5e8..7b93fc86 100644
--- a/api/src/main/java/io/opencensus/metrics/export/Metric.java
+++ b/api/src/main/java/io/opencensus/metrics/export/Metric.java
@@ -49,12 +49,39 @@ public abstract class Metric {
* @since 0.17
*/
public static Metric create(MetricDescriptor metricDescriptor, List<TimeSeries> timeSeriesList) {
+ Utils.checkListElementNotNull(
+ Utils.checkNotNull(timeSeriesList, "timeSeriesList"), "timeSeries");
+ return createInternal(
+ metricDescriptor, Collections.unmodifiableList(new ArrayList<TimeSeries>(timeSeriesList)));
+ }
+
+ /**
+ * Creates a {@link Metric}.
+ *
+ * @param metricDescriptor the {@link MetricDescriptor}.
+ * @param timeSeries the single {@link TimeSeries} for this metric.
+ * @return a {@code Metric}.
+ * @since 0.17
+ */
+ public static Metric createWithOneTimeSeries(
+ MetricDescriptor metricDescriptor, TimeSeries timeSeries) {
+ return createInternal(
+ metricDescriptor, Collections.singletonList(Utils.checkNotNull(timeSeries, "timeSeries")));
+ }
+
+ /**
+ * Creates a {@link Metric}.
+ *
+ * @param metricDescriptor the {@link MetricDescriptor}.
+ * @param timeSeriesList the {@link TimeSeries} list for this metric.
+ * @return a {@code Metric}.
+ * @since 0.17
+ */
+ private static Metric createInternal(
+ MetricDescriptor metricDescriptor, List<TimeSeries> timeSeriesList) {
Utils.checkNotNull(metricDescriptor, "metricDescriptor");
- Utils.checkNotNull(timeSeriesList, "timeSeriesList");
- Utils.checkListElementNotNull(timeSeriesList, "timeSeries");
checkTypeMatch(metricDescriptor.getType(), timeSeriesList);
- return new AutoValue_Metric(
- metricDescriptor, Collections.unmodifiableList(new ArrayList<TimeSeries>(timeSeriesList)));
+ return new AutoValue_Metric(metricDescriptor, timeSeriesList);
}
/**
diff --git a/api/src/test/java/io/opencensus/metrics/export/MetricTest.java b/api/src/test/java/io/opencensus/metrics/export/MetricTest.java
index 52fa2c47..ed205289 100644
--- a/api/src/test/java/io/opencensus/metrics/export/MetricTest.java
+++ b/api/src/test/java/io/opencensus/metrics/export/MetricTest.java
@@ -50,7 +50,11 @@ public class MetricTest {
METRIC_NAME_1, DESCRIPTION, UNIT, Type.GAUGE_DOUBLE, Arrays.asList(KEY_1, KEY_2));
private static final MetricDescriptor METRIC_DESCRIPTOR_2 =
MetricDescriptor.create(
- METRIC_NAME_2, DESCRIPTION, UNIT, Type.CUMULATIVE_INT64, Arrays.asList(KEY_1));
+ METRIC_NAME_2,
+ DESCRIPTION,
+ UNIT,
+ Type.CUMULATIVE_INT64,
+ Collections.singletonList(KEY_1));
private static final LabelValue LABEL_VALUE_1 = LabelValue.create("value1");
private static final LabelValue LABEL_VALUE_2 = LabelValue.create("value1");
private static final LabelValue LABEL_VALUE_EMPTY = LabelValue.create("");
@@ -64,11 +68,16 @@ public class MetricTest {
private static final Point POINT_2 = Point.create(VALUE_DOUBLE_2, TIMESTAMP_3);
private static final Point POINT_3 = Point.create(VALUE_LONG, TIMESTAMP_3);
private static final TimeSeries GAUGE_TIME_SERIES_1 =
- TimeSeries.create(Arrays.asList(LABEL_VALUE_1, LABEL_VALUE_2), Arrays.asList(POINT_1), null);
+ TimeSeries.create(
+ Arrays.asList(LABEL_VALUE_1, LABEL_VALUE_2), Collections.singletonList(POINT_1), null);
private static final TimeSeries GAUGE_TIME_SERIES_2 =
- TimeSeries.create(Arrays.asList(LABEL_VALUE_1, LABEL_VALUE_2), Arrays.asList(POINT_2), null);
+ TimeSeries.create(
+ Arrays.asList(LABEL_VALUE_1, LABEL_VALUE_2), Collections.singletonList(POINT_2), null);
private static final TimeSeries CUMULATIVE_TIME_SERIES =
- TimeSeries.create(Arrays.asList(LABEL_VALUE_EMPTY), Arrays.asList(POINT_3), TIMESTAMP_1);
+ TimeSeries.create(
+ Collections.singletonList(LABEL_VALUE_EMPTY),
+ Collections.singletonList(POINT_3),
+ TIMESTAMP_1);
@Test
public void testGet() {
@@ -84,7 +93,7 @@ public class MetricTest {
public void typeMismatch_GaugeDouble_Long() {
typeMismatch(
METRIC_DESCRIPTOR_1,
- Arrays.asList(CUMULATIVE_TIME_SERIES),
+ Collections.singletonList(CUMULATIVE_TIME_SERIES),
String.format("Type mismatch: %s, %s.", Type.GAUGE_DOUBLE, "ValueLong"));
}
@@ -92,7 +101,7 @@ public class MetricTest {
public void typeMismatch_CumulativeInt64_Double() {
typeMismatch(
METRIC_DESCRIPTOR_2,
- Arrays.asList(GAUGE_TIME_SERIES_1),
+ Collections.singletonList(GAUGE_TIME_SERIES_1),
String.format("Type mismatch: %s, %s.", Type.CUMULATIVE_INT64, "ValueDouble"));
}
@@ -134,6 +143,27 @@ public class MetricTest {
}
@Test
+ public void createWithOneTimeSeries_WithNullTimeSeries() {
+ thrown.expect(NullPointerException.class);
+ thrown.expectMessage("timeSeries");
+ Metric.createWithOneTimeSeries(METRIC_DESCRIPTOR_1, null);
+ }
+
+ @Test
+ public void createWithOneTimeSeries_WithNullMetricDescriptor() {
+ thrown.expect(NullPointerException.class);
+ thrown.expectMessage("metricDescriptor");
+ Metric.createWithOneTimeSeries(null, GAUGE_TIME_SERIES_1);
+ }
+
+ @Test
+ public void testGet_WithOneTimeSeries() {
+ Metric metric = Metric.createWithOneTimeSeries(METRIC_DESCRIPTOR_1, GAUGE_TIME_SERIES_1);
+ assertThat(metric.getMetricDescriptor()).isEqualTo(METRIC_DESCRIPTOR_1);
+ assertThat(metric.getTimeSeriesList()).containsExactly(GAUGE_TIME_SERIES_1);
+ }
+
+ @Test
public void testEquals() {
new EqualsTester()
.addEqualityGroup(
@@ -142,7 +172,8 @@ public class MetricTest {
Metric.create(
METRIC_DESCRIPTOR_1, Arrays.asList(GAUGE_TIME_SERIES_1, GAUGE_TIME_SERIES_2)))
.addEqualityGroup(Metric.create(METRIC_DESCRIPTOR_1, Collections.<TimeSeries>emptyList()))
- .addEqualityGroup(Metric.create(METRIC_DESCRIPTOR_2, Arrays.asList(CUMULATIVE_TIME_SERIES)))
+ .addEqualityGroup(
+ Metric.createWithOneTimeSeries(METRIC_DESCRIPTOR_2, CUMULATIVE_TIME_SERIES))
.addEqualityGroup(Metric.create(METRIC_DESCRIPTOR_2, Collections.<TimeSeries>emptyList()))
.testEquals();
}
diff --git a/contrib/dropwizard/src/main/java/io/opencensus/contrib/dropwizard/DropWizardMetrics.java b/contrib/dropwizard/src/main/java/io/opencensus/contrib/dropwizard/DropWizardMetrics.java
index d95d363e..d9231837 100644
--- a/contrib/dropwizard/src/main/java/io/opencensus/contrib/dropwizard/DropWizardMetrics.java
+++ b/contrib/dropwizard/src/main/java/io/opencensus/contrib/dropwizard/DropWizardMetrics.java
@@ -107,7 +107,7 @@ public class DropWizardMetrics extends MetricProducer {
TimeSeries timeSeries =
TimeSeries.createWithOnePoint(
Collections.<LabelValue>emptyList(), Point.create(value, clock.now()), null);
- return Metric.create(metricDescriptor, Collections.singletonList(timeSeries));
+ return Metric.createWithOneTimeSeries(metricDescriptor, timeSeries);
}
/**
@@ -134,7 +134,7 @@ public class DropWizardMetrics extends MetricProducer {
Collections.<LabelValue>emptyList(),
Point.create(Value.longValue(counter.getCount()), clock.now()),
null);
- return Metric.create(metricDescriptor, Collections.singletonList(timeSeries));
+ return Metric.createWithOneTimeSeries(metricDescriptor, timeSeries);
}
/**
@@ -161,7 +161,7 @@ public class DropWizardMetrics extends MetricProducer {
Point.create(Value.longValue(meter.getCount()), clock.now()),
null);
- return Metric.create(metricDescriptor, Collections.singletonList(timeSeries));
+ return Metric.createWithOneTimeSeries(metricDescriptor, timeSeries);
}
/**
@@ -231,7 +231,7 @@ public class DropWizardMetrics extends MetricProducer {
TimeSeries.createWithOnePoint(
Collections.<LabelValue>emptyList(), point, cumulativeStartTimestamp);
- return Metric.create(metricDescriptor, Collections.singletonList(timeSeries));
+ return Metric.createWithOneTimeSeries(metricDescriptor, timeSeries);
}
@Override
diff --git a/impl_core/src/main/java/io/opencensus/implcore/metrics/Gauge.java b/impl_core/src/main/java/io/opencensus/implcore/metrics/Gauge.java
index 06cfbc1e..e52fcff5 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/metrics/Gauge.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/metrics/Gauge.java
@@ -37,7 +37,7 @@ abstract class Gauge {
private final List<LabelValue> labelValues;
final Metric getMetric(Clock clock) {
- return Metric.create(metricDescriptor, Collections.singletonList(getTimeSeries(clock)));
+ return Metric.createWithOneTimeSeries(metricDescriptor, getTimeSeries(clock));
}
abstract TimeSeries getTimeSeries(Clock clock);
diff --git a/impl_core/src/main/java/io/opencensus/implcore/metrics/LongGaugeImpl.java b/impl_core/src/main/java/io/opencensus/implcore/metrics/LongGaugeImpl.java
index 4ad4e354..a7f84347 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/metrics/LongGaugeImpl.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/metrics/LongGaugeImpl.java
@@ -129,18 +129,21 @@ public final class LongGaugeImpl extends LongGauge implements Meter {
@Override
public Metric getMetric(Clock clock) {
Map<List<LabelValue>, PointImpl> currentRegisteredPoints = registeredPoints;
+ if (currentRegisteredPoints.isEmpty()) {
+ return null;
+ }
int pointCount = currentRegisteredPoints.size();
- if (pointCount > 0) {
- List<TimeSeries> timeSeriesList = new ArrayList<TimeSeries>(pointCount);
- for (Map.Entry<List<LabelValue>, PointImpl> entry : currentRegisteredPoints.entrySet()) {
- timeSeriesList.add(entry.getValue().getTimeSeries(clock));
- }
-
- // TODO(mayurkale): optimize this for 1 timeseries (issue #1491).
- return Metric.create(metricDescriptor, timeSeriesList);
+ if (pointCount == 1) {
+ PointImpl point = currentRegisteredPoints.values().iterator().next();
+ return Metric.createWithOneTimeSeries(metricDescriptor, point.getTimeSeries(clock));
+ }
+
+ List<TimeSeries> timeSeriesList = new ArrayList<TimeSeries>(pointCount);
+ for (Map.Entry<List<LabelValue>, PointImpl> entry : currentRegisteredPoints.entrySet()) {
+ timeSeriesList.add(entry.getValue().getTimeSeries(clock));
}
- return null;
+ return Metric.create(metricDescriptor, timeSeriesList);
}
/** Implementation of {@link LongGauge.LongPoint}. */
diff --git a/impl_core/src/test/java/io/opencensus/implcore/metrics/GaugeTest.java b/impl_core/src/test/java/io/opencensus/implcore/metrics/GaugeTest.java
index e5e4cbc5..4c4c3a92 100644
--- a/impl_core/src/test/java/io/opencensus/implcore/metrics/GaugeTest.java
+++ b/impl_core/src/test/java/io/opencensus/implcore/metrics/GaugeTest.java
@@ -86,25 +86,21 @@ public class GaugeTest {
public void longGauge_GetMetric() {
assertThat(longGauge.getMetric(testClock))
.isEqualTo(
- Metric.create(
+ Metric.createWithOneTimeSeries(
MetricDescriptor.create(NAME, DESCRIPTION, UNIT, Type.GAUGE_INT64, LABEL_KEYS),
- Collections.singletonList(
- TimeSeries.createWithOnePoint(
- LABEL_VALUES,
- Point.create(Value.longValue(OBJ.hashCode()), TEST_TIME),
- null))));
+ TimeSeries.createWithOnePoint(
+ LABEL_VALUES, Point.create(Value.longValue(OBJ.hashCode()), TEST_TIME), null)));
}
@Test
public void doubleGauge_GetMetric() {
assertThat(doubleGauge.getMetric(testClock))
.isEqualTo(
- Metric.create(
+ Metric.createWithOneTimeSeries(
MetricDescriptor.create(NAME, DESCRIPTION, UNIT, Type.GAUGE_DOUBLE, LABEL_KEYS),
- Collections.singletonList(
- TimeSeries.createWithOnePoint(
- LABEL_VALUES,
- Point.create(Value.doubleValue(OBJ.hashCode()), TEST_TIME),
- null))));
+ TimeSeries.createWithOnePoint(
+ LABEL_VALUES,
+ Point.create(Value.doubleValue(OBJ.hashCode()), TEST_TIME),
+ null)));
}
}
diff --git a/impl_core/src/test/java/io/opencensus/implcore/metrics/LongGaugeImplTest.java b/impl_core/src/test/java/io/opencensus/implcore/metrics/LongGaugeImplTest.java
index 0a1c2826..81637c61 100644
--- a/impl_core/src/test/java/io/opencensus/implcore/metrics/LongGaugeImplTest.java
+++ b/impl_core/src/test/java/io/opencensus/implcore/metrics/LongGaugeImplTest.java
@@ -107,11 +107,10 @@ public class LongGaugeImplTest {
assertThat(metric).isNotEqualTo(null);
assertThat(metric)
.isEqualTo(
- Metric.create(
+ Metric.createWithOneTimeSeries(
METRIC_DESCRIPTOR,
- Collections.singletonList(
- TimeSeries.createWithOnePoint(
- LABEL_VALUES, Point.create(Value.longValue(500), TEST_TIME), null))));
+ TimeSeries.createWithOnePoint(
+ LABEL_VALUES, Point.create(Value.longValue(500), TEST_TIME), null)));
new EqualsTester().addEqualityGroup(point, point1).testEquals();
}
@@ -146,13 +145,10 @@ public class LongGaugeImplTest {
assertThat(metric).isNotEqualTo(null);
assertThat(metric)
.isEqualTo(
- Metric.create(
+ Metric.createWithOneTimeSeries(
METRIC_DESCRIPTOR,
- Collections.singletonList(
- TimeSeries.createWithOnePoint(
- DEFAULT_LABEL_VALUES,
- Point.create(Value.longValue(400), TEST_TIME),
- null))));
+ TimeSeries.createWithOnePoint(
+ DEFAULT_LABEL_VALUES, Point.create(Value.longValue(400), TEST_TIME), null)));
new EqualsTester().addEqualityGroup(point, point1).testEquals();
}
@@ -161,11 +157,10 @@ public class LongGaugeImplTest {
longGaugeMetric.getOrCreateTimeSeries(LABEL_VALUES);
assertThat(longGaugeMetric.getMetric(testClock))
.isEqualTo(
- Metric.create(
+ Metric.createWithOneTimeSeries(
METRIC_DESCRIPTOR,
- Collections.singletonList(
- TimeSeries.createWithOnePoint(
- LABEL_VALUES, Point.create(Value.longValue(0), TEST_TIME), null))));
+ TimeSeries.createWithOnePoint(
+ LABEL_VALUES, Point.create(Value.longValue(0), TEST_TIME), null)));
longGaugeMetric.removeTimeSeries(LABEL_VALUES);
assertThat(longGaugeMetric.getMetric(testClock)).isEqualTo(null);