aboutsummaryrefslogtreecommitdiff
path: root/api/src/main/java/io/opencensus
diff options
context:
space:
mode:
authorYang Song <songy23@users.noreply.github.com>2018-08-13 11:36:27 -0700
committerGitHub <noreply@github.com>2018-08-13 11:36:27 -0700
commit775816d699bd4f02788db5609a87386940e34aff (patch)
tree021d47fb4c67d0441a5861a9e4a69b8d168e572d /api/src/main/java/io/opencensus
parent66ae2eed952579e6982b05c0bcebe0670afb0afe (diff)
downloadopencensus-java-775816d699bd4f02788db5609a87386940e34aff.tar.gz
Metrics: Implement ExportComponent, make ProducerManager abstract. (#1347)
* Metrics: Implement ExportComponent, make ProducerManager abstract. * Metrics: Add impl and impllite. * Resolve two TODOs. * Fix import path, leave a TODO for getMetricRegistry. * Make NoopMetricProducerManager private. Add missing since tag.
Diffstat (limited to 'api/src/main/java/io/opencensus')
-rw-r--r--api/src/main/java/io/opencensus/common/ToDoubleFunction.java4
-rw-r--r--api/src/main/java/io/opencensus/common/ToLongFunction.java4
-rw-r--r--api/src/main/java/io/opencensus/metrics/export/ExportComponent.java2
-rw-r--r--api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java62
4 files changed, 34 insertions, 38 deletions
diff --git a/api/src/main/java/io/opencensus/common/ToDoubleFunction.java b/api/src/main/java/io/opencensus/common/ToDoubleFunction.java
index 479270f1..eac85793 100644
--- a/api/src/main/java/io/opencensus/common/ToDoubleFunction.java
+++ b/api/src/main/java/io/opencensus/common/ToDoubleFunction.java
@@ -16,10 +16,8 @@
package io.opencensus.common;
-// TODO(bdrutu): Change @code to @link when metrics is moved in the API.
-
/**
- * Represents a function that produces a double-valued result. See {@code
+ * Represents a function that produces a double-valued result. See {@link
* io.opencensus.metrics.MetricRegistry} for an example of its use.
*
* <p>Note: This class is based on the java.util.ToDoubleFunction class added in Java 1.8. We cannot
diff --git a/api/src/main/java/io/opencensus/common/ToLongFunction.java b/api/src/main/java/io/opencensus/common/ToLongFunction.java
index 9a6e9b19..26a27b18 100644
--- a/api/src/main/java/io/opencensus/common/ToLongFunction.java
+++ b/api/src/main/java/io/opencensus/common/ToLongFunction.java
@@ -16,10 +16,8 @@
package io.opencensus.common;
-// TODO(bdrutu): Change @code to @link when metrics is moved in the API.
-
/**
- * Represents a function that produces a long-valued result. See {@code
+ * Represents a function that produces a long-valued result. See {@link
* io.opencensus.metrics.MetricRegistry} for an example of its use.
*
* <p>Note: This class is based on the java.util.ToLongFunction class added in Java 1.8. We cannot
diff --git a/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java b/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java
index f1511543..bab65d13 100644
--- a/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java
+++ b/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java
@@ -50,7 +50,7 @@ public abstract class ExportComponent {
private static final class NoopExportComponent extends ExportComponent {
private static final MetricProducerManager METRIC_PRODUCER_MANAGER =
- new MetricProducerManager();
+ MetricProducerManager.newNoopMetricProducerManager();
@Override
public MetricProducerManager getMetricProducerManager() {
diff --git a/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java b/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java
index 9600a023..c5acf174 100644
--- a/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java
+++ b/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java
@@ -20,7 +20,6 @@ import io.opencensus.common.ExperimentalApi;
import io.opencensus.internal.Utils;
import io.opencensus.metrics.MetricProducer;
import java.util.Collections;
-import java.util.LinkedHashSet;
import java.util.Set;
import javax.annotation.concurrent.ThreadSafe;
@@ -32,9 +31,7 @@ import javax.annotation.concurrent.ThreadSafe;
*/
@ExperimentalApi
@ThreadSafe
-public final class MetricProducerManager {
- private volatile Set<MetricProducer> metricProducers =
- Collections.unmodifiableSet(new LinkedHashSet<MetricProducer>());
+public abstract class MetricProducerManager {
/**
* Adds the {@link MetricProducer} to the manager if it is not already present.
@@ -42,34 +39,15 @@ public final class MetricProducerManager {
* @param metricProducer the {@code MetricProducer} to be added to the manager.
* @since 0.16
*/
- public synchronized void add(MetricProducer metricProducer) {
- Utils.checkNotNull(metricProducer, "metricProducer");
- // Updating the set of MetricProducers happens under a lock to avoid multiple add or remove
- // operations to happen in the same time.
- Set<MetricProducer> newMetricProducers = new LinkedHashSet<MetricProducer>(metricProducers);
- if (!newMetricProducers.add(metricProducer)) {
- // The element already present, no need to update the current set of MetricProducers.
- return;
- }
- metricProducers = Collections.unmodifiableSet(newMetricProducers);
- }
+ public abstract void add(MetricProducer metricProducer);
/**
* Removes the {@link MetricProducer} to the manager if it is present.
*
* @param metricProducer the {@code MetricProducer} to be removed from the manager.
+ * @since 0.16
*/
- public synchronized void remove(MetricProducer metricProducer) {
- Utils.checkNotNull(metricProducer, "metricProducer");
- // Updating the set of MetricProducers happens under a lock to avoid multiple add or remove
- // operations to happen in the same time.
- Set<MetricProducer> newMetricProducers = new LinkedHashSet<MetricProducer>(metricProducers);
- if (!newMetricProducers.remove(metricProducer)) {
- // The element not present, no need to update the current set of MetricProducers.
- return;
- }
- metricProducers = Collections.unmodifiableSet(newMetricProducers);
- }
+ public abstract void remove(MetricProducer metricProducer);
/**
* Returns all registered {@link MetricProducer}s that should be exported.
@@ -78,12 +56,34 @@ public final class MetricProducerManager {
* {@code MetricProducer} registered with the {@code MetricProducerManager}.
*
* @return all registered {@code MetricProducer}s that should be exported.
+ * @since 0.16
*/
- public Set<MetricProducer> getAllMetricProducer() {
- return metricProducers;
+ public abstract Set<MetricProducer> getAllMetricProducer();
+
+ /**
+ * Returns a no-op implementation for {@link MetricProducerManager}.
+ *
+ * @return a no-op implementation for {@code MetricProducerManager}.
+ */
+ static MetricProducerManager newNoopMetricProducerManager() {
+ return new NoopMetricProducerManager();
}
- // Package protected to allow us to possibly change this to an abstract class in the future. This
- // ensures that nobody can create an instance of this class except ExportComponent.
- MetricProducerManager() {}
+ private static final class NoopMetricProducerManager extends MetricProducerManager {
+
+ @Override
+ public void add(MetricProducer metricProducer) {
+ Utils.checkNotNull(metricProducer, "metricProducer");
+ }
+
+ @Override
+ public void remove(MetricProducer metricProducer) {
+ Utils.checkNotNull(metricProducer, "metricProducer");
+ }
+
+ @Override
+ public Set<MetricProducer> getAllMetricProducer() {
+ return Collections.emptySet();
+ }
+ }
}