Merge pull request #160 from unistack-org/tracer
tracer: fix span options
This commit was merged in pull request #160.
	This commit is contained in:
		| @@ -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