in xray/default_emitter.go [93:127]
func packSegments(seg *Segment, outSegments [][]byte) [][]byte {
trimSubsegment := func(s *Segment) []byte {
ss := globalCfg.StreamingStrategy()
if seg.ParentSegment.Configuration != nil && seg.ParentSegment.Configuration.StreamingStrategy != nil {
ss = seg.ParentSegment.Configuration.StreamingStrategy
}
for ss.RequiresStreaming(s) {
if len(s.rawSubsegments) == 0 {
break
}
cb := ss.StreamCompletedSubsegments(s)
outSegments = append(outSegments, cb...)
}
b, err := json.Marshal(s)
if err != nil {
logger.Errorf("JSON error while marshalling (Sub)Segment: %v", err)
}
return b
}
for _, s := range seg.rawSubsegments {
s.Lock()
outSegments = packSegments(s, outSegments)
if b := trimSubsegment(s); b != nil {
seg.Subsegments = append(seg.Subsegments, b)
}
s.Unlock()
}
if seg.isOrphan() {
if b := trimSubsegment(seg); b != nil {
outSegments = append(outSegments, b)
}
}
return outSegments
}