func()

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
}