diff --git a/pkg/controller/endpointslice/BUILD b/pkg/controller/endpointslice/BUILD index 11a722fe89b..d76da270626 100644 --- a/pkg/controller/endpointslice/BUILD +++ b/pkg/controller/endpointslice/BUILD @@ -72,8 +72,7 @@ go_test( "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - "//staging/src/k8s.io/component-base/metrics:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", + "//staging/src/k8s.io/component-base/metrics/testutil:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], diff --git a/pkg/controller/endpointslice/reconciler_test.go b/pkg/controller/endpointslice/reconciler_test.go index 4308df209b7..97fec623bbe 100644 --- a/pkg/controller/endpointslice/reconciler_test.go +++ b/pkg/controller/endpointslice/reconciler_test.go @@ -24,7 +24,6 @@ import ( "testing" "time" - dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" @@ -36,7 +35,7 @@ import ( "k8s.io/client-go/kubernetes/fake" corelisters "k8s.io/client-go/listers/core/v1" k8stesting "k8s.io/client-go/testing" - compmetrics "k8s.io/component-base/metrics" + "k8s.io/component-base/metrics/testutil" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/endpointslice/metrics" utilpointer "k8s.io/utils/pointer" @@ -884,47 +883,61 @@ type expectedMetrics struct { func expectMetrics(t *testing.T, em expectedMetrics) { t.Helper() - actualDesiredSlices := getGaugeMetricValue(t, metrics.DesiredEndpointSlices.WithLabelValues()) + actualDesiredSlices, err := testutil.GetGaugeMetricValue(metrics.DesiredEndpointSlices.WithLabelValues()) + handleErr(t, err, "desiredEndpointSlices") if actualDesiredSlices != float64(em.desiredSlices) { t.Errorf("Expected desiredEndpointSlices to be %d, got %v", em.desiredSlices, actualDesiredSlices) } - actualNumSlices := getGaugeMetricValue(t, metrics.NumEndpointSlices.WithLabelValues()) + actualNumSlices, err := testutil.GetGaugeMetricValue(metrics.NumEndpointSlices.WithLabelValues()) + handleErr(t, err, "numEndpointSlices") if actualDesiredSlices != float64(em.desiredSlices) { t.Errorf("Expected numEndpointSlices to be %d, got %v", em.actualSlices, actualNumSlices) } - actualEndpointsDesired := getGaugeMetricValue(t, metrics.EndpointsDesired.WithLabelValues()) + actualEndpointsDesired, err := testutil.GetGaugeMetricValue(metrics.EndpointsDesired.WithLabelValues()) + handleErr(t, err, "desiredEndpoints") if actualEndpointsDesired != float64(em.desiredEndpoints) { t.Errorf("Expected desiredEndpoints to be %d, got %v", em.desiredEndpoints, actualEndpointsDesired) } - actualAddedPerSync := getHistogramMetricValue(t, metrics.EndpointsAddedPerSync.WithLabelValues()) + actualAddedPerSync, err := testutil.GetHistogramMetricValue(metrics.EndpointsAddedPerSync.WithLabelValues()) + handleErr(t, err, "endpointsAddedPerSync") if actualAddedPerSync != float64(em.addedPerSync) { t.Errorf("Expected endpointsAddedPerSync to be %d, got %v", em.addedPerSync, actualAddedPerSync) } - actualRemovedPerSync := getHistogramMetricValue(t, metrics.EndpointsRemovedPerSync.WithLabelValues()) + actualRemovedPerSync, err := testutil.GetHistogramMetricValue(metrics.EndpointsRemovedPerSync.WithLabelValues()) + handleErr(t, err, "endpointsRemovedPerSync") if actualRemovedPerSync != float64(em.removedPerSync) { t.Errorf("Expected endpointsRemovedPerSync to be %d, got %v", em.removedPerSync, actualRemovedPerSync) } - actualCreated := getCounterMetricValue(t, metrics.EndpointSliceChanges.WithLabelValues("create")) + actualCreated, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChanges.WithLabelValues("create")) + handleErr(t, err, "endpointSliceChangesCreated") if actualCreated != float64(em.numCreated) { t.Errorf("Expected endpointSliceChangesCreated to be %d, got %v", em.numCreated, actualCreated) } - actualUpdated := getCounterMetricValue(t, metrics.EndpointSliceChanges.WithLabelValues("update")) + actualUpdated, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChanges.WithLabelValues("update")) + handleErr(t, err, "endpointSliceChangesUpdated") if actualUpdated != float64(em.numUpdated) { t.Errorf("Expected endpointSliceChangesUpdated to be %d, got %v", em.numUpdated, actualUpdated) } - actualDeleted := getCounterMetricValue(t, metrics.EndpointSliceChanges.WithLabelValues("delete")) + actualDeleted, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChanges.WithLabelValues("delete")) + handleErr(t, err, "desiredEndpointSlices") if actualDeleted != float64(em.numDeleted) { t.Errorf("Expected endpointSliceChangesDeleted to be %d, got %v", em.numDeleted, actualDeleted) } } +func handleErr(t *testing.T, err error, metricName string) { + if err != nil { + t.Errorf("Failed to get %s value, err: %v", metricName, err) + } +} + func setupMetrics() { metrics.RegisterMetrics() metrics.NumEndpointSlices.Delete(map[string]string{}) @@ -936,30 +949,3 @@ func setupMetrics() { metrics.EndpointSliceChanges.Delete(map[string]string{"operation": "update"}) metrics.EndpointSliceChanges.Delete(map[string]string{"operation": "delete"}) } - -func getGaugeMetricValue(t *testing.T, metric compmetrics.GaugeMetric) float64 { - t.Helper() - metricProto := &dto.Metric{} - if err := metric.Write(metricProto); err != nil { - t.Errorf("Error writing metric: %v", err) - } - return metricProto.Gauge.GetValue() -} - -func getCounterMetricValue(t *testing.T, metric compmetrics.CounterMetric) float64 { - t.Helper() - metricProto := &dto.Metric{} - if err := metric.(compmetrics.Metric).Write(metricProto); err != nil { - t.Errorf("Error writing metric: %v", err) - } - return metricProto.Counter.GetValue() -} - -func getHistogramMetricValue(t *testing.T, metric compmetrics.ObserverMetric) float64 { - t.Helper() - metricProto := &dto.Metric{} - if err := metric.(compmetrics.Metric).Write(metricProto); err != nil { - t.Errorf("Error writing metric: %v", err) - } - return metricProto.Histogram.GetSampleSum() -} diff --git a/staging/src/k8s.io/component-base/metrics/BUILD b/staging/src/k8s.io/component-base/metrics/BUILD index 16385904f00..84128772b56 100644 --- a/staging/src/k8s.io/component-base/metrics/BUILD +++ b/staging/src/k8s.io/component-base/metrics/BUILD @@ -87,7 +87,6 @@ package_group( name = "prometheus_import_allow_list", packages = [ "//cluster/images/etcd-version-monitor", - "//pkg/controller/endpointslice", "//pkg/master", "//pkg/scheduler/framework/v1alpha1", "//pkg/volume/util/operationexecutor", diff --git a/staging/src/k8s.io/component-base/metrics/testutil/metrics.go b/staging/src/k8s.io/component-base/metrics/testutil/metrics.go index 4095d4233ca..cf39cb7ab56 100644 --- a/staging/src/k8s.io/component-base/metrics/testutil/metrics.go +++ b/staging/src/k8s.io/component-base/metrics/testutil/metrics.go @@ -320,3 +320,30 @@ func (hist *Histogram) Validate() error { return nil } + +// GetGaugeMetricValue extract metric value from GaugeMetric +func GetGaugeMetricValue(m metrics.GaugeMetric) (float64, error) { + metricProto := &dto.Metric{} + if err := m.Write(metricProto); err != nil { + return 0, fmt.Errorf("Error writing m: %v", err) + } + return metricProto.Gauge.GetValue(), nil +} + +// GetCounterMetricValue extract metric value from CounterMetric +func GetCounterMetricValue(m metrics.CounterMetric) (float64, error) { + metricProto := &dto.Metric{} + if err := m.(metrics.Metric).Write(metricProto); err != nil { + return 0, fmt.Errorf("Error writing m: %v", err) + } + return metricProto.Counter.GetValue(), nil +} + +// GetHistogramMetricValue extract sum of all samples from ObserverMetric +func GetHistogramMetricValue(m metrics.ObserverMetric) (float64, error) { + metricProto := &dto.Metric{} + if err := m.(metrics.Metric).Write(metricProto); err != nil { + return 0, fmt.Errorf("Error writing m: %v", err) + } + return metricProto.Histogram.GetSampleSum(), nil +}