diff options
author | Bogdan Drutu <bdrutu@google.com> | 2018-09-30 19:20:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-30 19:20:08 -0700 |
commit | fb41bec0a6618bef81f5dcc1f249a8ce530ebd3b (patch) | |
tree | 0a0ec0480ce39c7af08b40344483af46acbb863e /impl_core/src | |
parent | b9facf96de0e2d0c8b87712c26794c61d7c4d97c (diff) | |
download | opencensus-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')
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()); + } } |