aboutsummaryrefslogtreecommitdiff
path: root/impl_core/src
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 /impl_core/src
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.
Diffstat (limited to 'impl_core/src')
-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
4 files changed, 60 insertions, 25 deletions
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());
+ }
}