40 lines
1.5 KiB
Go
40 lines
1.5 KiB
Go
// This project is licensed under the Apache License 2.0, see LICENSE.
|
|
|
|
package otobserver
|
|
|
|
import opentracing "github.com/opentracing/opentracing-go"
|
|
|
|
// Observer can be registered with a Tracer to recieve notifications
|
|
// about new Spans. Tracers are not required to support the Observer API.
|
|
// The actual registration depends on the implementation, which might look
|
|
// like the below e.g :
|
|
// observer := myobserver.NewObserver()
|
|
// tracer := client.NewTracer(..., client.WithObserver(observer))
|
|
//
|
|
type Observer interface {
|
|
// Create and return a span observer. Called when a span starts.
|
|
// If the Observer is not interested in the given span, it must return (nil, false).
|
|
// E.g :
|
|
// func StartSpan(opName string, opts ...opentracing.StartSpanOption) {
|
|
// var sp opentracing.Span
|
|
// sso := opentracing.StartSpanOptions{}
|
|
// spanObserver, ok := observer.OnStartSpan(span, opName, sso);
|
|
// if ok {
|
|
// // we have a valid SpanObserver
|
|
// }
|
|
// ...
|
|
// }
|
|
OnStartSpan(sp opentracing.Span, operationName string, options opentracing.StartSpanOptions) (SpanObserver, bool)
|
|
}
|
|
|
|
// SpanObserver is created by the Observer and receives notifications about
|
|
// other Span events.
|
|
type SpanObserver interface {
|
|
// Callback called from opentracing.Span.SetOperationName()
|
|
OnSetOperationName(operationName string)
|
|
// Callback called from opentracing.Span.SetTag()
|
|
OnSetTag(key string, value interface{})
|
|
// Callback called from opentracing.Span.Finish()
|
|
OnFinish(options opentracing.FinishOptions)
|
|
}
|