Merge pull request #160 from unistack-org/tracer

tracer: fix span options
This commit is contained in:
Василий Толстов 2022-12-24 18:20:59 +03:00 committed by GitHub
commit b48faa3b2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 59 deletions

View File

@ -35,7 +35,7 @@ type noopSpan struct {
ctx context.Context
tracer Tracer
name string
labels []Label
opts SpanOptions
}
func (s *noopSpan) Finish(opts ...SpanOption) {
@ -56,8 +56,8 @@ func (s *noopSpan) SetName(name string) {
s.name = name
}
func (s *noopSpan) SetLabels(labels ...Label) {
s.labels = labels
func (s *noopSpan) SetLabels(labels ...interface{}) {
s.opts.Labels = labels
}
// NewTracer returns new memory tracer

View File

@ -3,7 +3,9 @@ package tracer
import "go.unistack.org/micro/v3/logger"
// SpanOptions contains span option
type SpanOptions struct{}
type SpanOptions struct {
Labels []interface{}
}
// SpanOption func signature
type SpanOption func(o *SpanOptions)
@ -14,6 +16,12 @@ type EventOptions struct{}
// EventOption func signature
type EventOption func(o *EventOptions)
func SpanLabels(labels ...interface{}) SpanOption {
return func(o *SpanOptions) {
o.Labels = labels
}
}
// Options struct
type Options struct {
// Logger used for logging

View File

@ -30,34 +30,5 @@ type Span interface {
// SetName set the span name
SetName(name string)
// SetLabels set the span labels
SetLabels(labels ...Label)
}
type Label struct {
val interface{}
key string
}
func LabelAny(k string, v interface{}) Label {
return Label{key: k, val: v}
}
func LabelString(k string, v string) Label {
return Label{key: k, val: v}
}
func LabelInt(k string, v int) Label {
return Label{key: k, val: v}
}
func LabelInt64(k string, v int64) Label {
return Label{key: k, val: v}
}
func LabelFloat64(k string, v float64) Label {
return Label{key: k, val: v}
}
func LabelBool(k string, v bool) Label {
return Label{key: k, val: v}
SetLabels(labels ...interface{})
}

View File

@ -14,95 +14,95 @@ import (
var (
DefaultClientCallObserver = func(ctx context.Context, req client.Request, rsp interface{}, opts []client.CallOption, sp tracer.Span, err error) {
sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
var labels []tracer.Label
var labels []interface{}
if md, ok := metadata.FromOutgoingContext(ctx); ok {
labels = make([]tracer.Label, 0, len(md))
labels = make([]interface{}, 0, len(md))
for k, v := range md {
labels = append(labels, tracer.LabelString(k, v))
labels = append(labels, k, v)
}
}
if err != nil {
labels = append(labels, tracer.LabelBool("error", true))
labels = append(labels, "error", true)
}
sp.SetLabels(labels...)
}
DefaultClientStreamObserver = func(ctx context.Context, req client.Request, opts []client.CallOption, stream client.Stream, sp tracer.Span, err error) {
sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
var labels []tracer.Label
var labels []interface{}
if md, ok := metadata.FromOutgoingContext(ctx); ok {
labels = make([]tracer.Label, 0, len(md))
labels = make([]interface{}, 0, len(md))
for k, v := range md {
labels = append(labels, tracer.LabelString(k, v))
labels = append(labels, k, v)
}
}
if err != nil {
labels = append(labels, tracer.LabelBool("error", true))
labels = append(labels, "error", true)
}
sp.SetLabels(labels...)
}
DefaultClientPublishObserver = func(ctx context.Context, msg client.Message, opts []client.PublishOption, sp tracer.Span, err error) {
sp.SetName(fmt.Sprintf("Pub to %s", msg.Topic()))
var labels []tracer.Label
var labels []interface{}
if md, ok := metadata.FromOutgoingContext(ctx); ok {
labels = make([]tracer.Label, 0, len(md))
labels = make([]interface{}, 0, len(md))
for k, v := range md {
labels = append(labels, tracer.LabelString(k, v))
labels = append(labels, k, v)
}
}
if err != nil {
labels = append(labels, tracer.LabelBool("error", true))
labels = append(labels, "error", true)
}
sp.SetLabels(labels...)
}
DefaultServerHandlerObserver = func(ctx context.Context, req server.Request, rsp interface{}, sp tracer.Span, err error) {
sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
var labels []tracer.Label
var labels []interface{}
if md, ok := metadata.FromIncomingContext(ctx); ok {
labels = make([]tracer.Label, 0, len(md))
labels = make([]interface{}, 0, len(md))
for k, v := range md {
labels = append(labels, tracer.LabelString(k, v))
labels = append(labels, k, v)
}
}
if err != nil {
labels = append(labels, tracer.LabelBool("error", true))
labels = append(labels, "error", true)
}
sp.SetLabels(labels...)
}
DefaultServerSubscriberObserver = func(ctx context.Context, msg server.Message, sp tracer.Span, err error) {
sp.SetName(fmt.Sprintf("Sub from %s", msg.Topic()))
var labels []tracer.Label
var labels []interface{}
if md, ok := metadata.FromIncomingContext(ctx); ok {
labels = make([]tracer.Label, 0, len(md))
labels = make([]interface{}, 0, len(md))
for k, v := range md {
labels = append(labels, tracer.LabelString(k, v))
labels = append(labels, k, v)
}
}
if err != nil {
labels = append(labels, tracer.LabelBool("error", true))
labels = append(labels, "error", true)
}
sp.SetLabels(labels...)
}
DefaultClientCallFuncObserver = func(ctx context.Context, addr string, req client.Request, rsp interface{}, opts client.CallOptions, sp tracer.Span, err error) {
sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
var labels []tracer.Label
var labels []interface{}
if md, ok := metadata.FromOutgoingContext(ctx); ok {
labels = make([]tracer.Label, 0, len(md))
labels = make([]interface{}, 0, len(md))
for k, v := range md {
labels = append(labels, tracer.LabelString(k, v))
labels = append(labels, k, v)
}
}
if err != nil {
labels = append(labels, tracer.LabelBool("error", true))
labels = append(labels, "error", true)
}
sp.SetLabels(labels...)
}
DefaultSkipEndpoints = []string{"Meter.Metrics"}
DefaultSkipEndpoints = []string{"Meter.Metrics", "Health.Live", "Health.Ready", "Health.Version"}
)
type tWrapper struct {