From b734e366ec721d35eb72b549e739c20b81a3f7ea Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Wed, 17 Jun 2020 17:22:32 -0700 Subject: [PATCH] Change to use labels for async instruments (#1349) Signed-off-by: Bogdan Drutu --- .../metrics/AsynchronousInstrument.java | 5 ++-- .../metrics/runtime/GarbageCollector.java | 6 ++--- .../metrics/runtime/MemoryPools.java | 27 +++++++++---------- .../AbstractAsynchronousInstrument.java | 10 +++---- .../sdk/metrics/DoubleSumObserverSdkTest.java | 2 +- .../DoubleUpDownSumObserverSdkTest.java | 2 +- .../metrics/DoubleValueObserverSdkTest.java | 2 +- .../sdk/metrics/LongSumObserverSdkTest.java | 2 +- .../metrics/LongUpDownSumObserverSdkTest.java | 2 +- .../sdk/metrics/LongValueObserverSdkTest.java | 2 +- 10 files changed, 29 insertions(+), 31 deletions(-) diff --git a/api/src/main/java/io/opentelemetry/metrics/AsynchronousInstrument.java b/api/src/main/java/io/opentelemetry/metrics/AsynchronousInstrument.java index bc54e41418..41ec5ac127 100644 --- a/api/src/main/java/io/opentelemetry/metrics/AsynchronousInstrument.java +++ b/api/src/main/java/io/opentelemetry/metrics/AsynchronousInstrument.java @@ -16,6 +16,7 @@ package io.opentelemetry.metrics; +import io.opentelemetry.common.Labels; import io.opentelemetry.metrics.AsynchronousInstrument.Result; import javax.annotation.concurrent.ThreadSafe; @@ -63,11 +64,11 @@ public interface AsynchronousInstrument extends Instrument { /** The result for the {@link Callback}. */ interface LongResult extends Result { - void observe(long value, String... keyValueLabelPairs); + void observe(long value, Labels labels); } /** The result for the {@link Callback}. */ interface DoubleResult extends Result { - void observe(double value, String... keyValueLabelPairs); + void observe(double value, Labels labels); } } diff --git a/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/GarbageCollector.java b/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/GarbageCollector.java index cc280d0f03..87e1e71a3e 100644 --- a/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/GarbageCollector.java +++ b/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/GarbageCollector.java @@ -17,6 +17,7 @@ package io.opentelemetry.extensions.metrics.runtime; import io.opentelemetry.OpenTelemetry; +import io.opentelemetry.common.Labels; import io.opentelemetry.metrics.AsynchronousInstrument.Callback; import io.opentelemetry.metrics.AsynchronousInstrument.LongResult; import io.opentelemetry.metrics.LongSumObserver; @@ -61,10 +62,9 @@ public final class GarbageCollector { .setDescription("Time spent in a given JVM garbage collector in milliseconds.") .setUnit("ms") .build(); - final List labelSets = new ArrayList<>(garbageCollectors.size()); + final List labelSets = new ArrayList<>(garbageCollectors.size()); for (final GarbageCollectorMXBean gc : garbageCollectors) { - String[] label = {GC_LABEL_KEY, gc.getName()}; - labelSets.add(label); + labelSets.add(Labels.of(GC_LABEL_KEY, gc.getName())); } gcMetric.setCallback( diff --git a/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/MemoryPools.java b/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/MemoryPools.java index 589f6eb7ef..c5981a2d84 100644 --- a/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/MemoryPools.java +++ b/extensions/runtime_metrics/src/main/java/io/opentelemetry/extensions/metrics/runtime/MemoryPools.java @@ -17,6 +17,7 @@ package io.opentelemetry.extensions.metrics.runtime; import io.opentelemetry.OpenTelemetry; +import io.opentelemetry.common.Labels; import io.opentelemetry.metrics.AsynchronousInstrument.Callback; import io.opentelemetry.metrics.AsynchronousInstrument.LongResult; import io.opentelemetry.metrics.LongSumObserver; @@ -75,14 +76,13 @@ public final class MemoryPools { .setDescription("Bytes of a given JVM memory area.") .setUnit("By") .build(); - final String[] usedHeap = new String[] {TYPE_LABEL_KEY, USED, AREA_LABEL_KEY, HEAP}; - final String[] usedNonHeap = new String[] {TYPE_LABEL_KEY, USED, AREA_LABEL_KEY, NON_HEAP}; - final String[] committedHeap = new String[] {TYPE_LABEL_KEY, COMMITTED, AREA_LABEL_KEY, HEAP}; - final String[] committedNonHeap = - new String[] {TYPE_LABEL_KEY, COMMITTED, AREA_LABEL_KEY, NON_HEAP}; + final Labels usedHeap = Labels.of(TYPE_LABEL_KEY, USED, AREA_LABEL_KEY, HEAP); + final Labels usedNonHeap = Labels.of(TYPE_LABEL_KEY, USED, AREA_LABEL_KEY, NON_HEAP); + final Labels committedHeap = Labels.of(TYPE_LABEL_KEY, COMMITTED, AREA_LABEL_KEY, HEAP); + final Labels committedNonHeap = Labels.of(TYPE_LABEL_KEY, COMMITTED, AREA_LABEL_KEY, NON_HEAP); // TODO: Decide if max is needed or not. May be derived with some approximation from max(used). - final String[] maxHeap = new String[] {TYPE_LABEL_KEY, MAX, AREA_LABEL_KEY, HEAP}; - final String[] maxNonHeap = new String[] {TYPE_LABEL_KEY, MAX, AREA_LABEL_KEY, NON_HEAP}; + final Labels maxHeap = Labels.of(TYPE_LABEL_KEY, MAX, AREA_LABEL_KEY, HEAP); + final Labels maxNonHeap = Labels.of(TYPE_LABEL_KEY, MAX, AREA_LABEL_KEY, NON_HEAP); areaMetric.setCallback( new LongSumObserver.Callback() { @Override @@ -107,14 +107,13 @@ public final class MemoryPools { .setDescription("Bytes of a given JVM memory pool.") .setUnit("By") .build(); - final List usedLabelSets = new ArrayList<>(poolBeans.size()); - final List committedLabelSets = new ArrayList<>(poolBeans.size()); - final List maxLabelSets = new ArrayList<>(poolBeans.size()); + final List usedLabelSets = new ArrayList<>(poolBeans.size()); + final List committedLabelSets = new ArrayList<>(poolBeans.size()); + final List maxLabelSets = new ArrayList<>(poolBeans.size()); for (final MemoryPoolMXBean pool : poolBeans) { - usedLabelSets.add(new String[] {TYPE_LABEL_KEY, USED, POOL_LABEL_KEY, pool.getName()}); - committedLabelSets.add( - new String[] {TYPE_LABEL_KEY, COMMITTED, POOL_LABEL_KEY, pool.getName()}); - maxLabelSets.add(new String[] {TYPE_LABEL_KEY, MAX, POOL_LABEL_KEY, pool.getName()}); + usedLabelSets.add(Labels.of(TYPE_LABEL_KEY, USED, POOL_LABEL_KEY, pool.getName())); + committedLabelSets.add(Labels.of(TYPE_LABEL_KEY, COMMITTED, POOL_LABEL_KEY, pool.getName())); + maxLabelSets.add(Labels.of(TYPE_LABEL_KEY, MAX, POOL_LABEL_KEY, pool.getName())); } poolMetric.setCallback( new Callback() { diff --git a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractAsynchronousInstrument.java b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractAsynchronousInstrument.java index 6bd3de7d24..5da0aa354d 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractAsynchronousInstrument.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractAsynchronousInstrument.java @@ -96,11 +96,10 @@ abstract class AbstractAsynchronousInstrument() { @Override public void update(DoubleResult result) { - result.observe(12.1d, "k", "v"); + result.observe(12.1d, Labels.of("k", "v")); } }); testClock.advanceNanos(SECOND_NANOS); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleUpDownSumObserverSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleUpDownSumObserverSdkTest.java index 08ef28f80e..6e26a64e70 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleUpDownSumObserverSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleUpDownSumObserverSdkTest.java @@ -106,7 +106,7 @@ public class DoubleUpDownSumObserverSdkTest { new Callback() { @Override public void update(DoubleResult result) { - result.observe(12.1d, "k", "v"); + result.observe(12.1d, Labels.of("k", "v")); } }); testClock.advanceNanos(SECOND_NANOS); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleValueObserverSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleValueObserverSdkTest.java index 7881df9453..f02f1dd30f 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleValueObserverSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleValueObserverSdkTest.java @@ -109,7 +109,7 @@ public class DoubleValueObserverSdkTest { new Callback() { @Override public void update(DoubleResult result) { - result.observe(12.1d, "k", "v"); + result.observe(12.1d, Labels.of("k", "v")); } }); testClock.advanceNanos(SECOND_NANOS); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongSumObserverSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongSumObserverSdkTest.java index 46714caefb..c6d301570b 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongSumObserverSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongSumObserverSdkTest.java @@ -105,7 +105,7 @@ public class LongSumObserverSdkTest { new Callback() { @Override public void update(LongResult result) { - result.observe(12, "k", "v"); + result.observe(12, Labels.of("k", "v")); } }); testClock.advanceNanos(SECOND_NANOS); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongUpDownSumObserverSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongUpDownSumObserverSdkTest.java index 8c0ce5ffc8..4fc3bce6e1 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongUpDownSumObserverSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongUpDownSumObserverSdkTest.java @@ -106,7 +106,7 @@ public class LongUpDownSumObserverSdkTest { new Callback() { @Override public void update(LongResult result) { - result.observe(12, "k", "v"); + result.observe(12, Labels.of("k", "v")); } }); testClock.advanceNanos(SECOND_NANOS); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongValueObserverSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongValueObserverSdkTest.java index 066d105d7a..2c95b6a63f 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongValueObserverSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongValueObserverSdkTest.java @@ -109,7 +109,7 @@ public class LongValueObserverSdkTest { new Callback() { @Override public void update(LongResult result) { - result.observe(12, "k", "v"); + result.observe(12, Labels.of("k", "v")); } }); testClock.advanceNanos(SECOND_NANOS);