You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-11-23 22:34:47 +02:00
Unify API Span Start/End Options (#1108)
* Unify API Span Start/End Options Replace both with `SpanOption`. Add a unified `SpanConfig` to match and a `SpanConfigure` function to parse a `SpanConfig` from `SpanOption`s. Update all the related options to use new `SpanOption`s. * No non-zero SpanConfig defaults The SDK uses an internal clock for the current time that cannot be use if it does not know the time has not been set. * Append attributes for WithAttributes This preserves existing behavior. * Add unit test for SpanConfigure * Propagate changes * Update append option documentation * Update testing comments * Move comments on guarantees to appropriate function * Add documentation for SDK methods Include SDK implementation specific information in the Tracer Start method and Span End method. * Add changes to Changelog * Apply suggestions from code review Co-authored-by: ET <evantorrie@users.noreply.github.com> * Update the SpanKind comment in the SpanConfig Try for a less tautological comment. Co-authored-by: ET <evantorrie@users.noreply.github.com>
This commit is contained in:
@@ -29,14 +29,16 @@ type tracer struct {
|
||||
|
||||
var _ apitrace.Tracer = &tracer{}
|
||||
|
||||
func (tr *tracer) Start(ctx context.Context, name string, o ...apitrace.StartOption) (context.Context, apitrace.Span) {
|
||||
var opts apitrace.StartConfig
|
||||
// Start starts a Span and returns it along with a context containing it.
|
||||
//
|
||||
// The Span is created with the provided name and as a child of any existing
|
||||
// span context found in the passed context. The created Span will be
|
||||
// configured appropriately by any SpanOption passed. Any Timestamp option
|
||||
// passed will be used as the start time of the Span's life-cycle.
|
||||
func (tr *tracer) Start(ctx context.Context, name string, options ...apitrace.SpanOption) (context.Context, apitrace.Span) {
|
||||
config := apitrace.SpanConfigure(options)
|
||||
|
||||
for _, op := range o {
|
||||
op(&opts)
|
||||
}
|
||||
|
||||
parentSpanContext, remoteParent, links := parent.GetSpanContextAndLinks(ctx, opts.NewRoot)
|
||||
parentSpanContext, remoteParent, links := parent.GetSpanContextAndLinks(ctx, config.NewRoot)
|
||||
|
||||
if p := apitrace.SpanFromContext(ctx); p != nil {
|
||||
if sdkSpan, ok := p.(*span); ok {
|
||||
@@ -44,14 +46,14 @@ func (tr *tracer) Start(ctx context.Context, name string, o ...apitrace.StartOpt
|
||||
}
|
||||
}
|
||||
|
||||
span := startSpanInternal(tr, name, parentSpanContext, remoteParent, opts)
|
||||
span := startSpanInternal(tr, name, parentSpanContext, remoteParent, config)
|
||||
for _, l := range links {
|
||||
span.addLink(l)
|
||||
}
|
||||
for _, l := range opts.Links {
|
||||
for _, l := range config.Links {
|
||||
span.addLink(l)
|
||||
}
|
||||
span.SetAttributes(opts.Attributes...)
|
||||
span.SetAttributes(config.Attributes...)
|
||||
|
||||
span.tracer = tr
|
||||
|
||||
|
||||
Reference in New Issue
Block a user