func()

in exporter/collector/integrationtest/testcases/testcase.go [285:357]


func (tc *TestCase) LoadOTLPMetricsInput(
	t testing.TB,
	startTime time.Time,
	endTime time.Time,
) pmetric.Metrics {
	fixtureBytes, err := os.ReadFile(tc.OTLPInputFixturePath)
	require.NoError(t, err)
	unmarshaler := &pmetric.JSONUnmarshaler{}
	metrics, err := unmarshaler.UnmarshalMetrics(fixtureBytes)
	require.NoError(t, err)

	// Interface with common fields that pdata metric points have
	type point interface {
		StartTimestamp() pcommon.Timestamp
		Timestamp() pcommon.Timestamp
		SetStartTimestamp(pcommon.Timestamp)
		SetTimestamp(pcommon.Timestamp)
	}
	type pointWithExemplars interface {
		point
		Exemplars() pmetric.ExemplarSlice
	}
	updatePoint := func(p point) {
		if p.StartTimestamp() != 0 {
			p.SetStartTimestamp(pcommon.NewTimestampFromTime(startTime))
		}
		if p.Timestamp() != 0 {
			p.SetTimestamp(pcommon.NewTimestampFromTime(endTime))
		}
	}
	updatePointWithExemplars := func(p pointWithExemplars) {
		updatePoint(p)
		for i := 0; i < p.Exemplars().Len(); i++ {
			p.Exemplars().At(i).SetTimestamp(pcommon.NewTimestampFromTime(endTime))
		}

	}

	for i := 0; i < metrics.ResourceMetrics().Len(); i++ {
		rm := metrics.ResourceMetrics().At(i)
		for i := 0; i < rm.ScopeMetrics().Len(); i++ {
			sms := rm.ScopeMetrics().At(i)
			for i := 0; i < sms.Metrics().Len(); i++ {
				m := sms.Metrics().At(i)

				switch m.Type() {
				case pmetric.MetricTypeGauge:
					for i := 0; i < m.Gauge().DataPoints().Len(); i++ {
						updatePointWithExemplars(m.Gauge().DataPoints().At(i))
					}
				case pmetric.MetricTypeSum:
					for i := 0; i < m.Sum().DataPoints().Len(); i++ {
						updatePointWithExemplars(m.Sum().DataPoints().At(i))
					}
				case pmetric.MetricTypeHistogram:
					for i := 0; i < m.Histogram().DataPoints().Len(); i++ {
						updatePointWithExemplars(m.Histogram().DataPoints().At(i))
					}
				case pmetric.MetricTypeSummary:
					for i := 0; i < m.Summary().DataPoints().Len(); i++ {
						updatePoint(m.Summary().DataPoints().At(i))
					}
				case pmetric.MetricTypeExponentialHistogram:
					for i := 0; i < m.ExponentialHistogram().DataPoints().Len(); i++ {
						updatePointWithExemplars(m.ExponentialHistogram().DataPoints().At(i))
					}
				}
			}
		}
	}

	return metrics
}