aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBogdan Drutu <bdrutu@google.com>2018-09-30 19:20:08 -0700
committerGitHub <noreply@github.com>2018-09-30 19:20:08 -0700
commitfb41bec0a6618bef81f5dcc1f249a8ce530ebd3b (patch)
tree0a0ec0480ce39c7af08b40344483af46acbb863e
parentb9facf96de0e2d0c8b87712c26794c61d7c4d97c (diff)
downloadopencensus-java-fb41bec0a6618bef81f5dcc1f249a8ce530ebd3b.tar.gz
Split the public metrics API from the data model. (#1477)
* Split the public API from the data model. * Small comment added about registration of the MetricProducer.
-rw-r--r--api/src/main/java/io/opencensus/metrics/MetricProducer.java8
-rw-r--r--api/src/main/java/io/opencensus/metrics/MetricRegistry.java21
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/metrics/MetricRegistryImpl.java62
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/metrics/MetricsComponentImplBase.java5
-rw-r--r--impl_core/src/test/java/io/opencensus/implcore/metrics/MetricRegistryImplTest.java8
-rw-r--r--impl_core/src/test/java/io/opencensus/implcore/metrics/MetricsComponentImplBaseTest.java10
6 files changed, 72 insertions, 42 deletions
diff --git a/api/src/main/java/io/opencensus/metrics/MetricProducer.java b/api/src/main/java/io/opencensus/metrics/MetricProducer.java
index 38b5d571..2a78b989 100644
--- a/api/src/main/java/io/opencensus/metrics/MetricProducer.java
+++ b/api/src/main/java/io/opencensus/metrics/MetricProducer.java
@@ -21,18 +21,20 @@ import io.opencensus.metrics.export.MetricProducerManager;
import java.util.Collection;
/**
- * A {@link io.opencensus.metrics.Metric} producer that can be registered for exporting using {@link
+ * A {@link Metric} producer that can be registered for exporting using {@link
* MetricProducerManager}.
*
* <p>All implementation MUST be thread-safe.
+ *
+ * @since 0.17
*/
@ExperimentalApi
public abstract class MetricProducer {
/**
- * Returns a collection of produced {@link io.opencensus.metrics.Metric}s to be exported.
+ * Returns a collection of produced {@link Metric}s to be exported.
*
- * @return a collection of produced {@link io.opencensus.metrics.Metric}s to be exported.
+ * @return a collection of produced {@link Metric}s to be exported.
*/
public abstract Collection<Metric> getMetrics();
}
diff --git a/api/src/main/java/io/opencensus/metrics/MetricRegistry.java b/api/src/main/java/io/opencensus/metrics/MetricRegistry.java
index ae4d90b0..c249d47b 100644
--- a/api/src/main/java/io/opencensus/metrics/MetricRegistry.java
+++ b/api/src/main/java/io/opencensus/metrics/MetricRegistry.java
@@ -20,19 +20,17 @@ import io.opencensus.common.ExperimentalApi;
import io.opencensus.common.ToDoubleFunction;
import io.opencensus.common.ToLongFunction;
import io.opencensus.internal.Utils;
-import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
/**
- * Creates and manages your application's set of metrics. Exporters use the metric registry to
- * iterate over the set of metrics instrumenting your application, and then further export each
- * metric to the backend of choice.
+ * Creates and manages your application's set of metrics. The default implementation of this creates
+ * a {@link MetricProducer} and registers it to the global {@link
+ * io.opencensus.metrics.export.MetricProducerManager}.
*
- * @since 0.16
+ * @since 0.17
*/
@ExperimentalApi
-public abstract class MetricRegistry extends MetricProducer {
+public abstract class MetricRegistry {
/**
* Build a new long gauge to be added to the registry.
*
@@ -43,7 +41,7 @@ public abstract class MetricRegistry extends MetricProducer {
* @param unit the unit of the metric.
* @param obj the function argument.
* @param function the function to be called.
- * @since 0.16 @ExperimentalApi
+ * @since 0.17
*/
public abstract <T> void addLongGauge(
String name,
@@ -63,7 +61,7 @@ public abstract class MetricRegistry extends MetricProducer {
* @param unit the unit of the metric.
* @param obj the function argument.
* @param function the function to be called.
- * @since 0.16 @ExperimentalApi
+ * @since 0.17
*/
public abstract <T> void addDoubleGauge(
String name,
@@ -108,10 +106,5 @@ public abstract class MetricRegistry extends MetricProducer {
Utils.checkNotNull(labels, "labels");
Utils.checkNotNull(function, "function");
}
-
- @Override
- public Collection<Metric> getMetrics() {
- return Collections.emptyList();
- }
}
}
diff --git a/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricRegistryImpl.java b/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricRegistryImpl.java
index f3daaef7..642a9515 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricRegistryImpl.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricRegistryImpl.java
@@ -26,6 +26,7 @@ import io.opencensus.implcore.metrics.Gauge.LongGauge;
import io.opencensus.metrics.LabelKey;
import io.opencensus.metrics.LabelValue;
import io.opencensus.metrics.Metric;
+import io.opencensus.metrics.MetricProducer;
import io.opencensus.metrics.MetricRegistry;
import java.util.ArrayList;
import java.util.Collection;
@@ -36,11 +37,12 @@ import java.util.Set;
/** Implementation of {@link MetricRegistry}. */
public final class MetricRegistryImpl extends MetricRegistry {
- private final Clock clock;
- private volatile Set<Gauge> registeredGauges = Collections.emptySet();
+ private final RegisteredMeters registeredMeters;
+ private final MetricProducer metricProducer;
MetricRegistryImpl(Clock clock) {
- this.clock = clock;
+ registeredMeters = new RegisteredMeters();
+ metricProducer = new MetricProducerForRegistry(registeredMeters, clock);
}
@Override
@@ -52,7 +54,7 @@ public final class MetricRegistryImpl extends MetricRegistry {
T obj,
ToLongFunction<T> function) {
checkNotNull(labels, "labels");
- registerGauge(
+ registeredMeters.registerMeter(
new LongGauge<T>(
checkNotNull(name, "name"),
checkNotNull(description, "description"),
@@ -72,7 +74,7 @@ public final class MetricRegistryImpl extends MetricRegistry {
T obj,
ToDoubleFunction<T> function) {
checkNotNull(labels, "labels");
- registerGauge(
+ registeredMeters.registerMeter(
new DoubleGauge<T>(
checkNotNull(name, "name"),
checkNotNull(description, "description"),
@@ -83,23 +85,45 @@ public final class MetricRegistryImpl extends MetricRegistry {
checkNotNull(function, "function")));
}
- @Override
- public Collection<Metric> getMetrics() {
- // Get a snapshot of the current registered gauges.
- Set<Gauge> gaguges = registeredGauges;
- if (gaguges.isEmpty()) {
- return Collections.emptyList();
+ private static final class RegisteredMeters {
+ private volatile Set<Gauge> registeredGauges = Collections.emptySet();
+
+ private Set<Gauge> getRegisteredMeters() {
+ return registeredGauges;
}
- ArrayList<Metric> metrics = new ArrayList<Metric>();
- for (Gauge gauge : gaguges) {
- metrics.add(gauge.getMetric(clock));
+
+ private synchronized void registerMeter(Gauge gauge) {
+ Set<Gauge> newGaguesList = new LinkedHashSet<Gauge>(registeredGauges);
+ newGaguesList.add(gauge);
+ registeredGauges = Collections.unmodifiableSet(newGaguesList);
+ }
+ }
+
+ private static final class MetricProducerForRegistry extends MetricProducer {
+ private final RegisteredMeters registeredMeters;
+ private final Clock clock;
+
+ private MetricProducerForRegistry(RegisteredMeters registeredMeters, Clock clock) {
+ this.registeredMeters = registeredMeters;
+ this.clock = clock;
+ }
+
+ @Override
+ public Collection<Metric> getMetrics() {
+ // Get a snapshot of the current registered gauges.
+ Set<Gauge> gaguges = registeredMeters.getRegisteredMeters();
+ if (gaguges.isEmpty()) {
+ return Collections.emptyList();
+ }
+ ArrayList<Metric> metrics = new ArrayList<Metric>();
+ for (Gauge gauge : gaguges) {
+ metrics.add(gauge.getMetric(clock));
+ }
+ return metrics;
}
- return metrics;
}
- private synchronized void registerGauge(Gauge gauge) {
- Set<Gauge> newGaguesList = new LinkedHashSet<Gauge>(registeredGauges);
- newGaguesList.add(gauge);
- registeredGauges = Collections.unmodifiableSet(newGaguesList);
+ MetricProducer getMetricProducer() {
+ return metricProducer;
}
}
diff --git a/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricsComponentImplBase.java b/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricsComponentImplBase.java
index 46ad028c..1aef6727 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricsComponentImplBase.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/metrics/MetricsComponentImplBase.java
@@ -18,7 +18,6 @@ package io.opencensus.implcore.metrics;
import io.opencensus.common.Clock;
import io.opencensus.implcore.metrics.export.ExportComponentImpl;
-import io.opencensus.metrics.MetricRegistry;
import io.opencensus.metrics.MetricsComponent;
/** Implementation of {@link MetricsComponent}. */
@@ -33,12 +32,14 @@ public class MetricsComponentImplBase extends MetricsComponent {
}
@Override
- public MetricRegistry getMetricRegistry() {
+ public MetricRegistryImpl getMetricRegistry() {
return metricRegistry;
}
protected MetricsComponentImplBase(Clock clock) {
exportComponent = new ExportComponentImpl();
metricRegistry = new MetricRegistryImpl(clock);
+ // Register the MetricRegistry's MetricProducer to the global MetricProducerManager.
+ exportComponent.getMetricProducerManager().add(metricRegistry.getMetricProducer());
}
}
diff --git a/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricRegistryImplTest.java b/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricRegistryImplTest.java
index 769efab2..0b75a6e0 100644
--- a/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricRegistryImplTest.java
+++ b/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricRegistryImplTest.java
@@ -149,7 +149,7 @@ public class MetricRegistryImplTest {
return 5.0;
}
});
- assertThat(metricRegistry.getMetrics())
+ assertThat(metricRegistry.getMetricProducer().getMetrics())
.containsExactly(
Metric.create(
MetricDescriptor.create(
@@ -253,7 +253,7 @@ public class MetricRegistryImplTest {
return 7;
}
});
- assertThat(metricRegistry.getMetrics())
+ assertThat(metricRegistry.getMetricProducer().getMetrics())
.containsExactly(
Metric.create(
MetricDescriptor.create(
@@ -295,7 +295,7 @@ public class MetricRegistryImplTest {
return 5.0;
}
});
- assertThat(metricRegistry.getMetrics())
+ assertThat(metricRegistry.getMetricProducer().getMetrics())
.containsExactly(
Metric.create(
MetricDescriptor.create(
@@ -325,6 +325,6 @@ public class MetricRegistryImplTest {
@Test
public void empty_GetMetrics() {
- assertThat(metricRegistry.getMetrics()).isEmpty();
+ assertThat(metricRegistry.getMetricProducer().getMetrics()).isEmpty();
}
}
diff --git a/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricsComponentImplBaseTest.java b/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricsComponentImplBaseTest.java
index 5050625b..7f8515d3 100644
--- a/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricsComponentImplBaseTest.java
+++ b/impl_core/src/test/java/io/opencensus/implcore/metrics/MetricsComponentImplBaseTest.java
@@ -40,4 +40,14 @@ public class MetricsComponentImplBaseTest {
public void getMetricRegistry() {
assertThat(metricsComponentImplBase.getMetricRegistry()).isInstanceOf(MetricRegistryImpl.class);
}
+
+ @Test
+ public void metricRegistry_InstalledToMetricProducerManger() {
+ assertThat(
+ metricsComponentImplBase
+ .getExportComponent()
+ .getMetricProducerManager()
+ .getAllMetricProducer())
+ .containsExactly(metricsComponentImplBase.getMetricRegistry().getMetricProducer());
+ }
}