Skip to content

Commit 196b3b4

Browse files
committed
Add feature flags to spans
1 parent d320dd6 commit 196b3b4

File tree

16 files changed

+282
-0
lines changed

16 files changed

+282
-0
lines changed

sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public final class io/sentry/opentelemetry/OtelSpanFactory : io/sentry/ISpanFact
4343

4444
public final class io/sentry/opentelemetry/OtelStrongRefSpanWrapper : io/sentry/opentelemetry/IOtelSpanWrapper {
4545
public fun <init> (Lio/opentelemetry/api/trace/Span;Lio/sentry/opentelemetry/IOtelSpanWrapper;)V
46+
public fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
4647
public fun finish ()V
4748
public fun finish (Lio/sentry/SpanStatus;)V
4849
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
@@ -96,6 +97,7 @@ public final class io/sentry/opentelemetry/OtelStrongRefSpanWrapper : io/sentry/
9697

9798
public final class io/sentry/opentelemetry/OtelTransactionSpanForwarder : io/sentry/ITransaction {
9899
public fun <init> (Lio/sentry/opentelemetry/IOtelSpanWrapper;)V
100+
public fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
99101
public fun finish ()V
100102
public fun finish (Lio/sentry/SpanStatus;)V
101103
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V

sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelStrongRefSpanWrapper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,4 +310,9 @@ public void setContext(@Nullable String key, @Nullable Object context) {
310310
public @Nullable Attributes getOpenTelemetrySpanAttributes() {
311311
return delegate.getOpenTelemetrySpanAttributes();
312312
}
313+
314+
@Override
315+
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {
316+
delegate.addFeatureFlag(flag, result);
317+
}
313318
}

sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,4 +309,9 @@ public void setName(@NotNull String name, @NotNull TransactionNameSource nameSou
309309
}
310310
return name;
311311
}
312+
313+
@Override
314+
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {
315+
rootSpan.addFeatureFlag(flag, result);
316+
}
312317
}

sentry-opentelemetry/sentry-opentelemetry-core/api/sentry-opentelemetry-core.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public final class io/sentry/opentelemetry/OtelSpanUtils {
5757

5858
public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/opentelemetry/IOtelSpanWrapper {
5959
public fun <init> (Lio/opentelemetry/sdk/trace/ReadWriteSpan;Lio/sentry/IScopes;Lio/sentry/SentryDate;Lio/sentry/TracesSamplingDecision;Lio/sentry/opentelemetry/IOtelSpanWrapper;Lio/sentry/SpanId;Lio/sentry/Baggage;)V
60+
public fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
6061
public fun finish ()V
6162
public fun finish (Lio/sentry/SpanStatus;)V
6263
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V

sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import io.sentry.SpanStatus;
2525
import io.sentry.TraceContext;
2626
import io.sentry.TracesSamplingDecision;
27+
import io.sentry.featureflags.IFeatureFlagBuffer;
28+
import io.sentry.featureflags.SpanFeatureFlagBuffer;
2729
import io.sentry.protocol.Contexts;
2830
import io.sentry.protocol.MeasurementValue;
2931
import io.sentry.protocol.SentryId;
@@ -75,6 +77,8 @@ public final class OtelSpanWrapper implements IOtelSpanWrapper {
7577

7678
private @NotNull Deque<ISentryLifecycleToken> tokensToCleanup = new ArrayDeque<>(1);
7779

80+
private final @NotNull IFeatureFlagBuffer featureFlags = SpanFeatureFlagBuffer.create();
81+
7882
public OtelSpanWrapper(
7983
final @NotNull ReadWriteSpan span,
8084
final @NotNull IScopes scopes,
@@ -505,6 +509,11 @@ public Map<String, MeasurementValue> getMeasurements() {
505509
return scopes;
506510
}
507511

512+
@Override
513+
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {
514+
featureFlags.add(flag, result);
515+
}
516+
508517
@Override
509518
public @NotNull Context storeInContext(Context context) {
510519
final @Nullable ReadWriteSpan otelSpan = getSpan();

sentry/api/sentry.api

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,6 +1089,7 @@ public abstract interface class io/sentry/ISocketTagger {
10891089
}
10901090

10911091
public abstract interface class io/sentry/ISpan {
1092+
public abstract fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
10921093
public abstract fun finish ()V
10931094
public abstract fun finish (Lio/sentry/SpanStatus;)V
10941095
public abstract fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
@@ -1779,6 +1780,7 @@ public final class io/sentry/NoOpSocketTagger : io/sentry/ISocketTagger {
17791780
}
17801781

17811782
public final class io/sentry/NoOpSpan : io/sentry/ISpan {
1783+
public fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
17821784
public fun finish ()V
17831785
public fun finish (Lio/sentry/SpanStatus;)V
17841786
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
@@ -1826,6 +1828,7 @@ public final class io/sentry/NoOpSpanFactory : io/sentry/ISpanFactory {
18261828
}
18271829

18281830
public final class io/sentry/NoOpTransaction : io/sentry/ITransaction {
1831+
public fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
18291832
public fun finish ()V
18301833
public fun finish (Lio/sentry/SpanStatus;)V
18311834
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
@@ -3853,6 +3856,7 @@ public final class io/sentry/SentryTraceHeader {
38533856
public final class io/sentry/SentryTracer : io/sentry/ITransaction {
38543857
public fun <init> (Lio/sentry/TransactionContext;Lio/sentry/IScopes;)V
38553858
public fun <init> (Lio/sentry/TransactionContext;Lio/sentry/IScopes;Lio/sentry/TransactionOptions;)V
3859+
public fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
38563860
public fun finish ()V
38573861
public fun finish (Lio/sentry/SpanStatus;)V
38583862
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
@@ -3993,13 +3997,15 @@ public final class io/sentry/ShutdownHookIntegration : io/sentry/Integration, ja
39933997

39943998
public final class io/sentry/Span : io/sentry/ISpan {
39953999
public fun <init> (Lio/sentry/TransactionContext;Lio/sentry/SentryTracer;Lio/sentry/IScopes;Lio/sentry/SpanOptions;)V
4000+
public fun addFeatureFlag (Ljava/lang/String;Ljava/lang/Boolean;)V
39964001
public fun finish ()V
39974002
public fun finish (Lio/sentry/SpanStatus;)V
39984003
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
39994004
public fun getContexts ()Lio/sentry/protocol/Contexts;
40004005
public fun getData ()Ljava/util/Map;
40014006
public fun getData (Ljava/lang/String;)Ljava/lang/Object;
40024007
public fun getDescription ()Ljava/lang/String;
4008+
public fun getFeatureFlagBuffer ()Lio/sentry/featureflags/IFeatureFlagBuffer;
40034009
public fun getFinishDate ()Lio/sentry/SentryDate;
40044010
public fun getMeasurements ()Ljava/util/Map;
40054011
public fun getOperation ()Ljava/lang/String;
@@ -4759,6 +4765,14 @@ public final class io/sentry/featureflags/NoOpFeatureFlagBuffer : io/sentry/feat
47594765
public static fun getInstance ()Lio/sentry/featureflags/NoOpFeatureFlagBuffer;
47604766
}
47614767

4768+
public final class io/sentry/featureflags/SpanFeatureFlagBuffer : io/sentry/featureflags/IFeatureFlagBuffer {
4769+
public fun add (Ljava/lang/String;Ljava/lang/Boolean;)V
4770+
public fun clone ()Lio/sentry/featureflags/IFeatureFlagBuffer;
4771+
public synthetic fun clone ()Ljava/lang/Object;
4772+
public static fun create ()Lio/sentry/featureflags/IFeatureFlagBuffer;
4773+
public fun getFeatureFlags ()Lio/sentry/protocol/FeatureFlags;
4774+
}
4775+
47624776
public abstract interface class io/sentry/hints/AbnormalExit {
47634777
public abstract fun ignoreCurrentThread ()Z
47644778
public abstract fun mechanism ()Ljava/lang/String;

sentry/src/main/java/io/sentry/CombinedScopeView.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,10 @@ public void setReplayId(@NotNull SentryId replayId) {
514514
@Override
515515
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {
516516
getDefaultWriteScope().addFeatureFlag(flag, result);
517+
final @Nullable ISpan span = getSpan();
518+
if (span != null) {
519+
span.addFeatureFlag(flag, result);
520+
}
517521
}
518522

519523
@Override

sentry/src/main/java/io/sentry/ISpan.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,4 +274,6 @@ ISpan startChild(
274274
@ApiStatus.Internal
275275
@NotNull
276276
ISentryLifecycleToken makeCurrent();
277+
278+
void addFeatureFlag(@Nullable String flag, @Nullable Boolean result);
277279
}

sentry/src/main/java/io/sentry/NoOpSpan.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,7 @@ public void setContext(@Nullable String key, @Nullable Object context) {}
189189
public @NotNull ISentryLifecycleToken makeCurrent() {
190190
return NoOpScopesLifecycleToken.getInstance();
191191
}
192+
193+
@Override
194+
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {}
192195
}

sentry/src/main/java/io/sentry/NoOpTransaction.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,7 @@ public boolean updateEndDate(final @NotNull SentryDate date) {
251251
public boolean isNoOp() {
252252
return true;
253253
}
254+
255+
@Override
256+
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {}
254257
}

0 commit comments

Comments
 (0)