diff --git a/pkg/endpoints/metrics/metrics.go b/pkg/endpoints/metrics/metrics.go index 99e8d66ab..2ae4a26e0 100644 --- a/pkg/endpoints/metrics/metrics.go +++ b/pkg/endpoints/metrics/metrics.go @@ -104,10 +104,17 @@ func InstrumentRouteFunc(verb, resource string, routeFunc restful.RouteFunction) if verb == "LIST" && strings.ToLower(request.QueryParameter("watch")) == "true" { verb = "WATCH" } - Monitor(&verb, &resource, utilnet.GetHTTPClient(request.Request), rw.Header().Get("Content-Type"), delegate.status, now) + Monitor(&verb, &resource, cleanUserAgent(utilnet.GetHTTPClient(request.Request)), rw.Header().Get("Content-Type"), delegate.status, now) }) } +func cleanUserAgent(ua string) string { + if strings.HasPrefix(ua, "Mozilla/") { + return "Browser" + } + return ua +} + type responseWriterDelegator struct { http.ResponseWriter diff --git a/pkg/endpoints/metrics/metrics_test.go b/pkg/endpoints/metrics/metrics_test.go new file mode 100644 index 000000000..886bc1f62 --- /dev/null +++ b/pkg/endpoints/metrics/metrics_test.go @@ -0,0 +1,39 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package metrics + +import "testing" + +func TestCleanUserAgent(t *testing.T) { + for _, tc := range []struct { + In string + Out string + }{ + { + In: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36", + Out: "Browser", + }, + { + In: "kubectl/v1.2.4", + Out: "kubectl/v1.2.4", + }, + } { + if cleanUserAgent(tc.In) != tc.Out { + t.Errorf("Failed to clean User-Agent: %s", tc.In) + } + } +}