Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
import io.opentelemetry.api.trace.TraceId;
import io.sentry.EventProcessor;
import io.sentry.Hint;
import io.sentry.HubAdapter;
import io.sentry.IHub;
import io.sentry.IScopes;
import io.sentry.ISpan;
import io.sentry.Instrumenter;
import io.sentry.ScopesAdapter;
import io.sentry.SentryEvent;
import io.sentry.SentryLevel;
import io.sentry.SentrySpanStorage;
Expand All @@ -20,21 +20,21 @@

public final class OpenTelemetryLinkErrorEventProcessor implements EventProcessor {

private final @NotNull IHub hub;
private final @NotNull IScopes scopes;
private final @NotNull SentrySpanStorage spanStorage = SentrySpanStorage.getInstance();

public OpenTelemetryLinkErrorEventProcessor() {
this(HubAdapter.getInstance());
this(ScopesAdapter.getInstance());
}

@TestOnly
OpenTelemetryLinkErrorEventProcessor(final @NotNull IHub hub) {
this.hub = hub;
OpenTelemetryLinkErrorEventProcessor(final @NotNull IScopes scopes) {
this.scopes = scopes;
}

@Override
public @Nullable SentryEvent process(final @NotNull SentryEvent event, final @NotNull Hint hint) {
final @NotNull Instrumenter instrumenter = hub.getOptions().getInstrumenter();
final @NotNull Instrumenter instrumenter = scopes.getOptions().getInstrumenter();
if (Instrumenter.OTEL.equals(instrumenter)) {
@NotNull final Span otelSpan = Span.current();
@NotNull final String traceId = otelSpan.getSpanContext().getTraceId();
Expand All @@ -55,7 +55,8 @@ public OpenTelemetryLinkErrorEventProcessor() {
null);

event.getContexts().setTrace(spanContext);
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -64,7 +65,8 @@ public OpenTelemetryLinkErrorEventProcessor() {
spanId,
traceId);
} else {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -74,7 +76,8 @@ public OpenTelemetryLinkErrorEventProcessor() {
traceId);
}
} else {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -84,7 +87,8 @@ public OpenTelemetryLinkErrorEventProcessor() {
spanId);
}
} else {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
import io.opentelemetry.context.propagation.TextMapSetter;
import io.sentry.Baggage;
import io.sentry.BaggageHeader;
import io.sentry.HubAdapter;
import io.sentry.IHub;
import io.sentry.IScopes;
import io.sentry.ISpan;
import io.sentry.ScopesAdapter;
import io.sentry.SentryLevel;
import io.sentry.SentrySpanStorage;
import io.sentry.SentryTraceHeader;
Expand All @@ -29,14 +29,14 @@ public final class SentryPropagator implements TextMapPropagator {
private static final @NotNull List<String> FIELDS =
Arrays.asList(SentryTraceHeader.SENTRY_TRACE_HEADER, BaggageHeader.BAGGAGE_HEADER);
private final @NotNull SentrySpanStorage spanStorage = SentrySpanStorage.getInstance();
private final @NotNull IHub hub;
private final @NotNull IScopes scopes;

public SentryPropagator() {
this(HubAdapter.getInstance());
this(ScopesAdapter.getInstance());
}

SentryPropagator(final @NotNull IHub hub) {
this.hub = hub;
SentryPropagator(final @NotNull IScopes scopes) {
this.scopes = scopes;
}

@Override
Expand All @@ -49,7 +49,8 @@ public <C> void inject(final Context context, final C carrier, final TextMapSett
final @NotNull Span otelSpan = Span.fromContext(context);
final @NotNull SpanContext otelSpanContext = otelSpan.getSpanContext();
if (!otelSpanContext.isValid()) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -58,7 +59,8 @@ public <C> void inject(final Context context, final C carrier, final TextMapSett
}
final @Nullable ISpan sentrySpan = spanStorage.get(otelSpanContext.getSpanId());
if (sentrySpan == null || sentrySpan.isNoOp()) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand Down Expand Up @@ -106,13 +108,15 @@ public <C> Context extract(
Span wrappedSpan = Span.wrap(otelSpanContext);
modifiedContext = modifiedContext.with(wrappedSpan);

hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(SentryLevel.DEBUG, "Continuing Sentry trace %s", sentryTraceHeader.getTraceId());

return modifiedContext;
} catch (InvalidSentryTraceHeaderException e) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.ERROR,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
import io.opentelemetry.semconv.SemanticAttributes;
import io.sentry.Baggage;
import io.sentry.DsnUtil;
import io.sentry.HubAdapter;
import io.sentry.IHub;
import io.sentry.IScopes;
import io.sentry.ISpan;
import io.sentry.ITransaction;
import io.sentry.Instrumenter;
import io.sentry.PropagationContext;
import io.sentry.ScopesAdapter;
import io.sentry.SentryDate;
import io.sentry.SentryLevel;
import io.sentry.SentryLongDate;
Expand Down Expand Up @@ -46,14 +46,14 @@ public final class SentrySpanProcessor implements SpanProcessor {
private final @NotNull SpanDescriptionExtractor spanDescriptionExtractor =
new SpanDescriptionExtractor();
private final @NotNull SentrySpanStorage spanStorage = SentrySpanStorage.getInstance();
private final @NotNull IHub hub;
private final @NotNull IScopes scopes;

public SentrySpanProcessor() {
this(HubAdapter.getInstance());
this(ScopesAdapter.getInstance());
}

SentrySpanProcessor(final @NotNull IHub hub) {
this.hub = hub;
SentrySpanProcessor(final @NotNull IScopes scopes) {
this.scopes = scopes;
}

@Override
Expand All @@ -65,7 +65,8 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri
final @NotNull TraceData traceData = getTraceData(otelSpan, parentContext);

if (isSentryRequest(otelSpan)) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -78,7 +79,8 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri
traceData.getParentSpanId() == null ? null : spanStorage.get(traceData.getParentSpanId());

if (sentryParentSpan != null) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -94,7 +96,8 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri
sentryChildSpan.getSpanContext().setOrigin(TRACE_ORIGN);
spanStorage.store(traceData.getSpanId(), sentryChildSpan);
} else {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand Down Expand Up @@ -123,7 +126,7 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri
transactionOptions.setStartTimestamp(
new SentryLongDate(otelSpan.toSpanData().getStartEpochNanos()));

ISpan sentryTransaction = hub.startTransaction(transactionContext, transactionOptions);
ISpan sentryTransaction = scopes.startTransaction(transactionContext, transactionOptions);
sentryTransaction.getSpanContext().setOrigin(TRACE_ORIGN);
spanStorage.store(traceData.getSpanId(), sentryTransaction);
}
Expand All @@ -144,7 +147,8 @@ public void onEnd(final @NotNull ReadableSpan otelSpan) {
final @Nullable ISpan sentrySpan = spanStorage.removeAndGet(traceData.getSpanId());

if (sentrySpan == null) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -155,7 +159,8 @@ public void onEnd(final @NotNull ReadableSpan otelSpan) {
}

if (isSentryRequest(otelSpan)) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -168,7 +173,8 @@ public void onEnd(final @NotNull ReadableSpan otelSpan) {
if (sentrySpan instanceof ITransaction) {
final @NotNull ITransaction sentryTransaction = (ITransaction) sentrySpan;
updateTransactionWithOtelData(sentryTransaction, otelSpan);
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -178,7 +184,8 @@ public void onEnd(final @NotNull ReadableSpan otelSpan) {
traceData.getTraceId());
} else {
updateSpanWithOtelData(sentrySpan, otelSpan);
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -201,17 +208,19 @@ public boolean isEndRequired() {

private boolean ensurePrerequisites(final @NotNull ReadableSpan otelSpan) {
if (!hasSentryBeenInitialized()) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
"Not forwarding OpenTelemetry span to Sentry as Sentry has not yet been initialized.");
return false;
}

final @NotNull Instrumenter instrumenter = hub.getOptions().getInstrumenter();
final @NotNull Instrumenter instrumenter = scopes.getOptions().getInstrumenter();
if (!Instrumenter.OTEL.equals(instrumenter)) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -222,7 +231,8 @@ private boolean ensurePrerequisites(final @NotNull ReadableSpan otelSpan) {

final @NotNull SpanContext otelSpanContext = otelSpan.getSpanContext();
if (!otelSpanContext.isValid()) {
hub.getOptions()
scopes
.getOptions()
.getLogger()
.log(
SentryLevel.DEBUG,
Expand All @@ -241,7 +251,7 @@ private boolean isSentryRequest(final @NotNull ReadableSpan otelSpan) {
}

final @Nullable String httpUrl = otelSpan.getAttribute(SemanticAttributes.HTTP_URL);
return DsnUtil.urlContainsDsnHost(hub.getOptions(), httpUrl);
return DsnUtil.urlContainsDsnHost(scopes.getOptions(), httpUrl);
}

private @NotNull TraceData getTraceData(
Expand Down Expand Up @@ -334,7 +344,7 @@ private SpanStatus mapOtelStatus(final @NotNull ReadableSpan otelSpan) {
}

private boolean hasSentryBeenInitialized() {
return hub.isEnabled();
return scopes.isEnabled();
}

private @NotNull Map<String, Object> toMapWithStringKeys(final @Nullable Attributes attributes) {
Expand Down
Loading