etcdserver: add server range duration metrics

Signed-off-by: Daniel Tripp <38776199+thedtripp@users.noreply.github.com>
Co-authored-by: Ravi Hari <RaviHari@users.noreply.github.com>
This commit is contained in:
Daniel Tripp
2024-05-11 00:56:07 +00:00
parent 58a71a22f3
commit 0232686cac
5 changed files with 118 additions and 0 deletions

View File

@ -22,10 +22,14 @@ import (
"testing"
"time"
"github.com/stretchr/testify/require"
pb "go.etcd.io/etcd/api/v3/etcdserverpb"
"go.etcd.io/etcd/client/pkg/v3/transport"
"go.etcd.io/etcd/server/v3/storage"
"go.etcd.io/etcd/tests/v3/framework/integration"
clientv3 "go.etcd.io/etcd/client/v3"
)
// TestMetricDbSizeBoot checks that the db size metric is set on boot.
@ -211,3 +215,33 @@ func TestMetricsHealth(t *testing.T) {
t.Fatalf("expected '0' from etcd_server_health_failures, got %q", hv)
}
}
func TestMetricsRangeDurationSeconds(t *testing.T) {
integration.BeforeTest(t)
clus := integration.NewCluster(t, &integration.ClusterConfig{Size: 1})
defer clus.Terminate(t)
client := clus.RandClient()
keys := []string{
"my-namespace/foobar", "my-namespace/foobar1", "namespace/foobar1"}
for _, key := range keys {
_, err := client.Put(context.Background(), key, "data")
require.NoError(t, err)
}
_, err := client.Get(context.Background(), "", clientv3.WithFromKey())
require.NoError(t, err)
rangeDurationSeconds, err := clus.Members[0].Metric("etcd_server_range_duration_seconds")
require.NoError(t, err)
require.NotEmpty(t, rangeDurationSeconds, "expected a number from etcd_server_range_duration_seconds")
rangeDuration, err := strconv.ParseFloat(rangeDurationSeconds, 64)
require.NoError(t, err, "failed to parse duration: %s", err)
maxRangeDuration := 600.0
require.GreaterOrEqual(t, rangeDuration, 0.0, "expected etcd_server_range_duration_seconds to be between 0 and %f, got %f", maxRangeDuration, rangeDuration)
require.LessOrEqual(t, rangeDuration, maxRangeDuration, "expected etcd_server_range_duration_seconds to be between 0 and %f, got %f", maxRangeDuration, rangeDuration)
}