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 | ||||
| 	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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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{}) | ||||
| } | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user