github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/fvm/tracing/tracer_span.go (about)

     1  package tracing
     2  
     3  import (
     4  	otelTrace "go.opentelemetry.io/otel/trace"
     5  
     6  	"github.com/onflow/flow-go/module"
     7  	"github.com/onflow/flow-go/module/trace"
     8  )
     9  
    10  type TracerSpan struct {
    11  	module.Tracer
    12  
    13  	otelTrace.Span
    14  
    15  	ExtensiveTracing bool
    16  }
    17  
    18  func NewTracerSpan() TracerSpan {
    19  	return TracerSpan{}
    20  }
    21  
    22  func NewMockTracerSpan() TracerSpan {
    23  	return TracerSpan{
    24  		Span: trace.NoopSpan,
    25  	}
    26  }
    27  
    28  func (tracer TracerSpan) isTraceable() bool {
    29  	return tracer.Tracer != nil && tracer.Span != nil
    30  }
    31  
    32  func (tracer TracerSpan) StartChildSpan(
    33  	name trace.SpanName,
    34  	options ...otelTrace.SpanStartOption,
    35  ) TracerSpan {
    36  	child := trace.NoopSpan
    37  	if tracer.isTraceable() {
    38  		child = tracer.Tracer.StartSpanFromParent(tracer.Span, name, options...)
    39  	}
    40  
    41  	return TracerSpan{
    42  		Tracer:           tracer.Tracer,
    43  		Span:             child,
    44  		ExtensiveTracing: tracer.ExtensiveTracing,
    45  	}
    46  }
    47  
    48  func (tracer TracerSpan) StartExtensiveTracingChildSpan(
    49  	name trace.SpanName,
    50  	options ...otelTrace.SpanStartOption,
    51  ) TracerSpan {
    52  	child := trace.NoopSpan
    53  	if tracer.isTraceable() && tracer.ExtensiveTracing {
    54  		child = tracer.Tracer.StartSpanFromParent(tracer.Span, name, options...)
    55  	}
    56  
    57  	return TracerSpan{
    58  		Tracer:           tracer.Tracer,
    59  		Span:             child,
    60  		ExtensiveTracing: tracer.ExtensiveTracing,
    61  	}
    62  }