diff --git a/sdk/src/main/java/io/opentelemetry/sdk/internal/ComponentRegistry.java b/sdk/src/main/java/io/opentelemetry/sdk/internal/ComponentRegistry.java index 9096d14956..d61481f72f 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/internal/ComponentRegistry.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/internal/ComponentRegistry.java @@ -17,6 +17,9 @@ package io.opentelemetry.sdk.internal; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import javax.annotation.Nullable; @@ -38,7 +41,7 @@ public abstract class ComponentRegistry { * @param instrumentationName the name of the instrumentation library. * @return the registered value associated with this name and {@code null} version. */ - public V get(String instrumentationName) { + public final V get(String instrumentationName) { return get(instrumentationName, null); } @@ -50,7 +53,7 @@ public abstract class ComponentRegistry { * @param instrumentationVersion the version of the instrumentation library. * @return the registered value associated with this name and version. */ - public V get(String instrumentationName, @Nullable String instrumentationVersion) { + public final V get(String instrumentationName, @Nullable String instrumentationVersion) { InstrumentationLibraryInfo instrumentationLibraryInfo = InstrumentationLibraryInfo.create(instrumentationName, instrumentationVersion); @@ -64,5 +67,14 @@ public abstract class ComponentRegistry { return oldComponent != null ? oldComponent : newComponent; } + /** + * Returns a {@code Collection} view of the registered components. + * + * @return a {@code Collection} view of the registered components. + */ + public final Collection getComponents() { + return Collections.unmodifiableCollection(new ArrayList<>(registry.values())); + } + public abstract V newComponent(InstrumentationLibraryInfo instrumentationLibraryInfo); } diff --git a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrument.java b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrument.java index cd38f8ada7..673b34562f 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrument.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrument.java @@ -61,7 +61,7 @@ abstract class AbstractInstrument implements Instrument { return activeBatcher; } - abstract List collect(); + abstract List collectAll(); @Override public boolean equals(Object o) { diff --git a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrumentWithBinding.java b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrumentWithBinding.java index 8051b0a28b..45da779e6f 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrumentWithBinding.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractInstrumentWithBinding.java @@ -71,7 +71,7 @@ abstract class AbstractInstrumentWithBinding * call. */ @Override - final List collect() { + final List collectAll() { collectLock.lock(); try { Batcher batcher = getActiveBatcher(); diff --git a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractObserver.java b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractObserver.java index df660fa99c..1a3cd6aca6 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractObserver.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/metrics/AbstractObserver.java @@ -46,7 +46,7 @@ class AbstractObserver extends AbstractInstrument { } @Override - List collect() { + List collectAll() { // TODO: Implement this. return Collections.emptyList(); } diff --git a/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdk.java b/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdk.java index f06d4279cb..af582d4782 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdk.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdk.java @@ -19,6 +19,10 @@ package io.opentelemetry.sdk.metrics; import io.opentelemetry.metrics.LabelSet; import io.opentelemetry.metrics.Meter; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; +import io.opentelemetry.sdk.metrics.data.MetricData; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.Map; /** {@link MeterSdk} is SDK implementation of {@link Meter}. */ @@ -81,4 +85,14 @@ final class MeterSdk implements Meter { public LabelSetSdk createLabelSet(Map labels) { return LabelSetSdk.create(labels); } + + Collection collectAll() { + InstrumentRegistry instrumentRegistry = meterSharedState.getInstrumentRegistry(); + Collection instruments = instrumentRegistry.getInstruments(); + List result = new ArrayList<>(instruments.size()); + for (AbstractInstrument instrument : instruments) { + result.addAll(instrument.collectAll()); + } + return result; + } } diff --git a/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdkProvider.java b/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdkProvider.java index a63981182d..356013c653 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdkProvider.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/metrics/MeterSdkProvider.java @@ -22,8 +22,13 @@ import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.internal.ComponentRegistry; import io.opentelemetry.sdk.internal.MillisClock; +import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.resources.EnvVarResource; import io.opentelemetry.sdk.resources.Resource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import javax.annotation.Nonnull; /** @@ -50,6 +55,20 @@ public final class MeterSdkProvider implements MeterProvider { return registry.get(instrumentationName, instrumentationVersion); } + /** + * Collects all the metrics and returns a collection of collected {@link MetricData}. + * + * @return a collection of collected {@link MetricData}. + */ + public Collection collectAll() { + Collection meters = registry.getComponents(); + List result = new ArrayList<>(meters.size()); + for (MeterSdk meter : meters) { + result.addAll(meter.collectAll()); + } + return Collections.unmodifiableCollection(result); + } + /** * Returns a new {@link Builder} for {@link MeterSdkProvider}. * diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentBuilderTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentBuilderTest.java index 90ba41239e..51b6143184 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentBuilderTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentBuilderTest.java @@ -196,7 +196,7 @@ public class AbstractInstrumentBuilderTest { } @Override - List collect() { + List collectAll() { return Collections.emptyList(); } } diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentTest.java index 5ee3242ce8..b3aeb1068e 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/AbstractInstrumentTest.java @@ -68,7 +68,7 @@ public class AbstractInstrumentTest { } @Override - List collect() { + List collectAll() { return Collections.emptyList(); } } diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/BatchRecorderSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/BatchRecorderSdkTest.java index 14955357ef..6c22467253 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/BatchRecorderSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/BatchRecorderSdkTest.java @@ -74,7 +74,7 @@ public class BatchRecorderSdkTest { .put(doubleMeasure, 13.1d) .record(); - assertThat(doubleCounter.collect()) + assertThat(doubleCounter.collectAll()) .containsExactly( MetricData.create( Descriptor.create( @@ -88,7 +88,7 @@ public class BatchRecorderSdkTest { Collections.singletonList( DoublePoint.create( testClock.now(), testClock.now(), labelSet.getLabels(), 12.1d)))); - assertThat(longCounter.collect()) + assertThat(longCounter.collectAll()) .containsExactly( MetricData.create( Descriptor.create( diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleCounterSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleCounterSdkTest.java index 0afb3beb3f..d70f3b2f00 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleCounterSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleCounterSdkTest.java @@ -67,7 +67,7 @@ public class DoubleCounterSdkTest { .setMonotonic(true) .build(); assertThat(doubleCounter).isInstanceOf(DoubleCounterSdk.class); - List metricDataList = ((DoubleCounterSdk) doubleCounter).collect(); + List metricDataList = ((DoubleCounterSdk) doubleCounter).collectAll(); assertThat(metricDataList).hasSize(1); MetricData metricData = metricDataList.get(0); assertThat(metricData.getDescriptor()) @@ -88,7 +88,7 @@ public class DoubleCounterSdkTest { DoubleCounterSdk doubleCounter = testSdk.doubleCounterBuilder("testCounter").build(); testClock.advanceNanos(SECOND_NANOS); doubleCounter.add(12.1d, testSdk.createLabelSet()); - List metricDataList = doubleCounter.collect(); + List metricDataList = doubleCounter.collectAll(); assertThat(metricDataList).hasSize(1); MetricData metricData = metricDataList.get(0); assertThat(metricData.getResource()).isEqualTo(RESOURCE); @@ -123,7 +123,7 @@ public class DoubleCounterSdkTest { doubleCounter.add(111.1d, labelSet); long firstCollect = testClock.now(); - List metricDataList = doubleCounter.collect(); + List metricDataList = doubleCounter.collectAll(); assertThat(metricDataList).hasSize(1); MetricData metricData = metricDataList.get(0); assertThat(metricData.getPoints()).hasSize(2); @@ -138,7 +138,7 @@ public class DoubleCounterSdkTest { doubleCounter.add(11d, emptyLabelSet); long secondCollect = testClock.now(); - metricDataList = doubleCounter.collect(); + metricDataList = doubleCounter.collectAll(); assertThat(metricDataList).hasSize(1); metricData = metricDataList.get(0); assertThat(metricData.getPoints()).hasSize(2); @@ -169,7 +169,7 @@ public class DoubleCounterSdkTest { DoubleCounterSdk doubleCounter = testSdk.doubleCounterBuilder("testCounter").build(); BoundDoubleCounter boundCounter = doubleCounter.bind(testSdk.createLabelSet("K", "v")); try { - doubleCounter.collect(); + doubleCounter.collectAll(); BoundDoubleCounter duplicateBoundCounter = doubleCounter.bind(testSdk.createLabelSet("K", "v")); try { @@ -202,7 +202,7 @@ public class DoubleCounterSdkTest { } stressTestBuilder.build().run(); - List metricDataList = doubleCounter.collect(); + List metricDataList = doubleCounter.collectAll(); assertThat(metricDataList).hasSize(1); assertThat(metricDataList.get(0).getPoints()) .containsExactly( @@ -235,7 +235,7 @@ public class DoubleCounterSdkTest { } stressTestBuilder.build().run(); - List metricDataList = doubleCounter.collect(); + List metricDataList = doubleCounter.collectAll(); assertThat(metricDataList).hasSize(1); assertThat(metricDataList.get(0).getPoints()) .containsExactly( diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleMeasureSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleMeasureSdkTest.java index 84647ac868..557c871680 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleMeasureSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/DoubleMeasureSdkTest.java @@ -66,7 +66,7 @@ public class DoubleMeasureSdkTest { DoubleMeasureSdk doubleMeasure = testSdk.doubleMeasureBuilder("testMeasure").build(); BoundDoubleMeasure boundMeasure = doubleMeasure.bind(testSdk.createLabelSet("K", "v")); try { - doubleMeasure.collect(); + doubleMeasure.collectAll(); BoundDoubleMeasure duplicateBoundMeasure = doubleMeasure.bind(testSdk.createLabelSet("K", "v")); try { diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/InstrumentRegistryTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/InstrumentRegistryTest.java index 54f764351d..6331ce289a 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/InstrumentRegistryTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/InstrumentRegistryTest.java @@ -130,7 +130,7 @@ public class InstrumentRegistryTest { } @Override - List collect() { + List collectAll() { return Collections.emptyList(); } } @@ -145,7 +145,7 @@ public class InstrumentRegistryTest { } @Override - List collect() { + List collectAll() { return Collections.emptyList(); } } diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongCounterSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongCounterSdkTest.java index 14bf8f2d60..2e00f02177 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongCounterSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongCounterSdkTest.java @@ -68,7 +68,7 @@ public class LongCounterSdkTest { .setMonotonic(true) .build(); assertThat(longCounter).isInstanceOf(LongCounterSdk.class); - List metricDataList = ((LongCounterSdk) longCounter).collect(); + List metricDataList = ((LongCounterSdk) longCounter).collectAll(); assertThat(metricDataList).hasSize(1); MetricData metricData = metricDataList.get(0); assertThat(metricData.getDescriptor()) @@ -89,7 +89,7 @@ public class LongCounterSdkTest { LongCounterSdk longCounter = testSdk.longCounterBuilder("testCounter").build(); testClock.advanceNanos(SECOND_NANOS); longCounter.add(12, testSdk.createLabelSet()); - List metricDataList = longCounter.collect(); + List metricDataList = longCounter.collectAll(); assertThat(metricDataList).hasSize(1); MetricData metricData = metricDataList.get(0); assertThat(metricData.getResource()).isEqualTo(RESOURCE); @@ -124,7 +124,7 @@ public class LongCounterSdkTest { longCounter.add(111, labelSet); long firstCollect = testClock.now(); - List metricDataList = longCounter.collect(); + List metricDataList = longCounter.collectAll(); assertThat(metricDataList).hasSize(1); MetricData metricData = metricDataList.get(0); assertThat(metricData.getPoints()).hasSize(2); @@ -139,7 +139,7 @@ public class LongCounterSdkTest { longCounter.add(11, emptyLabelSet); long secondCollect = testClock.now(); - metricDataList = longCounter.collect(); + metricDataList = longCounter.collectAll(); assertThat(metricDataList).hasSize(1); metricData = metricDataList.get(0); assertThat(metricData.getPoints()).hasSize(2); @@ -171,7 +171,7 @@ public class LongCounterSdkTest { } stressTestBuilder.build().run(); - List metricDataList = longCounter.collect(); + List metricDataList = longCounter.collectAll(); assertThat(metricDataList).hasSize(1); assertThat(metricDataList.get(0).getPoints()) .containsExactly( @@ -202,7 +202,7 @@ public class LongCounterSdkTest { } stressTestBuilder.build().run(); - List metricDataList = longCounter.collect(); + List metricDataList = longCounter.collectAll(); assertThat(metricDataList).hasSize(1); assertThat(metricDataList.get(0).getPoints()) .containsExactly( @@ -246,7 +246,7 @@ public class LongCounterSdkTest { LongCounterSdk longCounter = testSdk.longCounterBuilder("testCounter").build(); BoundLongCounter boundCounter = longCounter.bind(testSdk.createLabelSet("K", "v")); try { - longCounter.collect(); + longCounter.collectAll(); BoundLongCounter duplicateBoundCounter = longCounter.bind(testSdk.createLabelSet("K", "v")); try { assertThat(duplicateBoundCounter).isEqualTo(boundCounter); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongMeasureSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongMeasureSdkTest.java index ff1b0f1be0..430eb011c6 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongMeasureSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/LongMeasureSdkTest.java @@ -66,7 +66,7 @@ public class LongMeasureSdkTest { LongMeasureSdk longMeasure = testSdk.longMeasureBuilder("testMeasure").build(); BoundLongMeasure boundMeasure = longMeasure.bind(testSdk.createLabelSet("K", "v")); try { - longMeasure.collect(); + longMeasure.collectAll(); BoundLongMeasure duplicateBoundMeasure = longMeasure.bind(testSdk.createLabelSet("K", "v")); try { assertThat(duplicateBoundMeasure).isEqualTo(boundMeasure); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkRegistryTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkRegistryTest.java index ac64e23626..9604ab98ed 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkRegistryTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkRegistryTest.java @@ -19,9 +19,17 @@ package io.opentelemetry.sdk.metrics; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; +import io.opentelemetry.metrics.LongCounter; import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; +import io.opentelemetry.sdk.internal.TestClock; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.data.MetricData.Descriptor; +import io.opentelemetry.sdk.metrics.data.MetricData.Descriptor.Type; +import io.opentelemetry.sdk.metrics.data.MetricData.LongPoint; +import io.opentelemetry.sdk.metrics.data.MetricData.Point; import io.opentelemetry.sdk.resources.Resource; +import java.util.Collections; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -33,7 +41,9 @@ import org.junit.runners.JUnit4; public class MeterSdkRegistryTest { @Rule public final ExpectedException thrown = ExpectedException.none(); - private final MeterSdkProvider meterRegistry = MeterSdkProvider.builder().build(); + private final TestClock testClock = TestClock.create(); + private final MeterSdkProvider meterRegistry = + MeterSdkProvider.builder().setClock(testClock).setResource(Resource.getEmpty()).build(); @Test public void builder_HappyPath() { @@ -83,4 +93,47 @@ public class MeterSdkRegistryTest { MeterSdk meter = meterRegistry.get(expected.getName(), expected.getVersion()); assertThat(meter.getInstrumentationLibraryInfo()).isEqualTo(expected); } + + @Test + public void collectAll() { + MeterSdk meterSdk1 = meterRegistry.get("io.opentelemetry.sdk.metrics.MeterSdkRegistryTest_1"); + LongCounter longCounter1 = meterSdk1.longCounterBuilder("testLongCounter").build(); + longCounter1.add(10, meterSdk1.createLabelSet()); + MeterSdk meterSdk2 = meterRegistry.get("io.opentelemetry.sdk.metrics.MeterSdkRegistryTest_2"); + LongCounter longCounter2 = meterSdk2.longCounterBuilder("testLongCounter").build(); + longCounter2.add(10, meterSdk2.createLabelSet()); + + assertThat(meterRegistry.collectAll()) + .containsExactly( + MetricData.create( + Descriptor.create( + "testLongCounter", + "", + "1", + Type.MONOTONIC_LONG, + Collections.emptyMap()), + Resource.getEmpty(), + meterSdk1.getInstrumentationLibraryInfo(), + Collections.singletonList( + LongPoint.create( + testClock.now(), + testClock.now(), + Collections.emptyMap(), + 10))), + MetricData.create( + Descriptor.create( + "testLongCounter", + "", + "1", + Type.MONOTONIC_LONG, + Collections.emptyMap()), + Resource.getEmpty(), + meterSdk2.getInstrumentationLibraryInfo(), + Collections.singletonList( + LongPoint.create( + testClock.now(), + testClock.now(), + Collections.emptyMap(), + 10)))); + } } diff --git a/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkTest.java index c14a44d80b..062aa3d6d6 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/metrics/MeterSdkTest.java @@ -26,6 +26,16 @@ import io.opentelemetry.metrics.DoubleObserver; import io.opentelemetry.metrics.LongCounter; import io.opentelemetry.metrics.LongMeasure; import io.opentelemetry.metrics.LongObserver; +import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; +import io.opentelemetry.sdk.internal.TestClock; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.data.MetricData.Descriptor; +import io.opentelemetry.sdk.metrics.data.MetricData.Descriptor.Type; +import io.opentelemetry.sdk.metrics.data.MetricData.DoublePoint; +import io.opentelemetry.sdk.metrics.data.MetricData.LongPoint; +import io.opentelemetry.sdk.metrics.data.MetricData.Point; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.trace.AttributeValue; import java.util.Collections; import org.junit.Rule; import org.junit.Test; @@ -36,8 +46,17 @@ import org.junit.runners.JUnit4; /** Unit tests for {@link MeterSdk}. */ @RunWith(JUnit4.class) public class MeterSdkTest { + private static final Resource RESOURCE = + Resource.create( + Collections.singletonMap( + "resource_key", AttributeValue.stringAttributeValue("resource_value"))); + private static final InstrumentationLibraryInfo INSTRUMENTATION_LIBRARY_INFO = + InstrumentationLibraryInfo.create("io.opentelemetry.sdk.metrics.MeterSdkTest", null); + private final TestClock testClock = TestClock.create(); + private final MeterProviderSharedState meterProviderSharedState = + MeterProviderSharedState.create(testClock, RESOURCE); private final MeterSdk testSdk = - MeterSdkProvider.builder().build().get("io.opentelemetry.sdk.metrics.MeterSdkTest"); + new MeterSdk(meterProviderSharedState, INSTRUMENTATION_LIBRARY_INFO); @Rule public final ExpectedException thrown = ExpectedException.none(); @@ -228,6 +247,53 @@ public class MeterSdkTest { assertThat(batchRecorder).isInstanceOf(BatchRecorderSdk.class); } + @Test + public void collectAll() { + LongCounter longCounter = testSdk.longCounterBuilder("testLongCounter").build(); + longCounter.add(10, testSdk.createLabelSet()); + LongMeasure longMeasure = testSdk.longMeasureBuilder("testLongMeasure").build(); + longMeasure.record(10, testSdk.createLabelSet()); + // LongObserver longObserver = testSdk.longObserverBuilder("testLongObserver").build(); + DoubleCounter doubleCounter = testSdk.doubleCounterBuilder("testDoubleCounter").build(); + doubleCounter.add(10.1, testSdk.createLabelSet()); + DoubleMeasure doubleMeasure = testSdk.doubleMeasureBuilder("testDoubleMeasure").build(); + doubleMeasure.record(10.1, testSdk.createLabelSet()); + // DoubleObserver doubleObserver = testSdk.doubleObserverBuilder("testDoubleObserver").build(); + + assertThat(testSdk.collectAll()) + .containsExactly( + MetricData.create( + Descriptor.create( + "testLongCounter", + "", + "1", + Type.MONOTONIC_LONG, + Collections.emptyMap()), + RESOURCE, + INSTRUMENTATION_LIBRARY_INFO, + Collections.singletonList( + LongPoint.create( + testClock.now(), + testClock.now(), + Collections.emptyMap(), + 10))), + MetricData.create( + Descriptor.create( + "testDoubleCounter", + "", + "1", + Type.MONOTONIC_DOUBLE, + Collections.emptyMap()), + RESOURCE, + INSTRUMENTATION_LIBRARY_INFO, + Collections.singletonList( + DoublePoint.create( + testClock.now(), + testClock.now(), + Collections.emptyMap(), + 10.1)))); + } + @Test public void testLabelSets() { assertThat(testSdk.createLabelSet()).isSameInstanceAs(testSdk.createLabelSet());