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

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

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

package io.opentelemetry.sdk.testing.exporter;

import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

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

Example usage: * *

{@code
 * // class MyClassTest {
 * //   private final InMemorySpanExporter testExporter = InMemorySpanExporter.create();
 * //   private final SdkTracerProvider tracerProvider = SdkTracerProvider
 * //     .builder()
 * //     .addSpanProcessor(SimpleSpanProcessor.create(testExporter))
 * //     .build();
 * //
 * //   @Test
 * //   public void getFinishedSpanData() {
 * //     Tracer tracer = tracerProvider.tracerBuilder("test-scope").build();
 * //     tracer.spanBuilder("span").startSpan().end();
 * //
 * //     List spanItems = testExporter.getFinishedSpanItems();
 * //     assertThat(spanItems).isNotNull();
 * //     assertThat(spanItems.size()).isEqualTo(1);
 * //     assertThat(spanItems.get(0).getName()).isEqualTo("span");
 * //   }
 * // }
 * }
*/ public final class InMemorySpanExporter implements SpanExporter { private final Queue finishedSpanItems = new ConcurrentLinkedQueue<>(); private boolean isStopped = false; /** * Returns a new instance of the {@code InMemorySpanExporter}. * * @return a new instance of the {@code InMemorySpanExporter}. */ public static InMemorySpanExporter create() { return new InMemorySpanExporter(); } /** * Returns a {@code List} of the finished {@code Span}s, represented by {@code SpanData}. * * @return a {@code List} of the finished {@code Span}s. */ public List getFinishedSpanItems() { return Collections.unmodifiableList(new ArrayList<>(finishedSpanItems)); } /** * Clears the internal {@code List} of finished {@code Span}s. * *

Does not reset the state of this exporter if already shutdown. */ public void reset() { finishedSpanItems.clear(); } @Override public CompletableResultCode export(Collection spans) { if (isStopped) { return CompletableResultCode.ofFailure(); } finishedSpanItems.addAll(spans); return CompletableResultCode.ofSuccess(); } /** * The InMemory exporter does not batch spans, so this method will immediately return with * success. * * @return always Success */ @Override public CompletableResultCode flush() { return CompletableResultCode.ofSuccess(); } /** * Clears the internal {@code List} of finished {@code SpanData}s. * *

Any subsequent call to export() function on this SpanExporter, will return {@code * CompletableResultCode.ofFailure()} */ @Override public CompletableResultCode shutdown() { finishedSpanItems.clear(); isStopped = true; return CompletableResultCode.ofSuccess(); } private InMemorySpanExporter() {} }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy