func()

in processor/lsmintervalprocessor/internal/merger/limits/tracker.go [283:322]


func (t *Trackers) AppendBinary(b []byte) ([]byte, error) {
	if t == nil || t.resource == nil {
		// if trackers is nil then nothing to marshal
		return b, nil
	}

	n := 1 + len(t.scope)
	for _, st := range t.scope {
		n += len(st.metrics)
		for _, mt := range st.metrics {
			n += len(mt.datapoints)
		}
	}
	// minimum 4 bytes per tracker (type=1, count=1+, sketch length=2)
	b = slices.Grow(b, n*4)

	b, err := marshalTracker(resourceTrackerType, t.resource, b)
	if err != nil {
		return nil, err
	}
	for _, st := range t.scope {
		b, err = marshalTracker(scopeTrackerType, st.Tracker, b)
		if err != nil {
			return nil, err
		}
		for _, mt := range st.metrics {
			b, err = marshalTracker(metricTrackerType, mt.Tracker, b)
			if err != nil {
				return nil, err
			}
			for _, dpt := range mt.datapoints {
				b, err = marshalTracker(dpTrackerType, dpt, b)
				if err != nil {
					return nil, err
				}
			}
		}
	}
	return b, nil
}