Skip to content

Commit c38e36e

Browse files
committed
Add exception event names to other instrumentations
1 parent 98ed4ce commit c38e36e

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
@@ -28,7 +28,9 @@
2828
import io.opentelemetry.api.trace.SpanKind;
2929
import io.opentelemetry.context.Context;
3030
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
31+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
3132
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
33+
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelRequest;
3234
import io.opentelemetry.javaagent.instrumentation.apachecamel.SpanDecorator;
3335
import java.util.Collections;
3436
import java.util.HashMap;
@@ -84,6 +86,11 @@ public static Map<String, String> toQueryParameters(String uri) {
8486
return Collections.emptyMap();
8587
}
8688

89+
@Override
90+
public ExceptionEventExtractor<CamelRequest> getExceptionEventExtractor(SpanKind spanKind) {
91+
return ExceptionEventExtractor.create("camel.exception");
92+
}
93+
8794
@Override
8895
public boolean shouldStartNewSpan() {
8996
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
@@ -32,11 +32,15 @@
3232
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM;
3333

3434
import io.opentelemetry.api.common.AttributesBuilder;
35+
import io.opentelemetry.api.trace.SpanKind;
36+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
37+
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbExceptionEventExtractors;
3538
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlQuery;
3639
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlQuerySanitizer;
3740
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
3841
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
3942
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
43+
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelRequest;
4044
import java.net.URI;
4145
import java.util.Map;
4246
import javax.annotation.Nullable;
@@ -56,6 +60,11 @@ class DbSpanDecorator extends BaseSpanDecorator {
5660
this.system = system;
5761
}
5862

63+
@Override
64+
public ExceptionEventExtractor<CamelRequest> getExceptionEventExtractor(SpanKind spanKind) {
65+
return DbExceptionEventExtractors.client();
66+
}
67+
5968
@Override
6069
public String getOperationName(
6170
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)