github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/util/opentelemetry/opentracing.go (about)

     1  package opentelemetry
     2  
     3  import (
     4  	"strings"
     5  
     6  	mmd "github.com/tickoalcantara12/micro/v3/service/context/metadata"
     7  	"github.com/opentracing/opentracing-go"
     8  )
     9  
    10  var (
    11  	// DefaultOpenTracer is what anything using an opentracing.Tracer will access:
    12  	DefaultOpenTracer opentracing.Tracer = new(opentracing.NoopTracer)
    13  )
    14  
    15  // MicroMetadataReaderWriter satisfies both the opentracing.TextMapReader and
    16  // opentracing.TextMapWriter interfaces.
    17  type MicroMetadataReaderWriter struct {
    18  	mmd.Metadata
    19  }
    20  
    21  func (w MicroMetadataReaderWriter) Set(key, val string) {
    22  	// The GRPC HPACK implementation rejects any uppercase keys here.
    23  	//
    24  	// As such, since the HTTP_HEADERS format is case-insensitive anyway, we
    25  	// blindly lowercase the key (which is guaranteed to work in the
    26  	// Inject/Extract sense per the OpenTracing spec).
    27  	key = strings.ToLower(key)
    28  	w.Metadata.Set(key, val)
    29  }
    30  
    31  func (w MicroMetadataReaderWriter) ForeachKey(handler func(key, val string) error) error {
    32  	for k, v := range w.Metadata {
    33  		if err := handler(k, v); err != nil {
    34  			return err
    35  		}
    36  	}
    37  
    38  	return nil
    39  }