From 4cff7c3d30f4f6b4377d52ec29ec4866f1d28bb9 Mon Sep 17 00:00:00 2001 From: Matt Liggett Date: Tue, 11 Apr 2017 14:26:23 -0700 Subject: [PATCH] Drop leading path of KUBECTL.EXE if it shows up in User-Agent. --- .../src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go | 5 +++++ .../apiserver/pkg/endpoints/metrics/metrics_test.go | 8 ++++++++ 2 files changed, 13 insertions(+) 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 2ae4a26e03..2ace1c849b 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go @@ -109,9 +109,14 @@ func InstrumentRouteFunc(verb, resource string, routeFunc restful.RouteFunction) } func cleanUserAgent(ua string) string { + // We collapse all "web browser"-type user agents into one "browser" to reduce metric cardinality. if strings.HasPrefix(ua, "Mozilla/") { return "Browser" } + // If an old "kubectl.exe" has passed us its full path, we discard the path portion. + if exeIdx := strings.LastIndex(strings.ToLower(ua), "kubectl.exe"); exeIdx != -1 { + return ua[exeIdx:] + } return ua } 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 886bc1f625..01c1689e22 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 @@ -31,6 +31,14 @@ func TestCleanUserAgent(t *testing.T) { In: "kubectl/v1.2.4", Out: "kubectl/v1.2.4", }, + { + In: `C:\Users\Kubernetes\kubectl.exe/v1.5.4`, + Out: "kubectl.exe/v1.5.4", + }, + { + In: `C:\Program Files\kubectl.exe/v1.5.4`, + Out: "kubectl.exe/v1.5.4", + }, } { if cleanUserAgent(tc.In) != tc.Out { t.Errorf("Failed to clean User-Agent: %s", tc.In)