github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/telemetry/httpmetrics/httpheaders.go (about)

     1  // Package httpmetrics - Content managed by Project Forge, see [projectforge.md] for details.
     2  package httpmetrics
     3  
     4  import (
     5  	"context"
     6  	"net/http"
     7  
     8  	"go.opentelemetry.io/otel"
     9  	"go.opentelemetry.io/otel/propagation"
    10  	"golang.org/x/exp/maps"
    11  
    12  	"github.com/kyleu/dbaudit/app/util"
    13  )
    14  
    15  var _ propagation.TextMapCarrier = (*headerCarrier)(nil)
    16  
    17  type headerCarrier struct {
    18  	h http.Header
    19  }
    20  
    21  func (hc headerCarrier) Get(key string) string {
    22  	return hc.h.Get(key)
    23  }
    24  
    25  func (hc headerCarrier) Set(key string, value string) {
    26  	hc.h.Set(key, value)
    27  }
    28  
    29  func (hc headerCarrier) Keys() []string {
    30  	return maps.Keys(hc.h)
    31  }
    32  
    33  func ExtractHeaders(r *http.Request, logger util.Logger) (context.Context, util.Logger) {
    34  	return otel.GetTextMapPropagator().Extract(r.Context(), headerCarrier{h: r.Header}), logger
    35  }