All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader Maven / Gradle / Ivy

/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package io.opentelemetry.sdk.testing.exporter;

import static io.opentelemetry.sdk.common.export.MemoryMode.IMMUTABLE_DATA;

import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.common.export.MemoryMode;
import io.opentelemetry.sdk.metrics.Aggregation;
import io.opentelemetry.sdk.metrics.InstrumentType;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.export.AggregationTemporalitySelector;
import io.opentelemetry.sdk.metrics.export.CollectionRegistration;
import io.opentelemetry.sdk.metrics.export.DefaultAggregationSelector;
import io.opentelemetry.sdk.metrics.export.MetricReader;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * A {@link MetricReader} implementation that can be used to test OpenTelemetry integration.
 *
 * 

Can be created using {@code InMemoryMetricReader.create()} * *

Example usage: * *


 * public class InMemoryMetricReaderExample {
 *   private final InMemoryMetricReader reader = InMemoryMetricReader.create();
 *   private final SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder().registerMetricReader(reader).build();
 *   private final Meter meter = sdkMeterProvider.get("example");
 *   private final LongCounter metricCallCount = meter.counterBuilder("num_collects");
 *
 *   public void printMetrics() {
 *     metricCallCount.add(1);
 *     System.out.println(reader.collectAllMetrics());
 *   }
 *
 *   public static void main(String[] args) {
 *     InMemoryMetricReaderExample example = new InMemoryMetricReaderExample();
 *     example.printMetrics();
 *   }
 * }
 * 
* * @since 1.14.0 */ public class InMemoryMetricReader implements MetricReader { private final AggregationTemporalitySelector aggregationTemporalitySelector; private final DefaultAggregationSelector defaultAggregationSelector; private final AtomicBoolean isShutdown = new AtomicBoolean(false); private volatile CollectionRegistration collectionRegistration = CollectionRegistration.noop(); private final MemoryMode memoryMode; /** * Creates an {@link InMemoryMetricReaderBuilder} with defaults. * * @return a builder with always-cumulative {@link AggregationTemporalitySelector}, default {@link * DefaultAggregationSelector} and {@link MemoryMode#IMMUTABLE_DATA} {@link MemoryMode} * @since 1.31.0 */ public static InMemoryMetricReaderBuilder builder() { return new InMemoryMetricReaderBuilder(); } /** Returns a new {@link InMemoryMetricReader}. */ public static InMemoryMetricReader create() { return new InMemoryMetricReader( AggregationTemporalitySelector.alwaysCumulative(), DefaultAggregationSelector.getDefault()); } /** * Returns a new {@link InMemoryMetricReader}. * * @since 1.26.0 */ public static InMemoryMetricReader create( AggregationTemporalitySelector aggregationTemporalitySelector, DefaultAggregationSelector defaultAggregationSelector) { return new InMemoryMetricReader(aggregationTemporalitySelector, defaultAggregationSelector); } /** Creates a new {@link InMemoryMetricReader} that prefers DELTA aggregation. */ public static InMemoryMetricReader createDelta() { return new InMemoryMetricReader( unused -> AggregationTemporality.DELTA, DefaultAggregationSelector.getDefault()); } private InMemoryMetricReader( AggregationTemporalitySelector aggregationTemporalitySelector, DefaultAggregationSelector defaultAggregationSelector) { this(aggregationTemporalitySelector, defaultAggregationSelector, IMMUTABLE_DATA); } InMemoryMetricReader( AggregationTemporalitySelector aggregationTemporalitySelector, DefaultAggregationSelector defaultAggregationSelector, MemoryMode memoryMode) { this.aggregationTemporalitySelector = aggregationTemporalitySelector; this.defaultAggregationSelector = defaultAggregationSelector; this.memoryMode = memoryMode; } /** Returns all metrics accumulated since the last call. */ public Collection collectAllMetrics() { if (isShutdown.get()) { return Collections.emptyList(); } return collectionRegistration.collectAllMetrics(); } @Override public void register(CollectionRegistration collectionRegistration) { this.collectionRegistration = collectionRegistration; } @Override public AggregationTemporality getAggregationTemporality(InstrumentType instrumentType) { return aggregationTemporalitySelector.getAggregationTemporality(instrumentType); } @Override public Aggregation getDefaultAggregation(InstrumentType instrumentType) { return defaultAggregationSelector.getDefaultAggregation(instrumentType); } @Override public CompletableResultCode forceFlush() { collectAllMetrics(); return CompletableResultCode.ofSuccess(); } @Override public CompletableResultCode shutdown() { isShutdown.set(true); return CompletableResultCode.ofSuccess(); } @Override public MemoryMode getMemoryMode() { return memoryMode; } @Override public String toString() { return "InMemoryMetricReader{}"; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy