From afff38069f7a6c9532ef876e9db3d5dc200bf705 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Wed, 3 Jul 2024 14:19:49 +0200 Subject: [PATCH] POTEL 29 - Partially fix bootstrap class loading (#3543) * Partially fix class loading into bootstrap classloader * changelog --- CHANGELOG.md | 2 + .../build.gradle.kts | 1 + .../build.gradle.kts | 4 +- .../api/sentry-opentelemetry-bootstrap.api | 159 ------------------ .../build.gradle.kts | 2 + .../api/sentry-opentelemetry-extra.api | 159 ++++++++++++++++++ .../build.gradle.kts | 79 +++++++++ .../opentelemetry/OpenTelemetryUtil.java | 0 .../OtelContextScopesStorage.java | 7 +- .../sentry/opentelemetry/OtelSpanContext.java | 0 .../sentry/opentelemetry/OtelSpanFactory.java | 0 .../sentry/opentelemetry/OtelSpanWrapper.java | 0 .../opentelemetry/OtelStorageToken.java | 0 .../OtelTransactionSpanForwarder.java | 0 .../opentelemetry/SentryContextStorage.java | 0 .../opentelemetry/SentryContextWrapper.java | 0 .../SentryOtelThreadLocalStorage.java | 0 .../opentelemetry/SentryWeakSpanStorage.java | 0 settings.gradle.kts | 1 + 19 files changed, 250 insertions(+), 164 deletions(-) create mode 100644 sentry-opentelemetry/sentry-opentelemetry-extra/api/sentry-opentelemetry-extra.api create mode 100644 sentry-opentelemetry/sentry-opentelemetry-extra/build.gradle.kts rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/OtelContextScopesStorage.java (77%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/OtelSpanContext.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/OtelStorageToken.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/SentryOtelThreadLocalStorage.java (100%) rename sentry-opentelemetry/{sentry-opentelemetry-bootstrap => sentry-opentelemetry-extra}/src/main/java/io/sentry/opentelemetry/SentryWeakSpanStorage.java (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1636d34d17..36b91b083f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ - Support spans that are split into multiple batches ([#3539](https://github.com/getsentry/sentry-java/pull/3539)) - When spans belonging to a single transaction were split into multiple batches for SpanExporter, we did not add all spans because the isSpanTooOld check wasn't inverted. - Parse and use `send-default-pii` and `max-request-body-size` from `sentry.properties` ([#3534](https://github.com/getsentry/sentry-java/pull/3534)) +- Partially fix bootstrap class loading ([#3543](https://github.com/getsentry/sentry-java/pull/3543)) + - There was a problem with two separate Sentry `Scopes` being active inside each OpenTelemetry `Context` due to using context keys from more than one class loader. ## 8.0.0-alpha.2 diff --git a/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts index 4c00cb8d81..2d5ccf85bc 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts @@ -54,6 +54,7 @@ val upstreamAgent = configurations.create("upstreamAgent") { dependencies { bootstrapLibs(projects.sentry) bootstrapLibs(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) + bootstrapLibs(projects.sentryOpentelemetry.sentryOpentelemetryExtra) javaagentLibs(projects.sentryOpentelemetry.sentryOpentelemetryAgentcustomization) upstreamAgent(Config.Libs.OpenTelemetry.otelJavaAgent) } diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts index c0e002ee31..82fce13c56 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts @@ -24,8 +24,8 @@ dependencies { exclude(group = "io.opentelemetry") exclude(group = "io.opentelemetry.javaagent") } -// compileOnly(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) - implementation(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) + compileOnly(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) + implementation(projects.sentryOpentelemetry.sentryOpentelemetryExtra) compileOnly(Config.Libs.OpenTelemetry.otelSdk) compileOnly(Config.Libs.OpenTelemetry.otelExtensionAutoconfigureSpi) diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api index 0511fed18d..e47bc10b30 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api @@ -10,153 +10,6 @@ public final class io/sentry/opentelemetry/InternalSemanticAttributes { public fun ()V } -public final class io/sentry/opentelemetry/OpenTelemetryUtil { - public fun ()V - public static fun applyOpenTelemetryOptions (Lio/sentry/SentryOptions;)V -} - -public final class io/sentry/opentelemetry/OtelContextScopesStorage : io/sentry/IScopesStorage { - public fun ()V - public fun close ()V - public fun get ()Lio/sentry/IScopes; - public fun set (Lio/sentry/IScopes;)Lio/sentry/ISentryLifecycleToken; -} - -public final class io/sentry/opentelemetry/OtelSpanContext : io/sentry/SpanContext { - public fun (Lio/opentelemetry/sdk/trace/ReadWriteSpan;Lio/sentry/TracesSamplingDecision;Lio/sentry/opentelemetry/OtelSpanWrapper;Lio/sentry/Baggage;)V - public fun getOperation ()Ljava/lang/String; - public fun getStatus ()Lio/sentry/SpanStatus; - public fun setOperation (Ljava/lang/String;)V - public fun setStatus (Lio/sentry/SpanStatus;)V -} - -public final class io/sentry/opentelemetry/OtelSpanFactory : io/sentry/ISpanFactory { - public fun ()V - public fun createSpan (Lio/sentry/IScopes;Lio/sentry/SpanOptions;Lio/sentry/SpanContext;Lio/sentry/ISpan;)Lio/sentry/ISpan; - public fun createTransaction (Lio/sentry/TransactionContext;Lio/sentry/IScopes;Lio/sentry/TransactionOptions;Lio/sentry/TransactionPerformanceCollector;)Lio/sentry/ITransaction; - public fun retrieveCurrentSpan (Lio/sentry/IScope;)Lio/sentry/ISpan; - public fun retrieveCurrentSpan (Lio/sentry/IScopes;)Lio/sentry/ISpan; -} - -public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/ISpan { - public fun (Lio/opentelemetry/sdk/trace/ReadWriteSpan;Lio/sentry/IScopes;Lio/sentry/SentryDate;Lio/sentry/TracesSamplingDecision;Lio/sentry/opentelemetry/OtelSpanWrapper;Lio/sentry/Baggage;)V - public fun finish ()V - public fun finish (Lio/sentry/SpanStatus;)V - public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V - public fun getContexts ()Lio/sentry/protocol/Contexts; - public fun getData ()Ljava/util/Map; - public fun getData (Ljava/lang/String;)Ljava/lang/Object; - public fun getDescription ()Ljava/lang/String; - public fun getFinishDate ()Lio/sentry/SentryDate; - public fun getLocalMetricsAggregator ()Lio/sentry/metrics/LocalMetricsAggregator; - public fun getMeasurements ()Ljava/util/Map; - public fun getOperation ()Ljava/lang/String; - public fun getSamplingDecision ()Lio/sentry/TracesSamplingDecision; - public fun getScopes ()Lio/sentry/IScopes; - public fun getSpanContext ()Lio/sentry/SpanContext; - public fun getStartDate ()Lio/sentry/SentryDate; - public fun getStatus ()Lio/sentry/SpanStatus; - public fun getTag (Ljava/lang/String;)Ljava/lang/String; - public fun getTags ()Ljava/util/Map; - public fun getThrowable ()Ljava/lang/Throwable; - public fun getTraceId ()Lio/sentry/protocol/SentryId; - public fun getTransactionName ()Ljava/lang/String; - public fun getTransactionNameSource ()Lio/sentry/protocol/TransactionNameSource; - public fun isFinished ()Z - public fun isNoOp ()Z - public fun isProfileSampled ()Ljava/lang/Boolean; - public fun isSampled ()Ljava/lang/Boolean; - public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken; - public fun setContext (Ljava/lang/String;Ljava/lang/Object;)V - public fun setData (Ljava/lang/String;Ljava/lang/Object;)V - public fun setDescription (Ljava/lang/String;)V - public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;)V - public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;Lio/sentry/MeasurementUnit;)V - public fun setOperation (Ljava/lang/String;)V - public fun setStatus (Lio/sentry/SpanStatus;)V - public fun setTag (Ljava/lang/String;Ljava/lang/String;)V - public fun setThrowable (Ljava/lang/Throwable;)V - public fun setTransactionName (Ljava/lang/String;)V - public fun setTransactionName (Ljava/lang/String;Lio/sentry/protocol/TransactionNameSource;)V - public fun startChild (Lio/sentry/SpanContext;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; - public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; - public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; - public fun traceContext ()Lio/sentry/TraceContext; - public fun updateEndDate (Lio/sentry/SentryDate;)Z -} - -public final class io/sentry/opentelemetry/OtelTransactionSpanForwarder : io/sentry/ITransaction { - public fun (Lio/sentry/opentelemetry/OtelSpanWrapper;)V - public fun finish ()V - public fun finish (Lio/sentry/SpanStatus;)V - public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V - public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;ZLio/sentry/Hint;)V - public fun forceFinish (Lio/sentry/SpanStatus;ZLio/sentry/Hint;)V - public fun getContexts ()Lio/sentry/protocol/Contexts; - public fun getData (Ljava/lang/String;)Ljava/lang/Object; - public fun getDescription ()Ljava/lang/String; - public fun getEventId ()Lio/sentry/protocol/SentryId; - public fun getFinishDate ()Lio/sentry/SentryDate; - public fun getLatestActiveSpan ()Lio/sentry/ISpan; - public fun getLocalMetricsAggregator ()Lio/sentry/metrics/LocalMetricsAggregator; - public fun getName ()Ljava/lang/String; - public fun getOperation ()Ljava/lang/String; - public fun getSamplingDecision ()Lio/sentry/TracesSamplingDecision; - public fun getSpanContext ()Lio/sentry/SpanContext; - public fun getSpans ()Ljava/util/List; - public fun getStartDate ()Lio/sentry/SentryDate; - public fun getStatus ()Lio/sentry/SpanStatus; - public fun getTag (Ljava/lang/String;)Ljava/lang/String; - public fun getThrowable ()Ljava/lang/Throwable; - public fun getTransactionNameSource ()Lio/sentry/protocol/TransactionNameSource; - public fun isFinished ()Z - public fun isNoOp ()Z - public fun isProfileSampled ()Ljava/lang/Boolean; - public fun isSampled ()Ljava/lang/Boolean; - public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken; - public fun scheduleFinish ()V - public fun setContext (Ljava/lang/String;Ljava/lang/Object;)V - public fun setData (Ljava/lang/String;Ljava/lang/Object;)V - public fun setDescription (Ljava/lang/String;)V - public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;)V - public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;Lio/sentry/MeasurementUnit;)V - public fun setName (Ljava/lang/String;)V - public fun setName (Ljava/lang/String;Lio/sentry/protocol/TransactionNameSource;)V - public fun setOperation (Ljava/lang/String;)V - public fun setStatus (Lio/sentry/SpanStatus;)V - public fun setTag (Ljava/lang/String;Ljava/lang/String;)V - public fun setThrowable (Ljava/lang/Throwable;)V - public fun startChild (Lio/sentry/SpanContext;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; - public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; - public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; - public fun traceContext ()Lio/sentry/TraceContext; - public fun updateEndDate (Lio/sentry/SentryDate;)Z -} - -public final class io/sentry/opentelemetry/SentryContextStorage : io/opentelemetry/context/ContextStorage { - public fun (Lio/opentelemetry/context/ContextStorage;)V - public fun attach (Lio/opentelemetry/context/Context;)Lio/opentelemetry/context/Scope; - public fun current ()Lio/opentelemetry/context/Context; -} - -public final class io/sentry/opentelemetry/SentryContextWrapper : io/opentelemetry/context/Context { - public fun get (Lio/opentelemetry/context/ContextKey;)Ljava/lang/Object; - public fun toString ()Ljava/lang/String; - public fun with (Lio/opentelemetry/context/ContextKey;Ljava/lang/Object;)Lio/opentelemetry/context/Context; - public static fun wrap (Lio/opentelemetry/context/Context;)Lio/sentry/opentelemetry/SentryContextWrapper; -} - public final class io/sentry/opentelemetry/SentryOtelKeys { public static final field SENTRY_BAGGAGE_KEY Lio/opentelemetry/context/ContextKey; public static final field SENTRY_SCOPES_KEY Lio/opentelemetry/context/ContextKey; @@ -164,15 +17,3 @@ public final class io/sentry/opentelemetry/SentryOtelKeys { public fun ()V } -public final class io/sentry/opentelemetry/SentryOtelThreadLocalStorage : io/opentelemetry/context/ContextStorage { - public fun ()V - public fun attach (Lio/opentelemetry/context/Context;)Lio/opentelemetry/context/Scope; - public fun current ()Lio/opentelemetry/context/Context; -} - -public final class io/sentry/opentelemetry/SentryWeakSpanStorage { - public static fun getInstance ()Lio/sentry/opentelemetry/SentryWeakSpanStorage; - public fun getSentrySpan (Lio/opentelemetry/api/trace/SpanContext;)Lio/sentry/opentelemetry/OtelSpanWrapper; - public fun storeSentrySpan (Lio/opentelemetry/api/trace/SpanContext;Lio/sentry/opentelemetry/OtelSpanWrapper;)V -} - diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts index 542bc4332b..ef26355f04 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { compileOnly(projects.sentry) // TODO implementation? compileOnly(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) + compileOnly(projects.sentryOpentelemetry.sentryOpentelemetryExtra) implementation(Config.Libs.OpenTelemetry.otelSdk) compileOnly(Config.Libs.OpenTelemetry.otelSemconv) @@ -34,6 +35,7 @@ dependencies { // tests testImplementation(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) + testImplementation(projects.sentryOpentelemetry.sentryOpentelemetryExtra) testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) testImplementation(Config.TestLibs.kotlinTestJunit) diff --git a/sentry-opentelemetry/sentry-opentelemetry-extra/api/sentry-opentelemetry-extra.api b/sentry-opentelemetry/sentry-opentelemetry-extra/api/sentry-opentelemetry-extra.api new file mode 100644 index 0000000000..83ca7461f6 --- /dev/null +++ b/sentry-opentelemetry/sentry-opentelemetry-extra/api/sentry-opentelemetry-extra.api @@ -0,0 +1,159 @@ +public final class io/sentry/opentelemetry/OpenTelemetryUtil { + public fun ()V + public static fun applyOpenTelemetryOptions (Lio/sentry/SentryOptions;)V +} + +public final class io/sentry/opentelemetry/OtelContextScopesStorage : io/sentry/IScopesStorage { + public fun ()V + public fun close ()V + public fun get ()Lio/sentry/IScopes; + public fun set (Lio/sentry/IScopes;)Lio/sentry/ISentryLifecycleToken; +} + +public final class io/sentry/opentelemetry/OtelSpanContext : io/sentry/SpanContext { + public fun (Lio/opentelemetry/sdk/trace/ReadWriteSpan;Lio/sentry/TracesSamplingDecision;Lio/sentry/opentelemetry/OtelSpanWrapper;Lio/sentry/Baggage;)V + public fun getOperation ()Ljava/lang/String; + public fun getStatus ()Lio/sentry/SpanStatus; + public fun setOperation (Ljava/lang/String;)V + public fun setStatus (Lio/sentry/SpanStatus;)V +} + +public final class io/sentry/opentelemetry/OtelSpanFactory : io/sentry/ISpanFactory { + public fun ()V + public fun createSpan (Lio/sentry/IScopes;Lio/sentry/SpanOptions;Lio/sentry/SpanContext;Lio/sentry/ISpan;)Lio/sentry/ISpan; + public fun createTransaction (Lio/sentry/TransactionContext;Lio/sentry/IScopes;Lio/sentry/TransactionOptions;Lio/sentry/TransactionPerformanceCollector;)Lio/sentry/ITransaction; + public fun retrieveCurrentSpan (Lio/sentry/IScope;)Lio/sentry/ISpan; + public fun retrieveCurrentSpan (Lio/sentry/IScopes;)Lio/sentry/ISpan; +} + +public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/ISpan { + public fun (Lio/opentelemetry/sdk/trace/ReadWriteSpan;Lio/sentry/IScopes;Lio/sentry/SentryDate;Lio/sentry/TracesSamplingDecision;Lio/sentry/opentelemetry/OtelSpanWrapper;Lio/sentry/Baggage;)V + public fun finish ()V + public fun finish (Lio/sentry/SpanStatus;)V + public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V + public fun getContexts ()Lio/sentry/protocol/Contexts; + public fun getData ()Ljava/util/Map; + public fun getData (Ljava/lang/String;)Ljava/lang/Object; + public fun getDescription ()Ljava/lang/String; + public fun getFinishDate ()Lio/sentry/SentryDate; + public fun getLocalMetricsAggregator ()Lio/sentry/metrics/LocalMetricsAggregator; + public fun getMeasurements ()Ljava/util/Map; + public fun getOperation ()Ljava/lang/String; + public fun getSamplingDecision ()Lio/sentry/TracesSamplingDecision; + public fun getScopes ()Lio/sentry/IScopes; + public fun getSpanContext ()Lio/sentry/SpanContext; + public fun getStartDate ()Lio/sentry/SentryDate; + public fun getStatus ()Lio/sentry/SpanStatus; + public fun getTag (Ljava/lang/String;)Ljava/lang/String; + public fun getTags ()Ljava/util/Map; + public fun getThrowable ()Ljava/lang/Throwable; + public fun getTraceId ()Lio/sentry/protocol/SentryId; + public fun getTransactionName ()Ljava/lang/String; + public fun getTransactionNameSource ()Lio/sentry/protocol/TransactionNameSource; + public fun isFinished ()Z + public fun isNoOp ()Z + public fun isProfileSampled ()Ljava/lang/Boolean; + public fun isSampled ()Ljava/lang/Boolean; + public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken; + public fun setContext (Ljava/lang/String;Ljava/lang/Object;)V + public fun setData (Ljava/lang/String;Ljava/lang/Object;)V + public fun setDescription (Ljava/lang/String;)V + public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;)V + public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;Lio/sentry/MeasurementUnit;)V + public fun setOperation (Ljava/lang/String;)V + public fun setStatus (Lio/sentry/SpanStatus;)V + public fun setTag (Ljava/lang/String;Ljava/lang/String;)V + public fun setThrowable (Ljava/lang/Throwable;)V + public fun setTransactionName (Ljava/lang/String;)V + public fun setTransactionName (Ljava/lang/String;Lio/sentry/protocol/TransactionNameSource;)V + public fun startChild (Lio/sentry/SpanContext;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; + public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; + public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; + public fun traceContext ()Lio/sentry/TraceContext; + public fun updateEndDate (Lio/sentry/SentryDate;)Z +} + +public final class io/sentry/opentelemetry/OtelTransactionSpanForwarder : io/sentry/ITransaction { + public fun (Lio/sentry/opentelemetry/OtelSpanWrapper;)V + public fun finish ()V + public fun finish (Lio/sentry/SpanStatus;)V + public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V + public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;ZLio/sentry/Hint;)V + public fun forceFinish (Lio/sentry/SpanStatus;ZLio/sentry/Hint;)V + public fun getContexts ()Lio/sentry/protocol/Contexts; + public fun getData (Ljava/lang/String;)Ljava/lang/Object; + public fun getDescription ()Ljava/lang/String; + public fun getEventId ()Lio/sentry/protocol/SentryId; + public fun getFinishDate ()Lio/sentry/SentryDate; + public fun getLatestActiveSpan ()Lio/sentry/ISpan; + public fun getLocalMetricsAggregator ()Lio/sentry/metrics/LocalMetricsAggregator; + public fun getName ()Ljava/lang/String; + public fun getOperation ()Ljava/lang/String; + public fun getSamplingDecision ()Lio/sentry/TracesSamplingDecision; + public fun getSpanContext ()Lio/sentry/SpanContext; + public fun getSpans ()Ljava/util/List; + public fun getStartDate ()Lio/sentry/SentryDate; + public fun getStatus ()Lio/sentry/SpanStatus; + public fun getTag (Ljava/lang/String;)Ljava/lang/String; + public fun getThrowable ()Ljava/lang/Throwable; + public fun getTransactionNameSource ()Lio/sentry/protocol/TransactionNameSource; + public fun isFinished ()Z + public fun isNoOp ()Z + public fun isProfileSampled ()Ljava/lang/Boolean; + public fun isSampled ()Ljava/lang/Boolean; + public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken; + public fun scheduleFinish ()V + public fun setContext (Ljava/lang/String;Ljava/lang/Object;)V + public fun setData (Ljava/lang/String;Ljava/lang/Object;)V + public fun setDescription (Ljava/lang/String;)V + public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;)V + public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;Lio/sentry/MeasurementUnit;)V + public fun setName (Ljava/lang/String;)V + public fun setName (Ljava/lang/String;Lio/sentry/protocol/TransactionNameSource;)V + public fun setOperation (Ljava/lang/String;)V + public fun setStatus (Lio/sentry/SpanStatus;)V + public fun setTag (Ljava/lang/String;Ljava/lang/String;)V + public fun setThrowable (Ljava/lang/Throwable;)V + public fun startChild (Lio/sentry/SpanContext;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; + public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; + public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; + public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; + public fun traceContext ()Lio/sentry/TraceContext; + public fun updateEndDate (Lio/sentry/SentryDate;)Z +} + +public final class io/sentry/opentelemetry/SentryContextStorage : io/opentelemetry/context/ContextStorage { + public fun (Lio/opentelemetry/context/ContextStorage;)V + public fun attach (Lio/opentelemetry/context/Context;)Lio/opentelemetry/context/Scope; + public fun current ()Lio/opentelemetry/context/Context; +} + +public final class io/sentry/opentelemetry/SentryContextWrapper : io/opentelemetry/context/Context { + public fun get (Lio/opentelemetry/context/ContextKey;)Ljava/lang/Object; + public fun toString ()Ljava/lang/String; + public fun with (Lio/opentelemetry/context/ContextKey;Ljava/lang/Object;)Lio/opentelemetry/context/Context; + public static fun wrap (Lio/opentelemetry/context/Context;)Lio/sentry/opentelemetry/SentryContextWrapper; +} + +public final class io/sentry/opentelemetry/SentryOtelThreadLocalStorage : io/opentelemetry/context/ContextStorage { + public fun ()V + public fun attach (Lio/opentelemetry/context/Context;)Lio/opentelemetry/context/Scope; + public fun current ()Lio/opentelemetry/context/Context; +} + +public final class io/sentry/opentelemetry/SentryWeakSpanStorage { + public static fun getInstance ()Lio/sentry/opentelemetry/SentryWeakSpanStorage; + public fun getSentrySpan (Lio/opentelemetry/api/trace/SpanContext;)Lio/sentry/opentelemetry/OtelSpanWrapper; + public fun storeSentrySpan (Lio/opentelemetry/api/trace/SpanContext;Lio/sentry/opentelemetry/OtelSpanWrapper;)V +} + diff --git a/sentry-opentelemetry/sentry-opentelemetry-extra/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-extra/build.gradle.kts new file mode 100644 index 0000000000..58537ffaf6 --- /dev/null +++ b/sentry-opentelemetry/sentry-opentelemetry-extra/build.gradle.kts @@ -0,0 +1,79 @@ +import net.ltgt.gradle.errorprone.errorprone +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + `java-library` + kotlin("jvm") + jacoco + id(Config.QualityPlugins.errorProne) + id(Config.QualityPlugins.gradleVersions) +} + +configure { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +tasks.withType().configureEach { + kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString() +} + +dependencies { + compileOnly(projects.sentry) + compileOnly(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) + + compileOnly(Config.Libs.OpenTelemetry.otelSdk) + compileOnly(Config.Libs.OpenTelemetry.otelSdk) + + compileOnly(Config.CompileOnly.nopen) + errorprone(Config.CompileOnly.nopenChecker) + errorprone(Config.CompileOnly.errorprone) + compileOnly(Config.CompileOnly.jetbrainsAnnotations) + errorprone(Config.CompileOnly.errorProneNullAway) + + // tests + testImplementation(projects.sentryTestSupport) + testImplementation(kotlin(Config.kotlinStdLib)) + testImplementation(Config.TestLibs.kotlinTestJunit) + testImplementation(Config.TestLibs.mockitoKotlin) + testImplementation(Config.TestLibs.awaitility) + + testImplementation(Config.Libs.OpenTelemetry.otelSdk) + testImplementation(Config.Libs.OpenTelemetry.otelSemconv) +} + +configure { + test { + java.srcDir("src/test/java") + } +} + +jacoco { + toolVersion = Config.QualityPlugins.Jacoco.version +} + +tasks.jacocoTestReport { + reports { + xml.required.set(true) + html.required.set(false) + } +} + +tasks { + jacocoTestCoverageVerification { + violationRules { + rule { limit { minimum = Config.QualityPlugins.Jacoco.minimumCoverage } } + } + } + check { + dependsOn(jacocoTestCoverageVerification) + dependsOn(jacocoTestReport) + } +} + +tasks.withType().configureEach { + options.errorprone { + check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) + option("NullAway:AnnotatedPackages", "io.sentry") + } +} diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelContextScopesStorage.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelContextScopesStorage.java similarity index 77% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelContextScopesStorage.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelContextScopesStorage.java index 810c6c08cc..0ec94c3015 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelContextScopesStorage.java +++ b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelContextScopesStorage.java @@ -17,14 +17,15 @@ public final class OtelContextScopesStorage implements IScopesStorage { @Override public @NotNull ISentryLifecycleToken set(@Nullable IScopes scopes) { - final @NotNull Scope otelScope = - Context.current().with(SENTRY_SCOPES_KEY, scopes).makeCurrent(); + final Context context = Context.current(); + final @NotNull Scope otelScope = context.with(SENTRY_SCOPES_KEY, scopes).makeCurrent(); return new OtelStorageToken(otelScope); } @Override public @Nullable IScopes get() { - return Context.current().get(SENTRY_SCOPES_KEY); + final Context context = Context.current(); + return context.get(SENTRY_SCOPES_KEY); } @Override diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanContext.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelSpanContext.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanContext.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelSpanContext.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelStorageToken.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelStorageToken.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelStorageToken.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelStorageToken.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryOtelThreadLocalStorage.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryOtelThreadLocalStorage.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryOtelThreadLocalStorage.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryOtelThreadLocalStorage.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryWeakSpanStorage.java b/sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryWeakSpanStorage.java similarity index 100% rename from sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryWeakSpanStorage.java rename to sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryWeakSpanStorage.java diff --git a/settings.gradle.kts b/settings.gradle.kts index 822c8e9db0..c803e22901 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -43,6 +43,7 @@ include( "sentry-jdbc", "sentry-opentelemetry:sentry-opentelemetry-bootstrap", "sentry-opentelemetry:sentry-opentelemetry-core", + "sentry-opentelemetry:sentry-opentelemetry-extra", "sentry-opentelemetry:sentry-opentelemetry-agentcustomization", "sentry-opentelemetry:sentry-opentelemetry-agent", "sentry-quartz",