Skip to content

Commit

Permalink
Add compression for Jaeger and Zipkin to autoconfigure
Browse files Browse the repository at this point in the history
  • Loading branch information
Donnerbart committed Oct 4, 2022
1 parent 4feaa97 commit 5bbced4
Show file tree
Hide file tree
Showing 3 changed files with 261 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,11 @@ private static SpanExporter configureJaeger(
builder.setEndpoint(endpoint);
}

String compression = config.getString("otel.exporter.jaeger.compression");
if (compression != null) {
builder.setCompression(compression);
}

Duration timeout = config.getDuration("otel.exporter.jaeger.timeout");
if (timeout != null) {
builder.setTimeout(timeout);
Expand All @@ -192,6 +197,11 @@ private static SpanExporter configureZipkin(ConfigProperties config) {
builder.setEndpoint(endpoint);
}

String compression = config.getString("otel.exporter.zipkin.compression");
if (compression != null) {
builder.setCompression(compression);
}

Duration timeout = config.getDuration("otel.exporter.zipkin.timeout");
if (timeout != null) {
builder.setReadTimeout(timeout);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@

package io.opentelemetry.sdk.autoconfigure;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

import com.google.common.collect.ImmutableMap;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import java.util.Collections;
import org.junit.jupiter.api.Test;

public class MetricExporterConfigurationTest {
Expand All @@ -23,4 +27,68 @@ void configureOtlpMetricsUnsupportedProtocol() {
.isInstanceOf(ConfigurationException.class)
.hasMessageContaining("Unsupported OTLP metrics protocol: foo");
}

@Test
void configureOtlpMetricsCompressionNone() {
MetricExporter exporter =
MetricExporterConfiguration.configureOtlpMetrics(
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.metrics.compression", "none")));
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcMetricExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(false));
} finally {
exporter.shutdown();
}
}

@Test
void configureOtlpMetricsCompressionGzip() {
MetricExporter exporter =
MetricExporterConfiguration.configureOtlpMetrics(
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.metrics.compression", "gzip")));
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcMetricExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(true));
} finally {
exporter.shutdown();
}
}

@Test
void configureOtlpGlobalCompressionNone() {
MetricExporter exporter =
MetricExporterConfiguration.configureOtlpMetrics(
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.compression", "none")));
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcMetricExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(false));
} finally {
exporter.shutdown();
}
}

@Test
void configureOtlpGlobalCompressionGzip() {
MetricExporter exporter =
MetricExporterConfiguration.configureOtlpMetrics(
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.compression", "gzip")));
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcMetricExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(true));
} finally {
exporter.shutdown();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import java.util.Collections;
Expand All @@ -31,6 +32,82 @@ void configureOtlpSpansUnsupportedProtocol() {
.hasMessageContaining("Unsupported OTLP traces protocol: foo");
}

@Test
void configureOtlpTracesCompressionNone() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"otlp",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.traces.compression", "none")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcSpanExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(false));
} finally {
exporter.shutdown();
}
}

@Test
void configureOtlpTracesCompressionGzip() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"otlp",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.traces.compression", "gzip")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcSpanExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(true));
} finally {
exporter.shutdown();
}
}

@Test
void configureOtlpGlobalCompressionNone() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"otlp",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.compression", "none")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcSpanExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(false));
} finally {
exporter.shutdown();
}
}

@Test
void configureOtlpGlobalCompressionGzip() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"otlp",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.otlp.compression", "gzip")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
OtlpGrpcSpanExporter.class,
otlp -> assertThat(otlp).extracting("delegate.compressionEnabled").isEqualTo(true));
} finally {
exporter.shutdown();
}
}

// Timeout difficult to test using real exports so just check implementation detail here.
@Test
void configureOtlpTimeout() {
Expand All @@ -52,6 +129,46 @@ void configureOtlpTimeout() {
}
}

@Test
void configureJaegerCompressionNone() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"jaeger",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.jaeger.compression", "none")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
JaegerGrpcSpanExporter.class,
jaeger ->
assertThat(jaeger).extracting("delegate.compressionEnabled").isEqualTo(false));
} finally {
exporter.shutdown();
}
}

@Test
void configureJaegerCompressionGzip() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"jaeger",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.jaeger.compression", "gzip")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
JaegerGrpcSpanExporter.class,
jaeger ->
assertThat(jaeger).extracting("delegate.compressionEnabled").isEqualTo(true));
} finally {
exporter.shutdown();
}
}

// Timeout difficult to test using real exports so just check implementation detail here.
@Test
void configureJaegerTimeout() {
Expand All @@ -73,18 +190,82 @@ void configureJaegerTimeout() {
}
}

@Test
void configureZipkinCompressionNone() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"zipkin",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.zipkin.compression", "none")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
ZipkinSpanExporter.class,
zipkin ->
assertThat(zipkin).extracting("sender.compressionEnabled").isEqualTo(false));
} finally {
exporter.shutdown();
}
}

@Test
void configureZipkinCompressionGzip() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"zipkin",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.zipkin.compression", "gzip")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
ZipkinSpanExporter.class,
zipkin -> assertThat(zipkin).extracting("sender.compressionEnabled").isEqualTo(true));
} finally {
exporter.shutdown();
}
}

// Timeout difficult to test using real exports so just check that things don't blow up.
@Test
void configureZipkinTimeout() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"zipkin",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.zipkin.timeout", "5s")),
Collections.singletonMap("otel.exporter.zipkin.timeout", "2500")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter).isNotNull();
assertThat(exporter)
.isInstanceOfSatisfying(
ZipkinSpanExporter.class,
zipkin ->
assertThat(zipkin).extracting("sender.client.readTimeoutMillis").isEqualTo(2500));
} finally {
exporter.shutdown();
}
}

// Timeout difficult to test using real exports so just check that things don't blow up.
@Test
void configureZipkinTimeoutWithUnit() {
SpanExporter exporter =
SpanExporterConfiguration.configureExporter(
"zipkin",
DefaultConfigProperties.createForTest(
Collections.singletonMap("otel.exporter.zipkin.timeout", "3s")),
NamedSpiManager.createEmpty(),
MeterProvider.noop());
try {
assertThat(exporter)
.isInstanceOfSatisfying(
ZipkinSpanExporter.class,
zipkin ->
assertThat(zipkin).extracting("sender.client.readTimeoutMillis").isEqualTo(3000));
} finally {
exporter.shutdown();
}
Expand Down

0 comments on commit 5bbced4

Please sign in to comment.