59 lines
1.6 KiB
Java
59 lines
1.6 KiB
Java
package datadog.opentracing.scopemanager;
|
|
|
|
import datadog.trace.context.ScopeListener;
|
|
import io.opentracing.Span;
|
|
|
|
/** Simple scope implementation which does not propagate across threads. */
|
|
public class SimpleScope implements DDScope {
|
|
private final ContextualScopeManager scopeManager;
|
|
private final Span spanUnderScope;
|
|
private final boolean finishOnClose;
|
|
private final DDScope toRestore;
|
|
private final int depth;
|
|
|
|
public SimpleScope(
|
|
final ContextualScopeManager scopeManager,
|
|
final Span spanUnderScope,
|
|
final boolean finishOnClose) {
|
|
assert spanUnderScope != null : "span must not be null";
|
|
this.scopeManager = scopeManager;
|
|
this.spanUnderScope = spanUnderScope;
|
|
this.finishOnClose = finishOnClose;
|
|
toRestore = scopeManager.tlsScope.get();
|
|
scopeManager.tlsScope.set(this);
|
|
depth = toRestore == null ? 0 : toRestore.depth() + 1;
|
|
for (final ScopeListener listener : scopeManager.scopeListeners) {
|
|
listener.afterScopeActivated();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void close() {
|
|
if (finishOnClose) {
|
|
spanUnderScope.finish();
|
|
}
|
|
for (final ScopeListener listener : scopeManager.scopeListeners) {
|
|
listener.afterScopeClosed();
|
|
}
|
|
|
|
if (scopeManager.tlsScope.get() == this) {
|
|
scopeManager.tlsScope.set(toRestore);
|
|
if (toRestore != null) {
|
|
for (final ScopeListener listener : scopeManager.scopeListeners) {
|
|
listener.afterScopeActivated();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Span span() {
|
|
return spanUnderScope;
|
|
}
|
|
|
|
@Override
|
|
public int depth() {
|
|
return depth;
|
|
}
|
|
}
|