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
}