in processor/lsmintervalprocessor/internal/merger/value.go [301:340]
func (s *Value) Finalize() (pmetric.Metrics, error) {
// At this point we need to assume that the metrics are returned
// as a final step in the store, thus, prepare the final metric.
// In the final metric we have to add datapoint limits. Also, we
// need to ensure that lookup tables, and thus limits, are
// initialized.
s.initLookupTables()
for _, sm := range s.scopeLookup {
if !sm.metricTracker.HasOverflow() {
continue
}
// Add overflow metric due to metric limit breached
if err := fillOverflowMetric(
sm.ScopeMetrics.Metrics().AppendEmpty(),
overflowMetricName,
overflowMetricDesc,
sm.metricTracker.EstimateOverflow(),
s.metricLimitCfg.Overflow.Attributes,
); err != nil {
return pmetric.Metrics{}, fmt.Errorf("failed to finalize merged metric: %w", err)
}
}
for mID, m := range s.metricLookup {
if !m.datapointTracker.HasOverflow() {
continue
}
// Add overflow metric due to datapoint limit breached
sm := s.scopeLookup[mID.Scope()]
if err := fillOverflowMetric(
sm.ScopeMetrics.Metrics().AppendEmpty(),
overflowDatapointMetricName,
overflowDatapointMetricDesc,
m.datapointTracker.EstimateOverflow(),
s.datapointLimitCfg.Overflow.Attributes,
); err != nil {
return pmetric.Metrics{}, fmt.Errorf("failed to finalize merged metric: %w", err)
}
}
return s.source, nil
}