1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package trace
- import (
- "context"
- "go.opentelemetry.io/otel/baggage"
- "go.opentelemetry.io/otel/propagation"
- sdktrace "go.opentelemetry.io/otel/trace"
- "google.golang.org/grpc/metadata"
- )
- // assert that metadataSupplier implements the TextMapCarrier interface
- var _ propagation.TextMapCarrier = (*metadataSupplier)(nil)
- type metadataSupplier struct {
- metadata *metadata.MD
- }
- func (s *metadataSupplier) Get(key string) string {
- values := s.metadata.Get(key)
- if len(values) == 0 {
- return ""
- }
- return values[0]
- }
- func (s *metadataSupplier) Set(key, value string) {
- s.metadata.Set(key, value)
- }
- func (s *metadataSupplier) Keys() []string {
- out := make([]string, 0, len(*s.metadata))
- for key := range *s.metadata {
- out = append(out, key)
- }
- return out
- }
- // Inject injects cross-cutting concerns from the ctx into the metadata.
- func Inject(ctx context.Context, p propagation.TextMapPropagator, metadata *metadata.MD) {
- p.Inject(ctx, &metadataSupplier{
- metadata: metadata,
- })
- }
- // Extract extracts the metadata from ctx.
- func Extract(ctx context.Context, p propagation.TextMapPropagator, metadata *metadata.MD) (
- baggage.Baggage, sdktrace.SpanContext) {
- ctx = p.Extract(ctx, &metadataSupplier{
- metadata: metadata,
- })
- return baggage.FromContext(ctx), sdktrace.SpanContextFromContext(ctx)
- }
|