func display()

in cmd/queuebench/display.go [29:109]


func display(rm metricdata.ResourceMetrics) error {
	getAttrs := func(a attribute.Set) string {
		s := strings.Builder{}
		for _, v := range a.ToSlice() {
			s.WriteString(fmt.Sprintf("(%s:%s)", v.Key, v.Value.AsString()))
		}
		return s.String()
	}

	franzMetrics := filterMetrics("github.com/twmb/franz-go/plugin/kotel", rm.ScopeMetrics)
	if len(franzMetrics) == 0 {
		return fmt.Errorf("expected some franz metrics, found none")
	}

	for _, m := range franzMetrics {
		log.Println(m.Name)

		for _, dp := range m.Data.(metricdata.Sum[int64]).DataPoints {
			log.Printf("  %s | %s\n", m.Name, getAttrs(dp.Attributes))
			log.Printf("  %s: value: %d\n", m.Name, dp.Value)
		}
	}

	kafkaMetrics := filterMetrics("github.com/elastic/apm-queue/kafka", rm.ScopeMetrics)
	if len(kafkaMetrics) == 0 {
		return fmt.Errorf("expected some kafka metrics, found none")
	}

	avg := func(a metricdata.Extrema[float64], b metricdata.Extrema[float64]) float64 {
		av, aok := a.Value()
		bv, bok := b.Value()

		if !aok {
			av = 0.0
		}
		if !bok {
			bv = 0.0
		}

		return (av + bv) / 2
	}

	for _, m := range kafkaMetrics {
		log.Println(m.Name)

		if md, ok := m.Data.(metricdata.Sum[int64]); ok {
			for _, dp := range md.DataPoints {
				log.Printf("  %s | %s\n", m.Name, getAttrs(dp.Attributes))
				log.Printf("  %s: value: %d\n", m.Name, dp.Value)
			}
		}
		if md, ok := m.Data.(metricdata.Histogram[float64]); ok {
			for _, dp := range md.DataPoints {
				log.Printf("  %s | %s", m.Name, getAttrs(dp.Attributes))

				if v, ok := dp.Min.Value(); ok {
					log.Printf("  %s: min   : %.3f\n", m.Name, v)
				}
				if v, ok := dp.Max.Value(); ok {
					log.Printf("  %s: max   : %.3f\n", m.Name, v)
				}
				log.Printf("  %s: avg   : %.3f\n", m.Name, avg(dp.Min, dp.Max))
				log.Printf("  %s: sum   : %.3f\n", m.Name, dp.Sum)
				log.Printf("  %s: total : %d\n", m.Name, dp.Count)

				top := strings.Builder{}
				bottom := strings.Builder{}
				for i, b := range dp.Bounds {
					a := fmt.Sprintf("%.f\t", b)
					top.WriteString(a)
					width := fmt.Sprintf("%d", len(a)-1)
					bottom.WriteString(fmt.Sprintf("%"+width+"d\t", dp.BucketCounts[i]))
				}
				log.Printf("  %s: bounds: %s\n", m.Name, top.String())
				log.Printf("  %s: count : %s\n", m.Name, bottom.String())
			}
		}
	}

	return nil
}