diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index fb076d077a388..5dc1566736003 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -70,9 +70,9 @@ func init() { // monitor is a helper function for each HTTP request handler to use for // instrumenting basic request counter and latency metrics. -func monitor(handler, verb, resource string, httpCode int, reqStart time.Time) { - requestCounter.WithLabelValues(handler, verb, resource, strconv.Itoa(httpCode)).Inc() - requestLatencies.WithLabelValues(handler, verb).Observe(float64((time.Since(reqStart)) / time.Microsecond)) +func monitor(handler string, verb, resource *string, httpCode *int, reqStart time.Time) { + requestCounter.WithLabelValues(handler, *verb, *resource, strconv.Itoa(*httpCode)).Inc() + requestLatencies.WithLabelValues(handler, *verb).Observe(float64((time.Since(reqStart)) / time.Microsecond)) } // monitorFilter creates a filter that reports the metrics for a given resource and action. @@ -80,7 +80,8 @@ func monitorFilter(action, resource string) restful.FilterFunction { return func(req *restful.Request, res *restful.Response, chain *restful.FilterChain) { reqStart := time.Now() chain.ProcessFilter(req, res) - monitor("rest", action, resource, res.StatusCode(), reqStart) + httpCode := res.StatusCode() + monitor("rest", &action, &resource, &httpCode, reqStart) } } diff --git a/pkg/apiserver/proxy.go b/pkg/apiserver/proxy.go index 09a4c7b91519d..4666fa970b929 100644 --- a/pkg/apiserver/proxy.go +++ b/pkg/apiserver/proxy.go @@ -90,7 +90,7 @@ func (r *ProxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { var apiResource string var httpCode int reqStart := time.Now() - defer monitor("proxy", verb, apiResource, httpCode, reqStart) + defer monitor("proxy", &verb, &apiResource, &httpCode, reqStart) requestInfo, err := r.apiRequestInfoResolver.GetAPIRequestInfo(req) if err != nil { diff --git a/pkg/apiserver/redirect.go b/pkg/apiserver/redirect.go index 6dbfc64d4e735..44e372ea32d24 100644 --- a/pkg/apiserver/redirect.go +++ b/pkg/apiserver/redirect.go @@ -39,7 +39,7 @@ func (r *RedirectHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { var apiResource string var httpCode int reqStart := time.Now() - defer monitor("redirect", verb, apiResource, httpCode, reqStart) + defer monitor("redirect", &verb, &apiResource, &httpCode, reqStart) requestInfo, err := r.apiRequestInfoResolver.GetAPIRequestInfo(req) if err != nil { diff --git a/pkg/apiserver/validator.go b/pkg/apiserver/validator.go index f4c2bf9104683..037204a540fd4 100644 --- a/pkg/apiserver/validator.go +++ b/pkg/apiserver/validator.go @@ -73,9 +73,11 @@ type ServerStatus struct { } func (v *validator) ServeHTTP(w http.ResponseWriter, r *http.Request) { + verb := "get" + apiResource := "" var httpCode int reqStart := time.Now() - defer monitor("validate", "get", "", httpCode, reqStart) + defer monitor("validate", &verb, &apiResource, &httpCode, reqStart) reply := []ServerStatus{} for name, server := range v.servers() { diff --git a/pkg/apiserver/watch.go b/pkg/apiserver/watch.go index c9e501b16bdc7..d4934fc5657f4 100644 --- a/pkg/apiserver/watch.go +++ b/pkg/apiserver/watch.go @@ -66,7 +66,7 @@ func (h *WatchHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { var apiResource string var httpCode int reqStart := time.Now() - defer monitor("watch", verb, apiResource, httpCode, reqStart) + defer monitor("watch", &verb, &apiResource, &httpCode, reqStart) if req.Method != "GET" { notFound(w, req)