func()

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
}