diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go index cafb6187496..7e0715eb5a6 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go @@ -514,12 +514,12 @@ func InstrumentHandlerFunc(verb, group, version, resource, subresource, scope, c // CleanScope returns the scope of the request. func CleanScope(requestInfo *request.RequestInfo) string { - if requestInfo.Namespace != "" { - return "namespace" - } if requestInfo.Name != "" { return "resource" } + if requestInfo.Namespace != "" { + return "namespace" + } if requestInfo.IsResourceRequest { return "cluster" } diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go index d620a44f423..27641aca83d 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go @@ -20,6 +20,8 @@ import ( "net/http" "net/url" "testing" + + "k8s.io/apiserver/pkg/endpoints/request" ) func TestCleanVerb(t *testing.T) { @@ -109,3 +111,50 @@ func TestCleanVerb(t *testing.T) { }) } } + +func TestCleanScope(t *testing.T) { + testCases := []struct { + name string + requestInfo *request.RequestInfo + expectedScope string + }{ + { + name: "empty scope", + requestInfo: &request.RequestInfo{}, + expectedScope: "", + }, + { + name: "resource scope", + requestInfo: &request.RequestInfo{ + Name: "my-resource", + Namespace: "my-namespace", + IsResourceRequest: false, + }, + expectedScope: "resource", + }, + { + name: "namespace scope", + requestInfo: &request.RequestInfo{ + Namespace: "my-namespace", + IsResourceRequest: false, + }, + expectedScope: "namespace", + }, + { + name: "cluster scope", + requestInfo: &request.RequestInfo{ + Namespace: "", + IsResourceRequest: true, + }, + expectedScope: "cluster", + }, + } + + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + if CleanScope(test.requestInfo) != test.expectedScope { + t.Errorf("failed to clean scope: %v", test.requestInfo) + } + }) + } +}