func assertOtelMetrics()

in internal/beater/monitoringtest/opentelemetry.go [60:127]


func assertOtelMetrics(
	t *testing.T,
	reader sdkmetric.Reader,
	expectedMetrics map[string]any,
	fullMatch, skipValAssert bool,
) {
	t.Helper()

	var rm metricdata.ResourceMetrics
	assert.NoError(t, reader.Collect(context.Background(), &rm))

	assert.NotEqual(t, 0, len(rm.ScopeMetrics))
	var foundMetrics []string
	for _, sm := range rm.ScopeMetrics {
		for _, m := range sm.Metrics {
			switch d := m.Data.(type) {
			case metricdata.Gauge[int64]:
				assert.Equal(t, 1, len(d.DataPoints))
				foundMetrics = append(foundMetrics, m.Name)
				if skipValAssert {
					continue
				}

				if v, ok := expectedMetrics[m.Name]; ok {
					assert.EqualValues(t, v, d.DataPoints[0].Value, m.Name)
				} else if fullMatch {
					assert.Fail(t, "unexpected metric", m.Name)
				}

			case metricdata.Sum[int64]:
				assert.Equal(t, 1, len(d.DataPoints))
				foundMetrics = append(foundMetrics, m.Name)
				if skipValAssert {
					continue
				}

				if v, ok := expectedMetrics[m.Name]; ok {
					assert.EqualValues(t, v, d.DataPoints[0].Value, m.Name)
				} else if fullMatch {
					assert.Fail(t, "unexpected metric", m.Name)
				}

			case metricdata.Histogram[int64]:
				assert.Equal(t, 1, len(d.DataPoints))
				foundMetrics = append(foundMetrics, m.Name)
				if skipValAssert {
					continue
				}

				if v, ok := expectedMetrics[m.Name]; ok {
					assert.EqualValues(t, v, d.DataPoints[0].Count, m.Name)
				} else if fullMatch {
					assert.Fail(t, "unexpected metric", m.Name)
				}
			}
		}
	}

	var expectedMetricsKeys []string
	for k := range expectedMetrics {
		expectedMetricsKeys = append(expectedMetricsKeys, k)
	}
	if fullMatch {
		assert.ElementsMatch(t, expectedMetricsKeys, foundMetrics)
	} else {
		assert.Subset(t, foundMetrics, expectedMetricsKeys)
	}
}