1
0
mirror of https://github.com/go-kratos/kratos.git synced 2025-04-13 11:50:53 +02:00
kratos/middleware/tracing/metadata.go
Kagaya f7588a47de
fix: ci lint error (#1391)
* fix lint check

* fix lll lint error

* fix build error

* fix gomnd

* fix shadow declaration

* add make test command

* update
2021-08-31 10:14:57 +08:00

46 lines
1.1 KiB
Go

package tracing
import (
"context"
"github.com/go-kratos/kratos/v2"
"github.com/go-kratos/kratos/v2/metadata"
"go.opentelemetry.io/otel/propagation"
)
const serviceHeader = "x-md-service-name"
// Metadata is tracing metadata propagator
type Metadata struct{}
var _ propagation.TextMapPropagator = Metadata{}
// Inject sets metadata key-values from ctx into the carrier.
func (b Metadata) Inject(ctx context.Context, carrier propagation.TextMapCarrier) {
app, ok := kratos.FromContext(ctx)
if ok {
carrier.Set(serviceHeader, app.Name())
}
}
// Extract returns a copy of parent with the metadata from the carrier added.
func (b Metadata) Extract(parent context.Context, carrier propagation.TextMapCarrier) context.Context {
name := carrier.Get(serviceHeader)
if name != "" {
if md, ok := metadata.FromServerContext(parent); ok {
md.Set(serviceHeader, name)
} else {
md := metadata.New()
md.Set(serviceHeader, name)
parent = metadata.NewServerContext(parent, md)
}
}
return parent
}
// Fields returns the keys who's values are set with Inject.
func (b Metadata) Fields() []string {
return []string{serviceHeader}
}