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 }