Skip to content

Commit

Permalink
Merge pull request #32050 from radcortez/otel-config
Browse files Browse the repository at this point in the history
Move OTel configuration to use @ConfigMapping
  • Loading branch information
radcortez committed Mar 28, 2023
2 parents 515ce74 + e1bfacc commit 25292fd
Show file tree
Hide file tree
Showing 36 changed files with 552 additions and 442 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import java.util.function.BooleanSupplier;

import io.quarkus.opentelemetry.runtime.config.build.OtelBuildConfig;
import io.quarkus.opentelemetry.runtime.config.build.OTelBuildConfig;

public class OpenTelemetryEnabled implements BooleanSupplier {
OtelBuildConfig otelConfig;
OTelBuildConfig otelConfig;

public boolean getAsBoolean() {
return otelConfig.enabled;
return otelConfig.enabled();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.LaunchModeBuildItem;
import io.quarkus.opentelemetry.runtime.config.build.OtelBuildConfig;
import io.quarkus.opentelemetry.runtime.config.build.OTelBuildConfig;
import io.quarkus.opentelemetry.runtime.config.build.exporter.OtlpExporterBuildConfig;
import io.quarkus.opentelemetry.runtime.config.runtime.OtelRuntimeConfig;
import io.quarkus.opentelemetry.runtime.config.runtime.OTelRuntimeConfig;
import io.quarkus.opentelemetry.runtime.config.runtime.exporter.OtlpExporterRuntimeConfig;
import io.quarkus.opentelemetry.runtime.exporter.otlp.OtlpExporterProvider;
import io.quarkus.opentelemetry.runtime.exporter.otlp.OtlpRecorder;
Expand All @@ -23,13 +23,13 @@ public class OtlpExporterProcessor {

static class OtlpExporterEnabled implements BooleanSupplier {
OtlpExporterBuildConfig exportBuildConfig;
OtelBuildConfig otelBuildConfig;
OTelBuildConfig otelBuildConfig;

public boolean getAsBoolean() {
return otelBuildConfig.enabled &&
otelBuildConfig.traces.enabled.orElse(Boolean.TRUE) &&
otelBuildConfig.traces.exporter.contains(CDI_VALUE) &&
exportBuildConfig.enabled;
return otelBuildConfig.enabled() &&
otelBuildConfig.traces().enabled().orElse(Boolean.TRUE) &&
otelBuildConfig.traces().exporter().contains(CDI_VALUE) &&
exportBuildConfig.enabled();
}
}

Expand All @@ -45,7 +45,7 @@ AdditionalBeanBuildItem createBatchSpanProcessor() {
void installBatchSpanProcessorForOtlp(
OtlpRecorder recorder,
LaunchModeBuildItem launchModeBuildItem,
OtelRuntimeConfig otelRuntimeConfig,
OTelRuntimeConfig otelRuntimeConfig,
OtlpExporterRuntimeConfig exporterRuntimeConfig,
BeanContainerBuildItem beanContainerBuildItem) {
recorder.installBatchSpanProcessorForOtlp(otelRuntimeConfig,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
import java.util.function.BooleanSupplier;
import java.util.function.Function;

import io.quarkus.opentelemetry.runtime.config.build.OtelBuildConfig;
import io.quarkus.opentelemetry.runtime.config.build.OTelBuildConfig;

public class TracerEnabled implements BooleanSupplier {
OtelBuildConfig otelConfig;
OTelBuildConfig otelConfig;

public boolean getAsBoolean() {
return otelConfig.traces.enabled.map(new Function<Boolean, Boolean>() {
return otelConfig.traces().enabled().map(new Function<Boolean, Boolean>() {
@Override
public Boolean apply(Boolean tracerEnabled) {
return otelConfig.enabled && tracerEnabled;
return otelConfig.enabled() && tracerEnabled;
}
})
.orElseGet(() -> otelConfig.enabled);
.orElseGet(() -> otelConfig.enabled());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package io.quarkus.opentelemetry.deployment;

import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;

import jakarta.inject.Inject;

import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.opentelemetry.deployment.common.TestSpanExporter;
import io.quarkus.opentelemetry.deployment.common.TestSpanExporterProvider;
import io.quarkus.opentelemetry.deployment.common.TracerRouter;
import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

public class NonAppEndpointsEnabledLegacyConfigurationTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClass(TracerRouter.class)
.addClasses(TestSpanExporter.class, TestSpanExporterProvider.class)
.addAsResource(new StringAsset(TestSpanExporterProvider.class.getCanonicalName()),
"META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider"))
.withConfigurationResource("application-default.properties")
.overrideConfigKey("quarkus.opentelemetry.tracer.suppress-non-application-uris", "false");

@Inject
TestSpanExporter testSpanExporter;

@Test
void testHealthEndpointNotTraced() throws InterruptedException {
RestAssured.when().get("/q/health").then()
.statusCode(200)
.body(containsString("\"status\": \"UP\""));

RestAssured.when().get("/q/health/live").then()
.statusCode(200)
.body(containsString("\"status\": \"UP\""));

RestAssured.when().get("/q/health/ready").then()
.statusCode(200)
.body(containsString("\"status\": \"UP\""));

RestAssured.when().get("/tracer").then()
.statusCode(200)
.body(is("Hello Tracer!"));

testSpanExporter.assertSpanCount(5);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package io.quarkus.opentelemetry.deployment;

import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import jakarta.inject.Inject;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.opentelemetry.runtime.config.build.OTelBuildConfig;
import io.quarkus.opentelemetry.runtime.config.build.exporter.OtlpExporterBuildConfig;
import io.quarkus.opentelemetry.runtime.config.runtime.OTelRuntimeConfig;
import io.quarkus.opentelemetry.runtime.config.runtime.exporter.OtlpExporterRuntimeConfig;
import io.quarkus.test.QuarkusUnitTest;

class OpenTelemetryLegacyConfigurationTest {
@RegisterExtension
static final QuarkusUnitTest TEST = new QuarkusUnitTest()
.overrideConfigKey("quarkus.opentelemetry.enabled", "false")
.overrideConfigKey("quarkus.opentelemetry.tracer.enabled", "false")
.overrideConfigKey("quarkus.opentelemetry.tracer.suppress-non-application-uris", "false")
.overrideConfigKey("quarkus.opentelemetry.tracer.include-static-resources", "true")
.overrideConfigKey("quarkus.opentelemetry.tracer.sampler", "off")
.overrideConfigKey("quarkus.opentelemetry.tracer.sampler.ratio", "2.0d")
.overrideConfigKey("quarkus.opentelemetry.tracer.exporter.otlp.headers", "header=value")
.overrideConfigKey("quarkus.opentelemetry.tracer.exporter.otlp.enabled", "false")
.overrideConfigKey("quarkus.opentelemetry.tracer.exporter.otlp.endpoint", "http://localhost:4318/");

@Inject
OTelBuildConfig oTelBuildConfig;
@Inject
OTelRuntimeConfig oTelRuntimeConfig;
@Inject
OtlpExporterBuildConfig otlpExporterBuildConfig;
@Inject
OtlpExporterRuntimeConfig otlpExporterRuntimeConfig;

@Test
void config() {
assertEquals(FALSE, oTelBuildConfig.enabled());
assertTrue(oTelBuildConfig.traces().enabled().isPresent());
assertEquals(FALSE, oTelBuildConfig.traces().enabled().get());
assertEquals(FALSE, oTelRuntimeConfig.traces().suppressNonApplicationUris());
assertEquals(TRUE, oTelRuntimeConfig.traces().includeStaticResources());
assertEquals("always_off", oTelBuildConfig.traces().sampler());
assertTrue(oTelRuntimeConfig.traces().samplerArg().isPresent());
assertEquals(2.0d, oTelRuntimeConfig.traces().samplerArg().get());
assertEquals(FALSE, otlpExporterBuildConfig.enabled());
assertTrue(otlpExporterRuntimeConfig.traces().legacyEndpoint().isPresent());
assertTrue(otlpExporterRuntimeConfig.traces().headers().isPresent());
assertEquals("header=value", otlpExporterRuntimeConfig.traces().headers().get().get(0));
assertEquals("http://localhost:4318/", otlpExporterRuntimeConfig.traces().legacyEndpoint().get());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class OtlpExporterConfigTest {

@Test
void config() {
assertTrue(config.traces.legacyEndpoint.isPresent());
assertEquals("http://localhost", config.traces.legacyEndpoint.get().trim());
assertTrue(config.traces().legacyEndpoint().isPresent());
assertEquals("http://localhost", config.traces().legacyEndpoint().get().trim());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.RPC_SERVICE;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.RPC_SYSTEM;
import static io.quarkus.opentelemetry.deployment.common.TestSpanExporter.getSpanByKindAndParentId;
import static io.quarkus.opentelemetry.runtime.config.build.OtelBuildConfig.INSTRUMENTATION_NAME;
import static io.quarkus.opentelemetry.runtime.config.build.OTelBuildConfig.INSTRUMENTATION_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
Expand Down

0 comments on commit 25292fd

Please sign in to comment.