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
}