Class SdkSpanBuilder
- java.lang.Object
-
- io.opentelemetry.sdk.trace.SdkSpanBuilder
-
- All Implemented Interfaces:
ExtendedSpanBuilder,SpanBuilder
final class SdkSpanBuilder extends java.lang.Object implements ExtendedSpanBuilder
SdkSpanBuilderis SDK implementation ofSpanBuilder.
-
-
Field Summary
Fields Modifier and Type Field Description private AttributesMapattributesprivate InstrumentationScopeInfoinstrumentationScopeInfoprivate java.util.List<LinkData>linksprivate Contextparentprivate SpanKindspanKindprivate SpanLimitsspanLimitsprivate java.lang.StringspanNameprivate longstartEpochNanosprivate inttotalNumberOfLinksAddedprivate TracerSharedStatetracerSharedState
-
Constructor Summary
Constructors Constructor Description SdkSpanBuilder(java.lang.String spanName, InstrumentationScopeInfo instrumentationScopeInfo, TracerSharedState tracerSharedState, SpanLimits spanLimits)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ExtendedSpanBuilderaddLink(SpanContext spanContext)Adds a link to the newly createdSpan.ExtendedSpanBuilderaddLink(SpanContext spanContext, Attributes attributes)Adds a link to the newly createdSpan.private voidaddLink(LinkData link)private AttributesMapattributes()(package private) static booleanisRecording(SamplingDecision decision)(package private) static booleanisSampled(SamplingDecision decision)<T> ExtendedSpanBuildersetAttribute(AttributeKey<T> key, T value)Sets an attribute to the newly createdSpan.ExtendedSpanBuildersetAttribute(java.lang.String key, boolean value)Sets an attribute to the newly createdSpan.ExtendedSpanBuildersetAttribute(java.lang.String key, double value)Sets an attribute to the newly createdSpan.ExtendedSpanBuildersetAttribute(java.lang.String key, long value)Sets an attribute to the newly createdSpan.ExtendedSpanBuildersetAttribute(java.lang.String key, java.lang.String value)Sets an attribute to the newly createdSpan.ExtendedSpanBuildersetNoParent()Sets the option to become a rootSpanfor a new trace.ExtendedSpanBuildersetParent(Context context)Sets the parent to use from the specifiedContext.ExtendedSpanBuildersetParentFrom(ContextPropagators propagators, java.util.Map<java.lang.String,java.lang.String> carrier)Extract a span context from the given carrier and set it as parent of the span forExtendedSpanBuilder.startAndCall(SpanCallable)andExtendedSpanBuilder.startAndRun(SpanRunnable).private static voidsetSpanError(Span span, java.lang.Throwable exception)Marks a span as error.ExtendedSpanBuildersetSpanKind(SpanKind spanKind)Sets theSpanKindfor the newly createdSpan.ExtendedSpanBuildersetStartTimestamp(long startTimestamp, java.util.concurrent.TimeUnit unit)Sets an explicit start timestamp for the newly createdSpan.<T,E extends java.lang.Throwable>
TstartAndCall(SpanCallable<T,E> spanCallable)Runs the givenSpanCallableinside of the span created by the givenSpanBuilder.<T,E extends java.lang.Throwable>
TstartAndCall(SpanCallable<T,E> spanCallable, java.util.function.BiConsumer<Span,java.lang.Throwable> handleException)Runs the givenSpanCallableinside of the span created by the givenSpanBuilder.<E extends java.lang.Throwable>
voidstartAndRun(SpanRunnable<E> runnable)Runs the givenSpanRunnableinside of the span created by the givenSpanBuilder.<E extends java.lang.Throwable>
voidstartAndRun(SpanRunnable<E> runnable, java.util.function.BiConsumer<Span,java.lang.Throwable> handleException)Runs the givenSpanRunnableinside of the span created by the givenSpanBuilder.SpanstartSpan()Starts a newSpan.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.opentelemetry.api.incubator.trace.ExtendedSpanBuilder
setAllAttributes, setStartTimestamp
-
-
-
-
Field Detail
-
spanName
private final java.lang.String spanName
-
instrumentationScopeInfo
private final InstrumentationScopeInfo instrumentationScopeInfo
-
tracerSharedState
private final TracerSharedState tracerSharedState
-
spanLimits
private final SpanLimits spanLimits
-
parent
@Nullable private Context parent
-
spanKind
private SpanKind spanKind
-
attributes
@Nullable private AttributesMap attributes
-
links
@Nullable private java.util.List<LinkData> links
-
totalNumberOfLinksAdded
private int totalNumberOfLinksAdded
-
startEpochNanos
private long startEpochNanos
-
-
Constructor Detail
-
SdkSpanBuilder
SdkSpanBuilder(java.lang.String spanName, InstrumentationScopeInfo instrumentationScopeInfo, TracerSharedState tracerSharedState, SpanLimits spanLimits)
-
-
Method Detail
-
setParent
public ExtendedSpanBuilder setParent(Context context)
Description copied from interface:ExtendedSpanBuilderSets the parent to use from the specifiedContext. If not set, the value ofSpan.current()atSpanBuilder.startSpan()time will be used as parent.If no
Spanis available in the specifiedContext, the resultingSpanwill become a root instance, as ifSpanBuilder.setNoParent()had been called.If called multiple times, only the last specified value will be used. Observe that the state defined by a previous call to
SpanBuilder.setNoParent()will be discarded.- Specified by:
setParentin interfaceExtendedSpanBuilder- Specified by:
setParentin interfaceSpanBuilder- Parameters:
context- theContext.- Returns:
- this.
-
setNoParent
public ExtendedSpanBuilder setNoParent()
Description copied from interface:ExtendedSpanBuilderSets the option to become a rootSpanfor a new trace. If not set, the value ofSpan.current()atSpanBuilder.startSpan()time will be used as parent.Observe that any previously set parent will be discarded.
- Specified by:
setNoParentin interfaceExtendedSpanBuilder- Specified by:
setNoParentin interfaceSpanBuilder- Returns:
- this.
-
setSpanKind
public ExtendedSpanBuilder setSpanKind(SpanKind spanKind)
Description copied from interface:ExtendedSpanBuilderSets theSpanKindfor the newly createdSpan. If not called, the implementation will provide a default valueSpanKind.INTERNAL.- Specified by:
setSpanKindin interfaceExtendedSpanBuilder- Specified by:
setSpanKindin interfaceSpanBuilder- Parameters:
spanKind- the kind of the newly createdSpan.- Returns:
- this.
-
addLink
public ExtendedSpanBuilder addLink(SpanContext spanContext)
Description copied from interface:ExtendedSpanBuilderAdds a link to the newly createdSpan.Links are used to link
Spans in different traces. Used (for example) in batching operations, where a single batch handler processes multiple requests from different traces or the same trace.Implementations may ignore calls with an invalid span context.
- Specified by:
addLinkin interfaceExtendedSpanBuilder- Specified by:
addLinkin interfaceSpanBuilder- Parameters:
spanContext- the context of the linkedSpan.- Returns:
- this.
-
addLink
public ExtendedSpanBuilder addLink(SpanContext spanContext, Attributes attributes)
Description copied from interface:ExtendedSpanBuilderAdds a link to the newly createdSpan.Links are used to link
Spans in different traces. Used (for example) in batching operations, where a single batch handler processes multiple requests from different traces or the same trace.Implementations may ignore calls with an invalid span context.
- Specified by:
addLinkin interfaceExtendedSpanBuilder- Specified by:
addLinkin interfaceSpanBuilder- Parameters:
spanContext- the context of the linkedSpan.attributes- the attributes of theLink.- Returns:
- this.
-
addLink
private void addLink(LinkData link)
-
setAttribute
public ExtendedSpanBuilder setAttribute(java.lang.String key, java.lang.String value)
Description copied from interface:ExtendedSpanBuilderSets an attribute to the newly createdSpan. IfSpanBuilderpreviously contained a mapping for the key, the old value is replaced by the specified value.If a null or empty String
valueis passed in, the behavior is undefined, and hence strongly discouraged.Note: It is strongly recommended to use
SpanBuilder.setAttribute(AttributeKey, Object), and pre-allocate your keys, if possible.- Specified by:
setAttributein interfaceExtendedSpanBuilder- Specified by:
setAttributein interfaceSpanBuilder- Parameters:
key- the key for this attribute.value- the value for this attribute.- Returns:
- this.
-
setAttribute
public ExtendedSpanBuilder setAttribute(java.lang.String key, long value)
Description copied from interface:ExtendedSpanBuilderSets an attribute to the newly createdSpan. IfSpanBuilderpreviously contained a mapping for the key, the old value is replaced by the specified value.Note: It is strongly recommended to use
SpanBuilder.setAttribute(AttributeKey, Object), and pre-allocate your keys, if possible.- Specified by:
setAttributein interfaceExtendedSpanBuilder- Specified by:
setAttributein interfaceSpanBuilder- Parameters:
key- the key for this attribute.value- the value for this attribute.- Returns:
- this.
-
setAttribute
public ExtendedSpanBuilder setAttribute(java.lang.String key, double value)
Description copied from interface:ExtendedSpanBuilderSets an attribute to the newly createdSpan. IfSpanBuilderpreviously contained a mapping for the key, the old value is replaced by the specified value.Note: It is strongly recommended to use
SpanBuilder.setAttribute(AttributeKey, Object), and pre-allocate your keys, if possible.- Specified by:
setAttributein interfaceExtendedSpanBuilder- Specified by:
setAttributein interfaceSpanBuilder- Parameters:
key- the key for this attribute.value- the value for this attribute.- Returns:
- this.
-
setAttribute
public ExtendedSpanBuilder setAttribute(java.lang.String key, boolean value)
Description copied from interface:ExtendedSpanBuilderSets an attribute to the newly createdSpan. IfSpanBuilderpreviously contained a mapping for the key, the old value is replaced by the specified value.Note: It is strongly recommended to use
SpanBuilder.setAttribute(AttributeKey, Object), and pre-allocate your keys, if possible.- Specified by:
setAttributein interfaceExtendedSpanBuilder- Specified by:
setAttributein interfaceSpanBuilder- Parameters:
key- the key for this attribute.value- the value for this attribute.- Returns:
- this.
-
setAttribute
public <T> ExtendedSpanBuilder setAttribute(AttributeKey<T> key, T value)
Description copied from interface:ExtendedSpanBuilderSets an attribute to the newly createdSpan. IfSpanBuilderpreviously contained a mapping for the key, the old value is replaced by the specified value.Note: the behavior of null values is undefined, and hence strongly discouraged.
- Specified by:
setAttributein interfaceExtendedSpanBuilder- Specified by:
setAttributein interfaceSpanBuilder- Parameters:
key- the key for this attribute.value- the value for this attribute.- Returns:
- this.
-
setStartTimestamp
public ExtendedSpanBuilder setStartTimestamp(long startTimestamp, java.util.concurrent.TimeUnit unit)
Description copied from interface:ExtendedSpanBuilderSets an explicit start timestamp for the newly createdSpan.LIRInstruction.Use this method to specify an explicit start timestamp. If not called, the implementation will use the timestamp value at
SpanBuilder.startSpan()time, which should be the default case.Important this is NOT equivalent with System.nanoTime().
- Specified by:
setStartTimestampin interfaceExtendedSpanBuilder- Specified by:
setStartTimestampin interfaceSpanBuilder- Parameters:
startTimestamp- the explicit start timestamp from the epoch of the newly createdSpan.unit- the unit of the timestamp.- Returns:
- this.
-
setParentFrom
public ExtendedSpanBuilder setParentFrom(ContextPropagators propagators, java.util.Map<java.lang.String,java.lang.String> carrier)
Description copied from interface:ExtendedSpanBuilderExtract a span context from the given carrier and set it as parent of the span forExtendedSpanBuilder.startAndCall(SpanCallable)andExtendedSpanBuilder.startAndRun(SpanRunnable).The span context will be extracted from the
carrier, which you usually get from HTTP headers of the metadata of a message you're processing.- Specified by:
setParentFromin interfaceExtendedSpanBuilder- Parameters:
propagators- provide the propagators fromOpenTelemetry.getPropagators()carrier- the string map where to extract the span context from
-
startSpan
public Span startSpan()
Description copied from interface:SpanBuilderStarts a newSpan.Users must manually call
Span.end()to end thisSpan.Does not install the newly created
Spanto the current Context.IMPORTANT: This method can be called only once per
SpanBuilderinstance and as the last method called. After this method is called calling any method is undefined behavior.Example of usage:
class MyClass { private final Tracer tracer; MyClass(OpenTelemetry openTelemetry) { tracer = openTelemetry.getTracer("com.example.rpc"); } void doWork(Span parent) { Span childSpan = tracer.spanBuilder("MyChildSpan") .setParent(Context.current().with(parent)) .startSpan(); childSpan.addEvent("my event"); try { doSomeWork(childSpan); // Manually propagate the new span down the stack. } finally { // To make sure we end the span even in case of an exception. childSpan.end(); // Manually end the span. } } }- Specified by:
startSpanin interfaceSpanBuilder- Returns:
- the newly created
Span.
-
startAndCall
public <T,E extends java.lang.Throwable> T startAndCall(SpanCallable<T,E> spanCallable) throws E extends java.lang.Throwable
Description copied from interface:ExtendedSpanBuilderRuns the givenSpanCallableinside of the span created by the givenSpanBuilder. The span will be ended at the end of theSpanCallable.If an exception is thrown by the
SpanCallable, the span will be marked as error, and the exception will be recorded.- Specified by:
startAndCallin interfaceExtendedSpanBuilder- Type Parameters:
T- the type of the resultE- the type of the exception- Parameters:
spanCallable- theSpanCallableto call- Returns:
- the result of the
SpanCallable - Throws:
E extends java.lang.Throwable
-
startAndCall
public <T,E extends java.lang.Throwable> T startAndCall(SpanCallable<T,E> spanCallable, java.util.function.BiConsumer<Span,java.lang.Throwable> handleException) throws E extends java.lang.Throwable
Description copied from interface:ExtendedSpanBuilderRuns the givenSpanCallableinside of the span created by the givenSpanBuilder. The span will be ended at the end of theSpanCallable.If an exception is thrown by the
SpanCallable, thehandleExceptionconsumer will be called, giving you the opportunity to handle the exception and span in a custom way, e.g. not marking the span as error.- Specified by:
startAndCallin interfaceExtendedSpanBuilder- Type Parameters:
T- the type of the resultE- the type of the exception- Parameters:
spanCallable- theSpanCallableto callhandleException- the consumer to call when an exception is thrown- Returns:
- the result of the
SpanCallable - Throws:
E extends java.lang.Throwable
-
startAndRun
public <E extends java.lang.Throwable> void startAndRun(SpanRunnable<E> runnable) throws E extends java.lang.Throwable
Description copied from interface:ExtendedSpanBuilderRuns the givenSpanRunnableinside of the span created by the givenSpanBuilder. The span will be ended at the end of theSpanRunnable.If an exception is thrown by the
SpanRunnable, the span will be marked as error, and the exception will be recorded.- Specified by:
startAndRunin interfaceExtendedSpanBuilder- Type Parameters:
E- the type of the exception- Parameters:
runnable- theSpanRunnableto run- Throws:
E extends java.lang.Throwable
-
startAndRun
public <E extends java.lang.Throwable> void startAndRun(SpanRunnable<E> runnable, java.util.function.BiConsumer<Span,java.lang.Throwable> handleException) throws E extends java.lang.Throwable
Description copied from interface:ExtendedSpanBuilderRuns the givenSpanRunnableinside of the span created by the givenSpanBuilder. The span will be ended at the end of theSpanRunnable.If an exception is thrown by the
SpanRunnable, thehandleExceptionconsumer will be called, giving you the opportunity to handle the exception and span in a custom way, e.g. not marking the span as error.- Specified by:
startAndRunin interfaceExtendedSpanBuilder- Type Parameters:
E- the type of the exception- Parameters:
runnable- theSpanRunnableto run- Throws:
E extends java.lang.Throwable
-
attributes
private AttributesMap attributes()
-
isRecording
static boolean isRecording(SamplingDecision decision)
-
isSampled
static boolean isSampled(SamplingDecision decision)
-
setSpanError
private static void setSpanError(Span span, java.lang.Throwable exception)
Marks a span as error. This is the default exception handler.- Parameters:
span- the spanexception- the exception that caused the error
-
-