in module/apmotel/gatherer.go [49:93]
func (e Gatherer) GatherMetrics(ctx context.Context, out *apm.Metrics) error {
metrics := metricdata.ResourceMetrics{}
err := e.Reader.Collect(ctx, &metrics)
if err != nil {
return err
}
for _, scopeMetrics := range metrics.ScopeMetrics {
for _, sm := range scopeMetrics.Metrics {
switch m := sm.Data.(type) {
case metricdata.Histogram[int64]:
addHistogramMetric(out, sm, m)
case metricdata.Histogram[float64]:
addHistogramMetric(out, sm, m)
case metricdata.Sum[int64]:
for _, dp := range m.DataPoints {
if m.Temporality == metricdata.DeltaTemporality && dp.Value == 0 {
continue
}
out.Add(sm.Name, makeLabels(dp.Attributes), float64(dp.Value))
}
case metricdata.Sum[float64]:
for _, dp := range m.DataPoints {
if m.Temporality == metricdata.DeltaTemporality && dp.Value == 0 {
continue
}
out.Add(sm.Name, makeLabels(dp.Attributes), dp.Value)
}
case metricdata.Gauge[int64]:
for _, dp := range m.DataPoints {
out.Add(sm.Name, makeLabels(dp.Attributes), float64(dp.Value))
}
case metricdata.Gauge[float64]:
for _, dp := range m.DataPoints {
out.Add(sm.Name, makeLabels(dp.Attributes), dp.Value)
}
default:
return fmt.Errorf("unknown metric type %q", m)
}
}
}
return nil
}