aboutsummaryrefslogtreecommitdiff
path: root/impl_core/src/main/java/io/opencensus/implcore/metrics/export
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 /impl_core/src/main/java/io/opencensus/implcore/metrics/export
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 'impl_core/src/main/java/io/opencensus/implcore/metrics/export')
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/metrics/export/ExportComponentImpl.java31
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/metrics/export/MetricProducerManagerImpl.java64
2 files changed, 95 insertions, 0 deletions
diff --git a/impl_core/src/main/java/io/opencensus/implcore/metrics/export/ExportComponentImpl.java b/impl_core/src/main/java/io/opencensus/implcore/metrics/export/ExportComponentImpl.java
new file mode 100644
index 00000000..173c3aec
--- /dev/null
+++ b/impl_core/src/main/java/io/opencensus/implcore/metrics/export/ExportComponentImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2018, OpenCensus Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.opencensus.implcore.metrics.export;
+
+import io.opencensus.metrics.export.ExportComponent;
+import io.opencensus.metrics.export.MetricProducerManager;
+
+/** Implementation of {@link ExportComponent}. */
+public final class ExportComponentImpl extends ExportComponent {
+
+ private final MetricProducerManager metricProducerManager = new MetricProducerManagerImpl();
+
+ @Override
+ public MetricProducerManager getMetricProducerManager() {
+ return metricProducerManager;
+ }
+}
diff --git a/impl_core/src/main/java/io/opencensus/implcore/metrics/export/MetricProducerManagerImpl.java b/impl_core/src/main/java/io/opencensus/implcore/metrics/export/MetricProducerManagerImpl.java
new file mode 100644
index 00000000..fc9db5c1
--- /dev/null
+++ b/impl_core/src/main/java/io/opencensus/implcore/metrics/export/MetricProducerManagerImpl.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2018, OpenCensus Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.opencensus.implcore.metrics.export;
+
+import com.google.common.base.Preconditions;
+import io.opencensus.metrics.MetricProducer;
+import io.opencensus.metrics.export.MetricProducerManager;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import javax.annotation.concurrent.ThreadSafe;
+
+/** Implementation of {@link MetricProducerManager}. */
+@ThreadSafe
+public final class MetricProducerManagerImpl extends MetricProducerManager {
+
+ private volatile Set<MetricProducer> metricProducers =
+ Collections.unmodifiableSet(new LinkedHashSet<MetricProducer>());
+
+ @Override
+ public synchronized void add(MetricProducer metricProducer) {
+ Preconditions.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);
+ }
+
+ @Override
+ public synchronized void remove(MetricProducer metricProducer) {
+ Preconditions.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);
+ }
+
+ @Override
+ public Set<MetricProducer> getAllMetricProducer() {
+ return metricProducers;
+ }
+}