// Encode creates a Thrift Span from the gokit Span. func (s *Span) Encode() *zipkincore.Span { // TODO lots of garbage here. We can improve by preallocating e.g. the // Thrift stuff into an encoder struct, owned by the ScribeCollector. zs := zipkincore.Span{ TraceId: s.traceID, Name: s.methodName, Id: s.spanID, BinaryAnnotations: []*zipkincore.BinaryAnnotation{}, // TODO Debug: true, // TODO } if s.parentSpanID != 0 { zs.ParentId = new(int64) (*zs.ParentId) = s.parentSpanID } zs.Annotations = make([]*zipkincore.Annotation, len(s.annotations)) for i, a := range s.annotations { zs.Annotations[i] = &zipkincore.Annotation{ Timestamp: a.timestamp.UnixNano() / 1e3, Value: a.value, Host: a.host, } if a.duration > 0 { zs.Annotations[i].Duration = new(int32) *(zs.Annotations[i].Duration) = int32(a.duration / time.Microsecond) } } return &zs }
// Encode creates a Thrift Span from the gokit Span. func (s *Span) Encode() *zipkincore.Span { // TODO lots of garbage here. We can improve by preallocating e.g. the // Thrift stuff into an encoder struct, owned by the ScribeCollector. zs := zipkincore.Span{ TraceId: s.traceID, Name: s.methodName, Id: s.spanID, Debug: s.debug, } if s.parentSpanID != 0 { zs.ParentId = new(int64) (*zs.ParentId) = s.parentSpanID } zs.Annotations = make([]*zipkincore.Annotation, len(s.annotations)) for i, a := range s.annotations { zs.Annotations[i] = &zipkincore.Annotation{ Timestamp: a.timestamp.UnixNano() / 1e3, Value: a.value, Host: a.host, } } zs.BinaryAnnotations = make([]*zipkincore.BinaryAnnotation, len(s.binaryAnnotations)) for i, a := range s.binaryAnnotations { zs.BinaryAnnotations[i] = &zipkincore.BinaryAnnotation{ Key: a.key, Value: a.value, AnnotationType: a.annotationType, Host: a.host, } } return &zs }