Skip to content

Commit 0d6197f

Browse files
committed
Add exception event names to other instrumentations
1 parent cb4033a commit 0d6197f

29 files changed

Lines changed: 305 additions & 61 deletions

File tree

instrumentation/camel-2.20/javaagent/build.gradle.kts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,14 @@ tasks {
101101
systemProperty("metadataConfig", "otel.semconv-stability.opt-in=database")
102102
}
103103

104+
val testExceptionSignalLogs by registering(Test::class) {
105+
testClassesDirs = sourceSets.test.get().output.classesDirs
106+
classpath = sourceSets.test.get().runtimeClasspath
107+
jvmArgs("-Dotel.semconv.exception.signal.opt-in=logs")
108+
}
109+
104110
check {
105-
dependsOn(testStableSemconv, testExperimental)
111+
dependsOn(testStableSemconv, testExperimental, testExceptionSignalLogs)
106112
}
107113

108114
if (findProperty("denyUnsafe") as Boolean) {

instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.apache.camel.Exchange;
1212

1313
@AutoValue
14-
abstract class CamelRequest {
14+
public abstract class CamelRequest {
1515

1616
public static CamelRequest create(
1717
SpanDecorator spanDecorator,

instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelSingletons.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
1515
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
1616
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
17+
import io.opentelemetry.instrumentation.api.internal.Experimental;
1718
import io.opentelemetry.javaagent.instrumentation.apachecamel.decorators.DecoratorRegistry;
1819
import javax.annotation.Nullable;
1920
import org.apache.camel.Endpoint;
@@ -73,6 +74,13 @@ public void onEnd(
7374
Instrumenter.builder(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, spanNameExtractor);
7475
builder.addAttributesExtractor(attributesExtractor);
7576
builder.setSpanStatusExtractor(spanStatusExtractor);
77+
Experimental.setExceptionEventExtractor(
78+
builder,
79+
(logRecordBuilder, context, request) ->
80+
request
81+
.getSpanDecorator()
82+
.getExceptionEventExtractor(request.getSpanKind())
83+
.extract(logRecordBuilder, context, request));
7684

7785
INSTRUMENTER = builder.buildInstrumenter(request -> request.getSpanKind());
7886
}

instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/SpanDecorator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,21 @@
2626
import io.opentelemetry.api.common.AttributesBuilder;
2727
import io.opentelemetry.api.trace.SpanKind;
2828
import io.opentelemetry.context.Context;
29+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
2930
import org.apache.camel.Endpoint;
3031
import org.apache.camel.Exchange;
3132

3233
/** This interface represents a decorator specific to the component/endpoint being instrumented. */
3334
public interface SpanDecorator {
3435

36+
/**
37+
* Returns the {@link ExceptionEventExtractor} for the given span kind.
38+
*
39+
* @param spanKind The span kind
40+
* @return The exception event extractor
41+
*/
42+
ExceptionEventExtractor<CamelRequest> getExceptionEventExtractor(SpanKind spanKind);
43+
3544
/**
3645
* This method indicates whether the component associated with the SpanDecorator should result in
3746
* a new span being created.

instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/BaseSpanDecorator.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
import io.opentelemetry.api.trace.SpanKind;
3131
import io.opentelemetry.context.Context;
3232
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
33+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
3334
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
35+
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelRequest;
3436
import io.opentelemetry.javaagent.instrumentation.apachecamel.SpanDecorator;
3537
import java.util.HashMap;
3638
import java.util.Map;
@@ -85,6 +87,11 @@ public static Map<String, String> toQueryParameters(String uri) {
8587
return emptyMap();
8688
}
8789

90+
@Override
91+
public ExceptionEventExtractor<CamelRequest> getExceptionEventExtractor(SpanKind spanKind) {
92+
return ExceptionEventExtractor.create("camel.exception");
93+
}
94+
8895
@Override
8996
public boolean shouldStartNewSpan() {
9097
return true;

instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@
3434
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM;
3535

3636
import io.opentelemetry.api.common.AttributesBuilder;
37+
import io.opentelemetry.api.trace.SpanKind;
38+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
39+
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbExceptionEventExtractors;
3740
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlQuery;
3841
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlQuerySanitizer;
3942
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
4043
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
44+
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelRequest;
4145
import java.net.URI;
4246
import java.util.Map;
4347
import javax.annotation.Nullable;
@@ -57,6 +61,11 @@ class DbSpanDecorator extends BaseSpanDecorator {
5761
this.system = system;
5862
}
5963

64+
@Override
65+
public ExceptionEventExtractor<CamelRequest> getExceptionEventExtractor(SpanKind spanKind) {
66+
return DbExceptionEventExtractors.client();
67+
}
68+
6069
@Override
6170
public String getOperationName(
6271
Exchange exchange, Endpoint endpoint, CamelDirection camelDirection) {

instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,15 @@
3030
import static io.opentelemetry.semconv.UrlAttributes.URL_FULL;
3131

3232
import io.opentelemetry.api.common.AttributesBuilder;
33+
import io.opentelemetry.api.trace.SpanKind;
3334
import io.opentelemetry.context.Context;
35+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
36+
import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExceptionEventExtractors;
3437
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute;
3538
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource;
3639
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
3740
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
41+
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelRequest;
3842
import java.net.MalformedURLException;
3943
import java.net.URL;
4044
import java.util.Set;
@@ -49,6 +53,14 @@ class HttpSpanDecorator extends BaseSpanDecorator {
4953
private static final Set<String> knownMethods =
5054
AgentCommonConfig.get().getKnownHttpRequestMethods();
5155

56+
@Override
57+
public ExceptionEventExtractor<CamelRequest> getExceptionEventExtractor(SpanKind spanKind) {
58+
if (spanKind == SpanKind.SERVER) {
59+
return HttpExceptionEventExtractors.server();
60+
}
61+
return HttpExceptionEventExtractors.client();
62+
}
63+
5264
protected String getProtocol() {
5365
return "http";
5466
}

instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/MessagingSpanDecorator.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828

2929
import io.opentelemetry.api.common.AttributesBuilder;
3030
import io.opentelemetry.api.trace.SpanKind;
31+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
32+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingExceptionEventExtractors;
3133
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
34+
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelRequest;
3235
import java.net.URI;
3336
import java.util.Map;
3437
import org.apache.camel.Endpoint;
@@ -42,6 +45,14 @@ public MessagingSpanDecorator(String component) {
4245
this.component = component;
4346
}
4447

48+
@Override
49+
public ExceptionEventExtractor<CamelRequest> getExceptionEventExtractor(SpanKind spanKind) {
50+
if (spanKind == SpanKind.CONSUMER) {
51+
return MessagingExceptionEventExtractors.process();
52+
}
53+
return MessagingExceptionEventExtractors.client();
54+
}
55+
4556
@Override
4657
public String getOperationName(
4758
Exchange exchange, Endpoint endpoint, CamelDirection camelDirection) {

instrumentation/external-annotations/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAnnotationsTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.javaagent.instrumentation.extannotations;
77

88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
910
import static io.opentelemetry.instrumentation.testing.junit.code.SemconvCodeStabilityUtil.codeFunctionAssertions;
1011
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1112
import static org.assertj.core.api.Assertions.catchThrowable;
@@ -84,7 +85,7 @@ void testExceptionExit() {
8485
span ->
8586
span.hasName("SayTracedHello.sayError")
8687
.hasStatus(StatusData.error())
87-
.hasException(thrown)
88+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
8889
.hasAttributesSatisfyingExactly(assertCodeFunction("sayError"))));
8990
}
9091

instrumentation/graphql-java/graphql-java-20.0/library/src/test/java/io/opentelemetry/instrumentation/graphql/v20_0/GraphqlTest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.graphql.v20_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
910
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1011
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE;
@@ -310,13 +311,19 @@ void dataFetcherException() {
310311
equalTo(GRAPHQL_FIELD_NAME, "bookById"),
311312
equalTo(GRAPHQL_FIELD_PATH, "/bookById"))
312313
.hasStatus(StatusData.error())
313-
.hasException(new IllegalStateException("fetching book failed")),
314+
.hasException(
315+
emitExceptionAsSpanEvents()
316+
? new IllegalStateException("fetching book failed")
317+
: null),
314318
span ->
315319
span.hasName("fetchBookById")
316320
.hasKind(SpanKind.INTERNAL)
317321
.hasParent(spanWithName("bookById"))
318322
.hasStatus(StatusData.error())
319-
.hasException(new IllegalStateException("fetching book failed"))));
323+
.hasException(
324+
emitExceptionAsSpanEvents()
325+
? new IllegalStateException("fetching book failed")
326+
: null)));
320327
}
321328

322329
// test data fetcher returning an error

0 commit comments

Comments
 (0)