tracer: fix span options #160
@@ -35,7 +35,7 @@ type noopSpan struct {
 | 
				
			|||||||
	ctx    context.Context
 | 
						ctx    context.Context
 | 
				
			||||||
	tracer Tracer
 | 
						tracer Tracer
 | 
				
			||||||
	name   string
 | 
						name   string
 | 
				
			||||||
	labels []Label
 | 
						opts   SpanOptions
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *noopSpan) Finish(opts ...SpanOption) {
 | 
					func (s *noopSpan) Finish(opts ...SpanOption) {
 | 
				
			||||||
@@ -56,8 +56,8 @@ func (s *noopSpan) SetName(name string) {
 | 
				
			|||||||
	s.name = name
 | 
						s.name = name
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *noopSpan) SetLabels(labels ...Label) {
 | 
					func (s *noopSpan) SetLabels(labels ...interface{}) {
 | 
				
			||||||
	s.labels = labels
 | 
						s.opts.Labels = labels
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewTracer returns new memory tracer
 | 
					// NewTracer returns new memory tracer
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,9 @@ package tracer
 | 
				
			|||||||
import "go.unistack.org/micro/v3/logger"
 | 
					import "go.unistack.org/micro/v3/logger"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SpanOptions contains span option
 | 
					// SpanOptions contains span option
 | 
				
			||||||
type SpanOptions struct{}
 | 
					type SpanOptions struct {
 | 
				
			||||||
 | 
						Labels []interface{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SpanOption func signature
 | 
					// SpanOption func signature
 | 
				
			||||||
type SpanOption func(o *SpanOptions)
 | 
					type SpanOption func(o *SpanOptions)
 | 
				
			||||||
@@ -14,6 +16,12 @@ type EventOptions struct{}
 | 
				
			|||||||
// EventOption func signature
 | 
					// EventOption func signature
 | 
				
			||||||
type EventOption func(o *EventOptions)
 | 
					type EventOption func(o *EventOptions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SpanLabels(labels ...interface{}) SpanOption {
 | 
				
			||||||
 | 
						return func(o *SpanOptions) {
 | 
				
			||||||
 | 
							o.Labels = labels
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Options struct
 | 
					// Options struct
 | 
				
			||||||
type Options struct {
 | 
					type Options struct {
 | 
				
			||||||
	// Logger used for logging
 | 
						// Logger used for logging
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,34 +30,5 @@ type Span interface {
 | 
				
			|||||||
	// SetName set the span name
 | 
						// SetName set the span name
 | 
				
			||||||
	SetName(name string)
 | 
						SetName(name string)
 | 
				
			||||||
	// SetLabels set the span labels
 | 
						// SetLabels set the span labels
 | 
				
			||||||
	SetLabels(labels ...Label)
 | 
						SetLabels(labels ...interface{})
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,95 +14,95 @@ import (
 | 
				
			|||||||
var (
 | 
					var (
 | 
				
			||||||
	DefaultClientCallObserver = func(ctx context.Context, req client.Request, rsp interface{}, opts []client.CallOption, sp tracer.Span, err error) {
 | 
						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()))
 | 
							sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
 | 
				
			||||||
		var labels []tracer.Label
 | 
							var labels []interface{}
 | 
				
			||||||
		if md, ok := metadata.FromOutgoingContext(ctx); ok {
 | 
							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 {
 | 
								for k, v := range md {
 | 
				
			||||||
				labels = append(labels, tracer.LabelString(k, v))
 | 
									labels = append(labels, k, v)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			labels = append(labels, tracer.LabelBool("error", true))
 | 
								labels = append(labels, "error", true)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sp.SetLabels(labels...)
 | 
							sp.SetLabels(labels...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DefaultClientStreamObserver = func(ctx context.Context, req client.Request, opts []client.CallOption, stream client.Stream, sp tracer.Span, err error) {
 | 
						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()))
 | 
							sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
 | 
				
			||||||
		var labels []tracer.Label
 | 
							var labels []interface{}
 | 
				
			||||||
		if md, ok := metadata.FromOutgoingContext(ctx); ok {
 | 
							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 {
 | 
								for k, v := range md {
 | 
				
			||||||
				labels = append(labels, tracer.LabelString(k, v))
 | 
									labels = append(labels, k, v)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			labels = append(labels, tracer.LabelBool("error", true))
 | 
								labels = append(labels, "error", true)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sp.SetLabels(labels...)
 | 
							sp.SetLabels(labels...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DefaultClientPublishObserver = func(ctx context.Context, msg client.Message, opts []client.PublishOption, sp tracer.Span, err error) {
 | 
						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()))
 | 
							sp.SetName(fmt.Sprintf("Pub to %s", msg.Topic()))
 | 
				
			||||||
		var labels []tracer.Label
 | 
							var labels []interface{}
 | 
				
			||||||
		if md, ok := metadata.FromOutgoingContext(ctx); ok {
 | 
							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 {
 | 
								for k, v := range md {
 | 
				
			||||||
				labels = append(labels, tracer.LabelString(k, v))
 | 
									labels = append(labels, k, v)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			labels = append(labels, tracer.LabelBool("error", true))
 | 
								labels = append(labels, "error", true)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sp.SetLabels(labels...)
 | 
							sp.SetLabels(labels...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DefaultServerHandlerObserver = func(ctx context.Context, req server.Request, rsp interface{}, sp tracer.Span, err error) {
 | 
						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()))
 | 
							sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
 | 
				
			||||||
		var labels []tracer.Label
 | 
							var labels []interface{}
 | 
				
			||||||
		if md, ok := metadata.FromIncomingContext(ctx); ok {
 | 
							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 {
 | 
								for k, v := range md {
 | 
				
			||||||
				labels = append(labels, tracer.LabelString(k, v))
 | 
									labels = append(labels, k, v)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			labels = append(labels, tracer.LabelBool("error", true))
 | 
								labels = append(labels, "error", true)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sp.SetLabels(labels...)
 | 
							sp.SetLabels(labels...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DefaultServerSubscriberObserver = func(ctx context.Context, msg server.Message, sp tracer.Span, err error) {
 | 
						DefaultServerSubscriberObserver = func(ctx context.Context, msg server.Message, sp tracer.Span, err error) {
 | 
				
			||||||
		sp.SetName(fmt.Sprintf("Sub from %s", msg.Topic()))
 | 
							sp.SetName(fmt.Sprintf("Sub from %s", msg.Topic()))
 | 
				
			||||||
		var labels []tracer.Label
 | 
							var labels []interface{}
 | 
				
			||||||
		if md, ok := metadata.FromIncomingContext(ctx); ok {
 | 
							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 {
 | 
								for k, v := range md {
 | 
				
			||||||
				labels = append(labels, tracer.LabelString(k, v))
 | 
									labels = append(labels, k, v)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			labels = append(labels, tracer.LabelBool("error", true))
 | 
								labels = append(labels, "error", true)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sp.SetLabels(labels...)
 | 
							sp.SetLabels(labels...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DefaultClientCallFuncObserver = func(ctx context.Context, addr string, req client.Request, rsp interface{}, opts client.CallOptions, sp tracer.Span, err error) {
 | 
						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()))
 | 
							sp.SetName(fmt.Sprintf("%s.%s", req.Service(), req.Endpoint()))
 | 
				
			||||||
		var labels []tracer.Label
 | 
							var labels []interface{}
 | 
				
			||||||
		if md, ok := metadata.FromOutgoingContext(ctx); ok {
 | 
							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 {
 | 
								for k, v := range md {
 | 
				
			||||||
				labels = append(labels, tracer.LabelString(k, v))
 | 
									labels = append(labels, k, v)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			labels = append(labels, tracer.LabelBool("error", true))
 | 
								labels = append(labels, "error", true)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sp.SetLabels(labels...)
 | 
							sp.SetLabels(labels...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DefaultSkipEndpoints = []string{"Meter.Metrics"}
 | 
						DefaultSkipEndpoints = []string{"Meter.Metrics", "Health.Live", "Health.Ready", "Health.Version"}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type tWrapper struct {
 | 
					type tWrapper struct {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user