Added integration support for DataDog APM Tracing
This commit is contained in:
parent
ba8c9295ac
commit
3192307d59
61 changed files with 9999 additions and 5 deletions
83
vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/span.go
generated
vendored
Normal file
83
vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/span.go
generated
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
package opentracer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace"
|
||||
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
|
||||
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
|
||||
|
||||
opentracing "github.com/opentracing/opentracing-go"
|
||||
"github.com/opentracing/opentracing-go/log"
|
||||
)
|
||||
|
||||
var _ opentracing.Span = (*span)(nil)
|
||||
|
||||
// span implements opentracing.Span on top of ddtrace.Span.
|
||||
type span struct {
|
||||
ddtrace.Span
|
||||
*opentracer
|
||||
}
|
||||
|
||||
func (s *span) Context() opentracing.SpanContext { return s.Span.Context() }
|
||||
func (s *span) Finish() { s.Span.Finish() }
|
||||
func (s *span) Tracer() opentracing.Tracer { return s.opentracer }
|
||||
func (s *span) LogEvent(event string) { /* deprecated */ }
|
||||
func (s *span) LogEventWithPayload(event string, payload interface{}) { /* deprecated */ }
|
||||
func (s *span) Log(data opentracing.LogData) { /* deprecated */ }
|
||||
|
||||
func (s *span) FinishWithOptions(opts opentracing.FinishOptions) {
|
||||
for _, lr := range opts.LogRecords {
|
||||
if len(lr.Fields) > 0 {
|
||||
s.LogFields(lr.Fields...)
|
||||
}
|
||||
}
|
||||
s.Span.Finish(tracer.FinishTime(opts.FinishTime))
|
||||
}
|
||||
|
||||
func (s *span) LogFields(fields ...log.Field) {
|
||||
// catch standard opentracing keys and adjust to internal ones as per spec:
|
||||
// https://github.com/opentracing/specification/blob/master/semantic_conventions.md#log-fields-table
|
||||
for _, f := range fields {
|
||||
switch f.Key() {
|
||||
case "event":
|
||||
if v, ok := f.Value().(string); ok && v == "error" {
|
||||
s.SetTag("error", true)
|
||||
}
|
||||
case "error", "error.object":
|
||||
if err, ok := f.Value().(error); ok {
|
||||
s.SetTag("error", err)
|
||||
}
|
||||
case "message":
|
||||
s.SetTag(ext.ErrorMsg, fmt.Sprint(f.Value()))
|
||||
case "stack":
|
||||
s.SetTag(ext.ErrorStack, fmt.Sprint(f.Value()))
|
||||
default:
|
||||
// not implemented
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *span) LogKV(keyVals ...interface{}) {
|
||||
fields, err := log.InterleavedKVToFields(keyVals...)
|
||||
if err != nil {
|
||||
// TODO(gbbr): create a log package
|
||||
return
|
||||
}
|
||||
s.LogFields(fields...)
|
||||
}
|
||||
|
||||
func (s *span) SetBaggageItem(key, val string) opentracing.Span {
|
||||
s.Span.SetBaggageItem(key, val)
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *span) SetOperationName(operationName string) opentracing.Span {
|
||||
s.Span.SetOperationName(operationName)
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *span) SetTag(key string, value interface{}) opentracing.Span {
|
||||
s.Span.SetTag(key, value)
|
||||
return s
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue