From 2b11b167c8d7633acaacc0c6aca6b829e8f4df6d Mon Sep 17 00:00:00 2001 From: Mayur Kale Date: Wed, 17 Oct 2018 14:15:48 -0700 Subject: Plugs-in the LongGauge into the registry (#1498) * plug-in longGauge into MetricRegistry * Minor fix * Add TODO and Fix build * Fix review comments --- .../java/io/opencensus/metrics/DoubleGauge.java | 4 +- .../main/java/io/opencensus/metrics/LongGauge.java | 8 +- .../java/io/opencensus/metrics/MetricRegistry.java | 81 +++------- .../io/opencensus/metrics/MetricRegistryTest.java | 163 +++++---------------- 4 files changed, 58 insertions(+), 198 deletions(-) (limited to 'api/src') diff --git a/api/src/main/java/io/opencensus/metrics/DoubleGauge.java b/api/src/main/java/io/opencensus/metrics/DoubleGauge.java index 91e131ec..62730a06 100644 --- a/api/src/main/java/io/opencensus/metrics/DoubleGauge.java +++ b/api/src/main/java/io/opencensus/metrics/DoubleGauge.java @@ -86,12 +86,12 @@ public abstract class DoubleGauge { * method for manual operations. * * @param labelValues the list of label values. The number of label values must be the same to - * that of the label keys passed to {@link MetricRegistry#addDoubleGauge}. + * that of the label keys. * @return a {@code DoublePoint} the value of single gauge. * @throws NullPointerException if {@code labelValues} is null OR any element of {@code * labelValues} is null. * @throws IllegalArgumentException if number of {@code labelValues}s are not equal to the label - * keys passed to {@link MetricRegistry#addDoubleGauge}. + * keys. * @since 0.17 */ public abstract DoublePoint getOrCreateTimeSeries(List labelValues); diff --git a/api/src/main/java/io/opencensus/metrics/LongGauge.java b/api/src/main/java/io/opencensus/metrics/LongGauge.java index 42951d50..f473a8ac 100644 --- a/api/src/main/java/io/opencensus/metrics/LongGauge.java +++ b/api/src/main/java/io/opencensus/metrics/LongGauge.java @@ -32,7 +32,7 @@ import javax.annotation.concurrent.ThreadSafe; * private static final MetricRegistry metricRegistry = Metrics.getMetricRegistry(); * * List labelKeys = Arrays.asList(LabelKey.create("Name", "desc")); - * // TODO(mayurkale): Plugs-in the LongGauge into the registry. + * * LongGauge gauge = metricRegistry.addLongGauge("queue_size", "Pending jobs", "1", labelKeys); * * // It is recommended to keep a reference of a point for manual operations. @@ -56,7 +56,6 @@ import javax.annotation.concurrent.ThreadSafe; * List labelKeys = Arrays.asList(LabelKey.create("Name", "desc")); * List labelValues = Arrays.asList(LabelValue.create("Inbound")); * - * // TODO(mayurkale): Plugs-in the LongGauge into the registry. * LongGauge gauge = metricRegistry.addLongGauge("queue_size", "Pending jobs", "1", labelKeys); * * // It is recommended to keep a reference of a point for manual operations. @@ -167,11 +166,6 @@ public abstract class LongGauge { /** Creates a new {@code NoopLongPoint}. */ NoopLongGauge(String name, String description, String unit, List labelKeys) { - Utils.checkNotNull(name, "name"); - Utils.checkNotNull(description, "description"); - Utils.checkNotNull(unit, "unit"); - Utils.checkNotNull(labelKeys, "labelKeys should not be null."); - Utils.checkListElementNotNull(labelKeys, "labelKeys element should not be null."); labelKeysSize = labelKeys.size(); } diff --git a/api/src/main/java/io/opencensus/metrics/MetricRegistry.java b/api/src/main/java/io/opencensus/metrics/MetricRegistry.java index a9987b75..840ad787 100644 --- a/api/src/main/java/io/opencensus/metrics/MetricRegistry.java +++ b/api/src/main/java/io/opencensus/metrics/MetricRegistry.java @@ -17,10 +17,8 @@ package io.opencensus.metrics; import io.opencensus.common.ExperimentalApi; -import io.opencensus.common.ToDoubleFunction; -import io.opencensus.common.ToLongFunction; import io.opencensus.internal.Utils; -import java.util.LinkedHashMap; +import java.util.List; /** * Creates and manages your application's set of metrics. The default implementation of this creates @@ -32,44 +30,21 @@ import java.util.LinkedHashMap; @ExperimentalApi public abstract class MetricRegistry { /** - * Build a new long gauge to be added to the registry. - * - *

Must be called only once. + * Builds a new long gauge to be added to the registry. This is more convenient form when you want + * to manually increase and decrease values as per your service requirements. * * @param name the name of the metric. * @param description the description of the metric. * @param unit the unit of the metric. - * @param obj the function argument. - * @param function the function to be called. + * @param labelKeys the list of the label keys. + * @throws NullPointerException if {@code labelKeys} is null OR any element of {@code labelKeys} + * is null OR {@code name}, {@code description}, {@code unit} is null. + * @throws IllegalArgumentException if different metric with the same name already registered. * @since 0.17 */ - public abstract void addLongGauge( - String name, - String description, - String unit, - LinkedHashMap labels, - T obj, - ToLongFunction function); - - /** - * Build a new double gauge to be added to the registry. - * - *

Must be called only once. - * - * @param name the name of the metric. - * @param description the description of the metric. - * @param unit the unit of the metric. - * @param obj the function argument. - * @param function the function to be called. - * @since 0.17 - */ - public abstract void addDoubleGauge( - String name, - String description, - String unit, - LinkedHashMap labels, - T obj, - ToDoubleFunction function); + @ExperimentalApi + public abstract LongGauge addLongGauge( + String name, String description, String unit, List labelKeys); static MetricRegistry newNoopMetricRegistry() { return new NoopMetricRegistry(); @@ -78,33 +53,15 @@ public abstract class MetricRegistry { private static final class NoopMetricRegistry extends MetricRegistry { @Override - public void addLongGauge( - String name, - String description, - String unit, - LinkedHashMap labels, - T obj, - ToLongFunction function) { - Utils.checkNotNull(name, "name"); - Utils.checkNotNull(description, "description"); - Utils.checkNotNull(unit, "unit"); - Utils.checkNotNull(labels, "labels"); - Utils.checkNotNull(function, "function"); - } - - @Override - public void addDoubleGauge( - String name, - String description, - String unit, - LinkedHashMap labels, - T obj, - ToDoubleFunction function) { - Utils.checkNotNull(name, "name"); - Utils.checkNotNull(description, "description"); - Utils.checkNotNull(unit, "unit"); - Utils.checkNotNull(labels, "labels"); - Utils.checkNotNull(function, "function"); + public LongGauge addLongGauge( + String name, String description, String unit, List labelKeys) { + Utils.checkListElementNotNull( + Utils.checkNotNull(labelKeys, "labelKeys"), "labelKey element should not be null."); + return LongGauge.newNoopLongGauge( + Utils.checkNotNull(name, "name"), + Utils.checkNotNull(description, "description"), + Utils.checkNotNull(unit, "unit"), + labelKeys); } } } diff --git a/api/src/test/java/io/opencensus/metrics/MetricRegistryTest.java b/api/src/test/java/io/opencensus/metrics/MetricRegistryTest.java index 49e8ce02..0d90fa97 100644 --- a/api/src/test/java/io/opencensus/metrics/MetricRegistryTest.java +++ b/api/src/test/java/io/opencensus/metrics/MetricRegistryTest.java @@ -16,9 +16,10 @@ package io.opencensus.metrics; -import io.opencensus.common.ToDoubleFunction; -import io.opencensus.common.ToLongFunction; -import java.util.LinkedHashMap; +import static com.google.common.truth.Truth.assertThat; + +import java.util.Collections; +import java.util.List; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -30,156 +31,64 @@ import org.junit.runners.JUnit4; public class MetricRegistryTest { @Rule public ExpectedException thrown = ExpectedException.none(); + private static final String NAME = "name"; + private static final String DESCRIPTION = "description"; + private static final String UNIT = "1"; + private static final List LABEL_KEY = + Collections.singletonList(LabelKey.create("key", "key description")); + private static final List LABEL_VALUES = + Collections.singletonList(LabelValue.create("value")); private final MetricRegistry metricRegistry = MetricsComponent.newNoopMetricsComponent().getMetricRegistry(); @Test - public void addDoubleGauge_NullName() { - thrown.expect(NullPointerException.class); - metricRegistry.addDoubleGauge( - null, - "description", - "1", - new LinkedHashMap(), - null, - new ToDoubleFunction() { - @Override - public double applyAsDouble(Object value) { - return 5.0; - } - }); - } - - @Test - public void addDoubleGauge_NullDescription() { + public void noopAddLongGauge_NullName() { thrown.expect(NullPointerException.class); - metricRegistry.addDoubleGauge( - "name", - null, - "1", - new LinkedHashMap(), - null, - new ToDoubleFunction() { - @Override - public double applyAsDouble(Object value) { - return 5.0; - } - }); + thrown.expectMessage("name"); + metricRegistry.addLongGauge(null, DESCRIPTION, UNIT, LABEL_KEY); } @Test - public void addDoubleGauge_NullUnit() { + public void noopAddLongGauge_NullDescription() { thrown.expect(NullPointerException.class); - metricRegistry.addDoubleGauge( - "name", - "description", - null, - new LinkedHashMap(), - null, - new ToDoubleFunction() { - @Override - public double applyAsDouble(Object value) { - return 5.0; - } - }); + thrown.expectMessage("description"); + metricRegistry.addLongGauge(NAME, null, UNIT, LABEL_KEY); } @Test - public void addDoubleGauge_NullLabels() { + public void noopAddLongGauge_NullUnit() { thrown.expect(NullPointerException.class); - metricRegistry.addDoubleGauge( - "name", - "description", - "1", - null, - null, - new ToDoubleFunction() { - @Override - public double applyAsDouble(Object value) { - return 5.0; - } - }); + thrown.expectMessage("unit"); + metricRegistry.addLongGauge(NAME, DESCRIPTION, null, LABEL_KEY); } @Test - public void addDoubleGauge_NullFunction() { + public void noopAddLongGauge_NullLabels() { thrown.expect(NullPointerException.class); - metricRegistry.addDoubleGauge( - "name", "description", "1", new LinkedHashMap(), null, null); + thrown.expectMessage("labelKeys"); + metricRegistry.addLongGauge(NAME, DESCRIPTION, UNIT, null); } @Test - public void addLongGauge_NullName() { + public void noopAddLongGauge_WithNullElement() { + List labelKeys = Collections.singletonList(null); thrown.expect(NullPointerException.class); - metricRegistry.addLongGauge( - null, - "description", - "1", - new LinkedHashMap(), - null, - new ToLongFunction() { - @Override - public long applyAsLong(Object value) { - return 5; - } - }); + thrown.expectMessage("labelKey element should not be null."); + metricRegistry.addLongGauge(NAME, DESCRIPTION, UNIT, labelKeys); } @Test - public void addLongGauge_NullDescription() { - thrown.expect(NullPointerException.class); - metricRegistry.addLongGauge( - "name", - null, - "1", - new LinkedHashMap(), - null, - new ToLongFunction() { - @Override - public long applyAsLong(Object value) { - return 5; - } - }); + public void noopSameAs() { + LongGauge longGauge = metricRegistry.addLongGauge(NAME, DESCRIPTION, UNIT, LABEL_KEY); + assertThat(longGauge.getDefaultTimeSeries()).isSameAs(longGauge.getDefaultTimeSeries()); + assertThat(longGauge.getDefaultTimeSeries()) + .isSameAs(longGauge.getOrCreateTimeSeries(LABEL_VALUES)); } @Test - public void addLongGauge_NullUnit() { - thrown.expect(NullPointerException.class); - metricRegistry.addLongGauge( - "name", - "description", - null, - new LinkedHashMap(), - null, - new ToLongFunction() { - @Override - public long applyAsLong(Object value) { - return 5; - } - }); - } - - @Test - public void addLongGauge_NullLabels() { - thrown.expect(NullPointerException.class); - metricRegistry.addLongGauge( - "name", - "description", - "1", - null, - null, - new ToLongFunction() { - @Override - public long applyAsLong(Object value) { - return 5; - } - }); - } - - @Test - public void addLongGauge_NullFunction() { - thrown.expect(NullPointerException.class); - metricRegistry.addLongGauge( - "name", "description", "1", new LinkedHashMap(), null, null); + public void noopInstanceOf() { + LongGauge longGauge = metricRegistry.addLongGauge(NAME, DESCRIPTION, UNIT, LABEL_KEY); + assertThat(longGauge) + .isInstanceOf(LongGauge.newNoopLongGauge(NAME, DESCRIPTION, UNIT, LABEL_KEY).getClass()); } } -- cgit v1.2.3