diff options
author | Mayur Kale <mayurkale@google.com> | 2018-10-14 17:36:19 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-14 17:36:19 -0700 |
commit | 418e675ee250299b77370620229bf7d3cd6c6830 (patch) | |
tree | cc1d1ff1105fe5f1c7b387e97984a0fb0908d9d3 | |
parent | 53b1b60633cc3704bdaf0bd84efb3d2503578b20 (diff) | |
download | opencensus-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
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); |