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
}