Skip to content

Commit 178acf8

Browse files
authored
Merge 36ed84a into b3919bd
2 parents b3919bd + 36ed84a commit 178acf8

File tree

23 files changed

+364
-306
lines changed

23 files changed

+364
-306
lines changed

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ public final class io/sentry/opentelemetry/OtelContextScopesStorage : io/sentry/
1818

1919
public final class io/sentry/opentelemetry/OtelSpanFactory : io/sentry/ISpanFactory {
2020
public fun <init> ()V
21-
public fun createSpan (Ljava/lang/String;Lio/sentry/IScopes;Lio/sentry/SpanOptions;Lio/sentry/ISpan;)Lio/sentry/ISpan;
21+
public fun createSpan (Ljava/lang/String;Ljava/lang/String;Lio/sentry/IScopes;Lio/sentry/SpanOptions;Lio/sentry/ISpan;)Lio/sentry/ISpan;
2222
public fun createTransaction (Lio/sentry/TransactionContext;Lio/sentry/IScopes;Lio/sentry/TransactionOptions;Lio/sentry/TransactionPerformanceCollector;)Lio/sentry/ITransaction;
2323
public fun retrieveCurrentSpan (Lio/sentry/IScopes;)Lio/sentry/ISpan;
2424
}
2525

2626
public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/ISpan {
27-
public fun <init> (Lio/opentelemetry/api/trace/Span;Lio/sentry/IScopes;)V
27+
public fun <init> (Lio/opentelemetry/sdk/trace/ReadWriteSpan;Lio/sentry/IScopes;Lio/sentry/SentryDate;Lio/opentelemetry/api/trace/Span;)V
2828
public fun finish ()V
2929
public fun finish (Lio/sentry/SpanStatus;)V
3030
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
@@ -36,17 +36,18 @@ public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/ISpan {
3636
public fun getFinishDate ()Lio/sentry/SentryDate;
3737
public fun getLocalMetricsAggregator ()Lio/sentry/metrics/LocalMetricsAggregator;
3838
public fun getMeasurements ()Ljava/util/Map;
39-
public fun getName ()Ljava/lang/String;
40-
public fun getNameSource ()Lio/sentry/protocol/TransactionNameSource;
4139
public fun getOperation ()Ljava/lang/String;
4240
public fun getSamplingDecision ()Lio/sentry/TracesSamplingDecision;
4341
public fun getScopes ()Lio/sentry/IScopes;
4442
public fun getSpanContext ()Lio/sentry/SpanContext;
4543
public fun getStartDate ()Lio/sentry/SentryDate;
4644
public fun getStatus ()Lio/sentry/SpanStatus;
4745
public fun getTag (Ljava/lang/String;)Ljava/lang/String;
46+
public fun getTags ()Ljava/util/Map;
4847
public fun getThrowable ()Ljava/lang/Throwable;
4948
public fun getTraceId ()Lio/sentry/protocol/SentryId;
49+
public fun getTransactionName ()Ljava/lang/String;
50+
public fun getTransactionNameSource ()Lio/sentry/protocol/TransactionNameSource;
5051
public fun isFinished ()Z
5152
public fun isNoOp ()Z
5253
public fun isProfileSampled ()Ljava/lang/Boolean;
@@ -57,12 +58,12 @@ public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/ISpan {
5758
public fun setDescription (Ljava/lang/String;)V
5859
public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;)V
5960
public fun setMeasurement (Ljava/lang/String;Ljava/lang/Number;Lio/sentry/MeasurementUnit;)V
60-
public fun setName (Ljava/lang/String;)V
61-
public fun setName (Ljava/lang/String;Lio/sentry/protocol/TransactionNameSource;)V
6261
public fun setOperation (Ljava/lang/String;)V
6362
public fun setStatus (Lio/sentry/SpanStatus;)V
6463
public fun setTag (Ljava/lang/String;Ljava/lang/String;)V
6564
public fun setThrowable (Ljava/lang/Throwable;)V
65+
public fun setTransactionName (Ljava/lang/String;)V
66+
public fun setTransactionName (Ljava/lang/String;Lio/sentry/protocol/TransactionNameSource;)V
6667
public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan;
6768
public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan;
6869
public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan;
@@ -75,7 +76,7 @@ public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/ISpan {
7576
}
7677

7778
public final class io/sentry/opentelemetry/OtelTransactionSpanForwarder : io/sentry/ITransaction {
78-
public fun <init> (Lio/sentry/ISpan;)V
79+
public fun <init> (Lio/sentry/opentelemetry/OtelSpanWrapper;)V
7980
public fun finish ()V
8081
public fun finish (Lio/sentry/SpanStatus;)V
8182
public fun finish (Lio/sentry/SpanStatus;Lio/sentry/SentryDate;)V
@@ -89,7 +90,6 @@ public final class io/sentry/opentelemetry/OtelTransactionSpanForwarder : io/sen
8990
public fun getLatestActiveSpan ()Lio/sentry/ISpan;
9091
public fun getLocalMetricsAggregator ()Lio/sentry/metrics/LocalMetricsAggregator;
9192
public fun getName ()Ljava/lang/String;
92-
public fun getNameSource ()Lio/sentry/protocol/TransactionNameSource;
9393
public fun getOperation ()Ljava/lang/String;
9494
public fun getSamplingDecision ()Lio/sentry/TracesSamplingDecision;
9595
public fun getSpanContext ()Lio/sentry/SpanContext;

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

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@
44
import io.opentelemetry.api.trace.Span;
55
import io.opentelemetry.api.trace.SpanBuilder;
66
import io.opentelemetry.api.trace.Tracer;
7+
import io.opentelemetry.context.Context;
78
import io.sentry.IScopes;
89
import io.sentry.ISpan;
910
import io.sentry.ISpanFactory;
1011
import io.sentry.ITransaction;
12+
import io.sentry.NoOpSpan;
13+
import io.sentry.NoOpTransaction;
14+
import io.sentry.SentryDate;
1115
import io.sentry.SpanOptions;
1216
import io.sentry.TransactionContext;
1317
import io.sentry.TransactionOptions;
1418
import io.sentry.TransactionPerformanceCollector;
19+
import java.util.concurrent.TimeUnit;
1520
import org.jetbrains.annotations.ApiStatus;
1621
import org.jetbrains.annotations.NotNull;
1722
import org.jetbrains.annotations.Nullable;
@@ -27,13 +32,33 @@ public final class OtelSpanFactory implements ISpanFactory {
2732
@NotNull IScopes scopes,
2833
@NotNull TransactionOptions transactionOptions,
2934
@Nullable TransactionPerformanceCollector transactionPerformanceCollector) {
30-
final @NotNull ISpan span = createSpan(context.getName(), scopes, transactionOptions, null);
35+
final @Nullable OtelSpanWrapper span =
36+
createSpanInternal(
37+
context.getName(), context.getDescription(), scopes, transactionOptions, null);
38+
if (span == null) {
39+
return NoOpTransaction.getInstance();
40+
}
3141
return new OtelTransactionSpanForwarder(span);
3242
}
3343

3444
@Override
3545
public @NotNull ISpan createSpan(
3646
final @NotNull String name,
47+
final @Nullable String description,
48+
final @NotNull IScopes scopes,
49+
final @NotNull SpanOptions spanOptions,
50+
final @Nullable ISpan parentSpan) {
51+
final @Nullable OtelSpanWrapper span =
52+
createSpanInternal(name, description, scopes, spanOptions, parentSpan);
53+
if (span == null) {
54+
return NoOpSpan.getInstance();
55+
}
56+
return span;
57+
}
58+
59+
private @Nullable OtelSpanWrapper createSpanInternal(
60+
final @NotNull String name,
61+
final @Nullable String description,
3762
final @NotNull IScopes scopes,
3863
final @NotNull SpanOptions spanOptions,
3964
final @Nullable ISpan parentSpan) {
@@ -46,15 +71,28 @@ public final class OtelSpanFactory implements ISpanFactory {
4671
// spanBuilder.setParent()
4772
}
4873
}
49-
// TODO [POTEL] start timestamp
50-
final @NotNull Span span = spanBuilder.startSpan();
51-
return new OtelSpanWrapper(span, scopes);
74+
75+
final @Nullable SentryDate startTimestampFromOptions = spanOptions.getStartTimestamp();
76+
final @NotNull SentryDate startTimestamp =
77+
startTimestampFromOptions == null
78+
? scopes.getOptions().getDateProvider().now()
79+
: startTimestampFromOptions;
80+
spanBuilder.setStartTimestamp(startTimestamp.nanoTimestamp(), TimeUnit.NANOSECONDS);
81+
82+
final @NotNull Span otelSpan = spanBuilder.startSpan();
83+
final @Nullable OtelSpanWrapper sentrySpan = storage.getSentrySpan(otelSpan.getSpanContext());
84+
if (sentrySpan != null && description != null) {
85+
sentrySpan.setDescription(description);
86+
}
87+
return sentrySpan;
5288
}
5389

5490
@Override
5591
public @Nullable ISpan retrieveCurrentSpan(IScopes scopes) {
56-
// TODO [POTEL] should we use Context.fromContextOrNull and read span from there?
57-
final @NotNull Span span = Span.current();
92+
final @Nullable Span span = Span.fromContextOrNull(Context.current());
93+
if (span == null) {
94+
return null;
95+
}
5896
return storage.getSentrySpan(span.getSpanContext());
5997
}
6098

0 commit comments

Comments
 (0)