Skip to content

Commit

Permalink
implement output-name/add-runner-suffix on Gradle
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobdotcosta committed Jan 4, 2023
1 parent e541ebb commit 418331d
Show file tree
Hide file tree
Showing 29 changed files with 542 additions and 139 deletions.
4 changes: 2 additions & 2 deletions bom/application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@
<kotlin.coroutine.version>1.6.4</kotlin.coroutine.version>
<kotlin-serialization.version>1.4.1</kotlin-serialization.version>
<kubernetes-client.version>6.3.1</kubernetes-client.version> <!-- Please check with Java Operator SDK team before updating -->
<dekorate.version>3.1.3</dekorate.version> <!-- Please check with Java Operator SDK team before updating -->
<dekorate.version>3.2.0</dekorate.version> <!-- Please check with Java Operator SDK team before updating -->
<maven-invoker.version>3.2.0</maven-invoker.version>
<awaitility.version>4.2.0</awaitility.version>
<jboss-logmanager.version>1.0.11</jboss-logmanager.version>
Expand Down Expand Up @@ -207,7 +207,7 @@
<aesh.version>2.6</aesh.version>
<!-- these two artifacts needs to be compatible together -->
<strimzi-oauth.version>0.11.0</strimzi-oauth.version>
<strimzi-oauth.nimbus.version>9.25.6</strimzi-oauth.nimbus.version>
<strimzi-oauth.nimbus.version>9.27</strimzi-oauth.nimbus.version>
<java-buildpack-client.version>0.0.6</java-buildpack-client.version>
<org-crac.version>0.1.3</org-crac.version>
<sshd-common.version>2.9.2</sshd-common.version>
Expand Down
2 changes: 1 addition & 1 deletion build-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
<assertj.version>3.23.1</assertj.version>

<wiremock-jre8.version>2.35.0</wiremock-jre8.version>
<wiremock-maven-plugin.version>7.2.0</wiremock-maven-plugin.version>
<wiremock-maven-plugin.version>7.3.0</wiremock-maven-plugin.version>

<!-- Artemis test dependencies -->
<artemis.version>2.27.1</artemis.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.StringJoiner;
import java.util.*;
import java.util.stream.Collectors;

import org.gradle.api.Action;
Expand Down Expand Up @@ -79,7 +75,8 @@ public void beforeTest(Test task) {
task.environment(BootstrapConstants.TEST_TO_MAIN_MAPPINGS, fileList);
project.getLogger().debug("test dir mapping - {}", fileList);

final String nativeRunner = task.getProject().getBuildDir().toPath().resolve(finalName() + "-runner")
final String nativeRunner = task.getProject().getBuildDir().toPath()
.resolve(buildNativeRunnerName(props))
.toAbsolutePath()
.toString();
props.put("native.image.path", nativeRunner);
Expand All @@ -88,6 +85,28 @@ public void beforeTest(Test task) {
}
}

public String buildNativeRunnerName(final Map<String, Object> taskSystemProps) {
// TODO: Take into account build.gradle configuration properties implemented by PR-29971
Properties properties = new Properties(taskSystemProps.size());
properties.putAll(taskSystemProps);
System.getProperties().entrySet()
.forEach(propEntry -> properties.putIfAbsent(propEntry.getKey(), propEntry.getValue()));
System.getenv().entrySet().forEach(
envEntry -> properties.putIfAbsent(envEntry.getKey(), envEntry.getValue()));
StringBuilder nativeRunnerName = new StringBuilder();
if (properties.containsKey("quarkus.package.output-name")) {
nativeRunnerName.append(properties.get("quarkus.package.output-name"));
} else {
nativeRunnerName.append(finalName());
}
if (!properties.containsKey("quarkus.package.add-runner-suffix")
|| (properties.containsKey("quarkus.package.add-runner-suffix")
&& Boolean.parseBoolean((String) properties.get("quarkus.package.add-runner-suffix")))) {
nativeRunnerName.append("-runner");
}
return nativeRunnerName.toString();
}

public Property<String> getFinalName() {
return finalName;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,12 @@ public QuarkusBuild manifest(Action<Manifest> action) {

@OutputFile
public File getRunnerJar() {
return new File(getProject().getBuildDir(), extension().finalName() + "-runner.jar");
return new File(getProject().getBuildDir(), String.format("%s.jar", extension().buildNativeRunnerName(Map.of())));
}

@OutputFile
public File getNativeRunner() {
return new File(getProject().getBuildDir(), extension().finalName() + "-runner");
return new File(getProject().getBuildDir(), extension().buildNativeRunnerName(Map.of()));
}

@OutputDirectory
Expand Down Expand Up @@ -223,4 +223,5 @@ private String expandConfigurationKey(String shortKey) {
}
return String.format("%s.%s", NATIVE_PROPERTY_NAMESPACE, hyphenatedKey);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ private void addLocalProject(ResolvedDependency project, GradleDevModeLauncher.B
}
}
Path classesDir = classesDirs.isEmpty() ? null
: QuarkusGradleUtils.mergeClassesDirs(classesDirs, project.getWorkspaceModule().getBuildDir(), root, root);
: QuarkusGradleUtils.mergeClassesDirs(classesDirs, project.getWorkspaceModule().getBuildDir(), root, false);

final Set<Path> resourcesSrcDirs = new LinkedHashSet<>();
// resourcesSrcDir may exist but if it's empty the resources output dir won't be created
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public void visit(KubernetesConfigFluent config) {
KubernetesConfigFluent.IngressNested ingressConfigBuilder = config.withNewIngress();
ingressConfigBuilder.withExpose(true);
ingressConfig.host.ifPresent(ingressConfigBuilder::withHost);
ingressConfig.ingressClassName.ifPresent(ingressConfigBuilder::withIngressClassName);

ingressConfigBuilder.endIngress();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ public class IngressConfig {
@ConfigItem
Optional<String> host;

/**
* The class of the Ingress. If the ingressClassName is omitted, a default Ingress class is used.
*/
@ConfigItem
Optional<String> ingressClassName;

/**
* Custom annotations to add to exposition (route or ingress) resources
*/
Expand Down
8 changes: 8 additions & 0 deletions extensions/opentelemetry/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-grpc-common-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-common-spi</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive-spi-deployment</artifactId>
</dependency>

<!-- Test Dependencies -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@
import io.quarkus.opentelemetry.runtime.tracing.intrumentation.grpc.GrpcTracingServerInterceptor;
import io.quarkus.opentelemetry.runtime.tracing.intrumentation.reactivemessaging.ReactiveMessagingTracingDecorator;
import io.quarkus.opentelemetry.runtime.tracing.intrumentation.restclient.OpenTelemetryClientFilter;
import io.quarkus.opentelemetry.runtime.tracing.intrumentation.resteasy.OpenTelemetryClassicServerFilter;
import io.quarkus.opentelemetry.runtime.tracing.intrumentation.resteasy.OpenTelemetryReactiveServerFilter;
import io.quarkus.resteasy.common.spi.ResteasyJaxrsProviderBuildItem;
import io.quarkus.resteasy.reactive.spi.ContainerRequestFilterBuildItem;
import io.quarkus.runtime.LaunchMode;
import io.quarkus.vertx.core.deployment.VertxOptionsConsumerBuildItem;
import io.vertx.core.VertxOptions;
Expand Down Expand Up @@ -112,4 +116,38 @@ VertxOptionsConsumerBuildItem vertxTracingOptions(InstrumentationRecorder record
LIBRARY_AFTER);
}

// RESTEasy and Vert.x web
@BuildStep
void registerResteasyClassicAndOrResteasyReactiveProvider(
Capabilities capabilities,
BuildProducer<ResteasyJaxrsProviderBuildItem> resteasyJaxrsProviderBuildItemBuildProducer) {

boolean isResteasyClassicAvailable = capabilities.isPresent(Capability.RESTEASY);

if (!isResteasyClassicAvailable) {
// if RestEasy is not available then no need to continue
return;
}

resteasyJaxrsProviderBuildItemBuildProducer
.produce(new ResteasyJaxrsProviderBuildItem(OpenTelemetryClassicServerFilter.class.getName()));
}

@BuildStep
void registerResteasyReactiveProvider(
Capabilities capabilities,
BuildProducer<ContainerRequestFilterBuildItem> containerRequestFilterBuildItemBuildProducer) {

boolean isResteasyReactiveAvailable = capabilities.isPresent(Capability.RESTEASY_REACTIVE);

if (isResteasyReactiveAvailable) {
// if RestEasy is not available then no need to continue
return;
}

containerRequestFilterBuildItemBuildProducer
.produce(new ContainerRequestFilterBuildItem.Builder(OpenTelemetryReactiveServerFilter.class.getName())
.build());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
import static io.opentelemetry.api.trace.SpanKind.SERVER;
import static io.quarkus.opentelemetry.deployment.common.TestSpanExporter.getSpanByKindAndParentId;
import static io.quarkus.opentelemetry.deployment.common.TestUtil.assertStringAttribute;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertEquals;
Expand All @@ -22,7 +23,9 @@

import io.opentelemetry.extension.annotations.WithSpan;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import io.quarkus.opentelemetry.deployment.common.TestSpanExporter;
import io.quarkus.opentelemetry.deployment.common.TestUtil;
import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

Expand All @@ -31,6 +34,7 @@ public class OpenTelemetryHttpCDILegacyTest {
static final QuarkusUnitTest TEST = new QuarkusUnitTest()
.setArchiveProducer(
() -> ShrinkWrap.create(JavaArchive.class)
.addClass(TestUtil.class)
.addClass(HelloResource.class)
.addClass(HelloBean.class)
.addClass(TestSpanExporter.class));
Expand All @@ -55,6 +59,10 @@ void telemetry() {
SpanData server = getSpanByKindAndParentId(spans, SERVER, "0000000000000000");
assertEquals("/hello", server.getName());
assertEquals(SERVER, server.getKind());
// verify that OpenTelemetryServerFilter took place
assertStringAttribute(server, SemanticAttributes.CODE_NAMESPACE,
"io.quarkus.opentelemetry.deployment.OpenTelemetryHttpCDILegacyTest$HelloResource");
assertStringAttribute(server, SemanticAttributes.CODE_FUNCTION, "hello");

SpanData internal = getSpanByKindAndParentId(spans, INTERNAL, server.getSpanId());
assertEquals("HelloBean.hello", internal.getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
import static io.opentelemetry.api.trace.SpanKind.SERVER;
import static io.quarkus.opentelemetry.deployment.common.TestSpanExporter.getSpanByKindAndParentId;
import static io.quarkus.opentelemetry.deployment.common.TestUtil.assertStringAttribute;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertEquals;
Expand All @@ -22,7 +23,9 @@

import io.opentelemetry.instrumentation.annotations.WithSpan;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import io.quarkus.opentelemetry.deployment.common.TestSpanExporter;
import io.quarkus.opentelemetry.deployment.common.TestUtil;
import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

Expand All @@ -31,6 +34,7 @@ public class OpenTelemetryHttpCDITest {
static final QuarkusUnitTest TEST = new QuarkusUnitTest()
.setArchiveProducer(
() -> ShrinkWrap.create(JavaArchive.class)
.addClass(TestUtil.class)
.addClass(HelloResource.class)
.addClass(HelloBean.class)
.addClass(TestSpanExporter.class));
Expand All @@ -54,6 +58,10 @@ void telemetry() {

final SpanData server = getSpanByKindAndParentId(spans, SERVER, "0000000000000000");
assertEquals("/hello", server.getName());
// verify that OpenTelemetryServerFilter took place
assertStringAttribute(server, SemanticAttributes.CODE_NAMESPACE,
"io.quarkus.opentelemetry.deployment.OpenTelemetryHttpCDITest$HelloResource");
assertStringAttribute(server, SemanticAttributes.CODE_FUNCTION, "hello");

final SpanData internalFromBean = getSpanByKindAndParentId(spans, INTERNAL, server.getSpanId());
assertEquals("HelloBean.hello", internalFromBean.getName());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package io.quarkus.opentelemetry.deployment.common;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.IdGenerator;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import io.quarkus.arc.Unremovable;

Expand Down Expand Up @@ -60,4 +64,8 @@ public static TextMapPropagator[] getTextMapPropagators(OpenTelemetry openTeleme
privatePropagatorsField.setAccessible(true);
return (TextMapPropagator[]) privatePropagatorsField.get(textMapPropagator);
}

public static void assertStringAttribute(SpanData spanData, AttributeKey<String> attributeKey, String expectedValue) {
assertEquals(expectedValue, spanData.getAttributes().get(attributeKey), "Attribute Key Named:" + attributeKey.getKey());
}
}
5 changes: 5 additions & 0 deletions extensions/opentelemetry/runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@
<groupId>io.smallrye.common</groupId>
<artifactId>smallrye-common-vertx-context</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus.resteasy.reactive</groupId>
<artifactId>resteasy-reactive</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>svm</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.quarkus.opentelemetry.runtime.tracing.intrumentation.resteasy;

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;

/**
* Handles RESTEasy Classic
*/
@Provider
public class OpenTelemetryClassicServerFilter implements ContainerRequestFilter {

@Context
ResourceInfo resourceInfo;

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
Span localRootSpan = LocalRootSpan.current();

localRootSpan.setAttribute(SemanticAttributes.CODE_NAMESPACE, resourceInfo.getResourceClass().getName());
localRootSpan.setAttribute(SemanticAttributes.CODE_FUNCTION, resourceInfo.getResourceMethod().getName());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.quarkus.opentelemetry.runtime.tracing.intrumentation.resteasy;

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;

import org.jboss.resteasy.reactive.server.SimpleResourceInfo;

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;

/**
* Handles RESTEasy Reactive (via Vert.x)
*/
@Provider
public class OpenTelemetryReactiveServerFilter implements ContainerRequestFilter {

@Context
SimpleResourceInfo resourceInfo;

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
Span localRootSpan = LocalRootSpan.current();

localRootSpan.setAttribute(SemanticAttributes.CODE_NAMESPACE, resourceInfo.getResourceClass().getName());
localRootSpan.setAttribute(SemanticAttributes.CODE_FUNCTION, resourceInfo.getMethodName());
}
}
Loading

0 comments on commit 418331d

Please sign in to comment.