remove unused (#786)
parent
311a65367e
commit
2eaeda0b17
@ -1,109 +0,0 @@ |
||||
package tracing |
||||
|
||||
import ( |
||||
"context" |
||||
"go.opentelemetry.io/otel" |
||||
"go.opentelemetry.io/otel/label" |
||||
"go.opentelemetry.io/otel/propagation" |
||||
"google.golang.org/grpc/metadata" |
||||
|
||||
"github.com/go-kratos/kratos/v2/middleware" |
||||
"github.com/go-kratos/kratos/v2/transport/grpc" |
||||
"github.com/go-kratos/kratos/v2/transport/http" |
||||
|
||||
oteltrace "go.opentelemetry.io/otel/trace" |
||||
) |
||||
|
||||
var _ propagation.TextMapCarrier = &MetadataCarrier{} |
||||
|
||||
// Option is tracing option.
|
||||
type Option func(*options) |
||||
|
||||
type options struct { |
||||
TracerProvider oteltrace.TracerProvider |
||||
Propagators propagation.TextMapPropagator |
||||
} |
||||
|
||||
func WithPropagators(propagators propagation.TextMapPropagator) Option { |
||||
return func(opts *options) { |
||||
opts.Propagators = propagators |
||||
} |
||||
} |
||||
|
||||
func WithTracerProvider(provider oteltrace.TracerProvider) Option { |
||||
return func(opts *options) { |
||||
opts.TracerProvider = provider |
||||
} |
||||
} |
||||
|
||||
type MetadataCarrier struct { |
||||
md *metadata.MD |
||||
} |
||||
|
||||
func (mc MetadataCarrier) Get(key string) string { |
||||
values := mc.md.Get(key) |
||||
if len(values) == 0 { |
||||
return "" |
||||
} |
||||
return values[0] |
||||
} |
||||
|
||||
// Set stores the key-value pair.
|
||||
func (mc MetadataCarrier) Set(key string, value string) { |
||||
mc.md.Set(key, value) |
||||
} |
||||
|
||||
// Server returns a new server middleware for OpenTelemetry.
|
||||
func Server(opts ...Option) middleware.Middleware { |
||||
options := options{} |
||||
for _, o := range opts { |
||||
o(&options) |
||||
} |
||||
if options.TracerProvider == nil { |
||||
options.TracerProvider = otel.GetTracerProvider() |
||||
} |
||||
if options.TracerProvider == nil { |
||||
options.TracerProvider = otel.GetTracerProvider() |
||||
} |
||||
tracer := options.TracerProvider.Tracer( |
||||
"default", |
||||
) |
||||
if options.Propagators == nil { |
||||
options.Propagators = otel.GetTextMapPropagator() |
||||
} |
||||
return func(handler middleware.Handler) middleware.Handler { |
||||
return func(ctx context.Context, req interface{}) (reply interface{}, err error) { |
||||
var ( |
||||
component string |
||||
operation string |
||||
) |
||||
if info, ok := http.FromServerContext(ctx); ok { |
||||
// HTTP span
|
||||
component = "HTTP" |
||||
operation = info.Request.RequestURI |
||||
ctx = propagation.NewCompositeTextMapPropagator(options.Propagators).Extract(ctx, info.Request.Header) |
||||
} else if info, ok := grpc.FromServerContext(ctx); ok { |
||||
// gRPC span
|
||||
component = "gRPC" |
||||
operation = info.FullMethod |
||||
if md, ok := metadata.FromIncomingContext(ctx); ok { |
||||
ctx = propagation.NewCompositeTextMapPropagator(options.Propagators).Extract(ctx, MetadataCarrier{md: &md}) |
||||
} |
||||
} |
||||
ctx, span := tracer.Start(ctx, |
||||
operation, |
||||
oteltrace.WithAttributes(label.String("component", component)), |
||||
oteltrace.WithSpanKind(oteltrace.SpanKindServer), |
||||
) |
||||
defer span.End() |
||||
if reply, err = handler(ctx, req); err != nil { |
||||
span.RecordError(err) |
||||
span.SetAttributes( |
||||
label.String("event", "error"), |
||||
label.String("message", err.Error()), |
||||
) |
||||
} |
||||
return |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue