influxdb/pkg/rhh/metrics_test.go

109 lines
3.1 KiB
Go

package rhh
import (
"testing"
"github.com/influxdata/platform/kit/prom/promtest"
"github.com/prometheus/client_golang/prometheus"
)
func TestMetrics_Metrics(t *testing.T) {
// metrics to be shared by multiple file stores.
metrics := NewMetrics("test", "sub", prometheus.Labels{"engine_id": "", "node_id": ""})
t1 := newRHHTracker(metrics, prometheus.Labels{"engine_id": "0", "node_id": "0"})
t2 := newRHHTracker(metrics, prometheus.Labels{"engine_id": "1", "node_id": "0"})
reg := prometheus.NewRegistry()
reg.MustRegister(metrics.PrometheusCollectors()...)
base := "test_sub_"
// All the metric names
gauges := []string{
base + "load_percent",
base + "size",
base + "get_duration_last_ns",
base + "put_duration_last_ns",
base + "grow_duration_s",
base + "mean_probes",
}
counters := []string{
base + "get_total",
base + "put_total",
}
histograms := []string{
base + "get_duration_ns",
base + "put_duration_ns",
}
// Generate some measurements.
for i, tracker := range []*rhhTracker{t1, t2} {
tracker.SetLoadFactor(float64(i + len(gauges[0])))
tracker.SetSize(uint64(i + len(gauges[1])))
labels := tracker.Labels()
tracker.metrics.LastGetDuration.With(labels).Set(float64(i + len(gauges[2])))
tracker.metrics.LastInsertDuration.With(labels).Set(float64(i + len(gauges[3])))
tracker.metrics.LastGrowDuration.With(labels).Set(float64(i + len(gauges[4])))
tracker.SetProbeCount(float64(i + len(gauges[5])))
labels = tracker.Labels()
labels["status"] = "ok"
tracker.metrics.Gets.With(labels).Add(float64(i + len(counters[0])))
tracker.metrics.Puts.With(labels).Add(float64(i + len(counters[1])))
labels = tracker.Labels()
tracker.metrics.GetDuration.With(labels).Observe(float64(i + len(histograms[0])))
tracker.metrics.InsertDuration.With(labels).Observe(float64(i + len(histograms[1])))
}
// Test that all the correct metrics are present.
mfs, err := reg.Gather()
if err != nil {
t.Fatal(err)
}
// The label variants for the two caches.
labelVariants := []prometheus.Labels{
prometheus.Labels{"engine_id": "0", "node_id": "0"},
prometheus.Labels{"engine_id": "1", "node_id": "0"},
}
for i, labels := range labelVariants {
for _, name := range gauges {
exp := float64(i + len(name))
metric := promtest.MustFindMetric(t, mfs, name, labels)
if got := metric.GetGauge().GetValue(); got != exp {
t.Errorf("[%s %d] got %v, expected %v", name, i, got, exp)
}
}
for _, name := range counters {
exp := float64(i + len(name))
// Make a copy since we need to add a label
l := make(prometheus.Labels, len(labels))
for k, v := range labels {
l[k] = v
}
l["status"] = "ok"
metric := promtest.MustFindMetric(t, mfs, name, l)
if got := metric.GetCounter().GetValue(); got != exp {
t.Errorf("[%s %d] got %v, expected %v", name, i, got, exp)
}
}
for _, name := range histograms {
exp := float64(i + len(name))
metric := promtest.MustFindMetric(t, mfs, name, labels)
if got := metric.GetHistogram().GetSampleSum(); got != exp {
t.Errorf("[%s %d] got %v, expected %v", name, i, got, exp)
}
}
}
}