org.apache.rocketmq.shaded.io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter Maven / Gradle / Ivy
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package org.apache.rocketmq.shaded.io.opentelemetry.exporter.otlp.metrics;
import org.apache.rocketmq.shaded.io.opentelemetry.exporter.internal.grpc.GrpcExporter;
import org.apache.rocketmq.shaded.io.opentelemetry.exporter.internal.otlp.metrics.MetricsRequestMarshaler;
import org.apache.rocketmq.shaded.io.opentelemetry.sdk.common.CompletableResultCode;
import org.apache.rocketmq.shaded.io.opentelemetry.sdk.metrics.InstrumentType;
import org.apache.rocketmq.shaded.io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import org.apache.rocketmq.shaded.io.opentelemetry.sdk.metrics.data.MetricData;
import org.apache.rocketmq.shaded.io.opentelemetry.sdk.metrics.export.AggregationTemporalitySelector;
import org.apache.rocketmq.shaded.io.opentelemetry.sdk.metrics.export.MetricExporter;
import java.util.Collection;
import javax.annotation.concurrent.ThreadSafe;
/** Exports metrics using OTLP via gRPC, using OpenTelemetry's protobuf model. */
@ThreadSafe
public final class OtlpGrpcMetricExporter implements MetricExporter {
private final GrpcExporter delegate;
private final AggregationTemporalitySelector aggregationTemporalitySelector;
/**
* Returns a new {@link OtlpGrpcMetricExporter} reading the configuration values from the
* environment and from system properties. System properties override values defined in the
* environment. If a configuration value is missing, it uses the default value.
*
* @return a new {@link OtlpGrpcMetricExporter} instance.
*/
public static OtlpGrpcMetricExporter getDefault() {
return builder().build();
}
/**
* Returns a new builder instance for this exporter.
*
* @return a new builder instance for this exporter.
*/
public static OtlpGrpcMetricExporterBuilder builder() {
return new OtlpGrpcMetricExporterBuilder();
}
OtlpGrpcMetricExporter(
GrpcExporter delegate,
AggregationTemporalitySelector aggregationTemporalitySelector) {
this.delegate = delegate;
this.aggregationTemporalitySelector = aggregationTemporalitySelector;
}
@Override
public AggregationTemporality getAggregationTemporality(InstrumentType instrumentType) {
return aggregationTemporalitySelector.getAggregationTemporality(instrumentType);
}
/**
* Submits all the given metrics in a single batch to the OpenTelemetry collector.
*
* @param metrics the list of Metrics to be exported.
* @return the result of the operation
*/
@Override
public CompletableResultCode export(Collection metrics) {
MetricsRequestMarshaler request = MetricsRequestMarshaler.create(metrics);
return delegate.export(request, metrics.size());
}
/**
* The OTLP exporter does not batch metrics, so this method will immediately return with success.
*
* @return always Success
*/
@Override
public CompletableResultCode flush() {
return CompletableResultCode.ofSuccess();
}
/**
* Initiates an orderly shutdown in which preexisting calls continue but new calls are immediately
* cancelled. The channel is forcefully closed after a timeout.
*/
@Override
public CompletableResultCode shutdown() {
return delegate.shutdown();
}
}