Skip to content

Commit c369cf1

Browse files
authored
Merge pull request kubernetes#81660 from wojtek-t/fix_metrics_reporting
Fix verb reporting in metrics
2 parents 22a8bcf + 715f538 commit c369cf1

File tree

1 file changed

+26
-3
lines changed
  • staging/src/k8s.io/apiserver/pkg/endpoints/metrics

1 file changed

+26
-3
lines changed

staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,16 @@ func Record(req *http.Request, requestInfo *request.RequestInfo, component, cont
222222
requestInfo = &request.RequestInfo{Verb: req.Method, Path: req.URL.Path}
223223
}
224224
scope := CleanScope(requestInfo)
225+
// We don't use verb from <requestInfo>, as for the healthy path
226+
// MonitorRequest is called from InstrumentRouteFunc which is registered
227+
// in installer.go with predefined list of verbs (different than those
228+
// translated to RequestInfo).
229+
// However, we need to tweak it e.g. to differentiate GET from LIST.
230+
verb := canonicalVerb(strings.ToUpper(req.Method), scope)
225231
if requestInfo.IsResourceRequest {
226-
MonitorRequest(req, strings.ToUpper(requestInfo.Verb), requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component, contentType, code, responseSizeInBytes, elapsed)
232+
MonitorRequest(req, verb, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component, contentType, code, responseSizeInBytes, elapsed)
227233
} else {
228-
MonitorRequest(req, strings.ToUpper(requestInfo.Verb), "", "", "", requestInfo.Path, scope, component, contentType, code, responseSizeInBytes, elapsed)
234+
MonitorRequest(req, verb, "", "", "", requestInfo.Path, scope, component, contentType, code, responseSizeInBytes, elapsed)
229235
}
230236
}
231237

@@ -237,7 +243,12 @@ func RecordLongRunning(req *http.Request, requestInfo *request.RequestInfo, comp
237243
}
238244
var g prometheus.Gauge
239245
scope := CleanScope(requestInfo)
240-
reportedVerb := cleanVerb(strings.ToUpper(requestInfo.Verb), req)
246+
// We don't use verb from <requestInfo>, as for the healthy path
247+
// MonitorRequest is called from InstrumentRouteFunc which is registered
248+
// in installer.go with predefined list of verbs (different than those
249+
// translated to RequestInfo).
250+
// However, we need to tweak it e.g. to differentiate GET from LIST.
251+
reportedVerb := cleanVerb(canonicalVerb(strings.ToUpper(req.Method), scope), req)
241252
if requestInfo.IsResourceRequest {
242253
g = longRunningRequestGauge.WithLabelValues(reportedVerb, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component)
243254
} else {
@@ -329,6 +340,18 @@ func CleanScope(requestInfo *request.RequestInfo) string {
329340
return ""
330341
}
331342

343+
func canonicalVerb(verb string, scope string) string {
344+
switch verb {
345+
case "GET", "HEAD":
346+
if scope != "resource" {
347+
return "LIST"
348+
}
349+
return "GET"
350+
default:
351+
return verb
352+
}
353+
}
354+
332355
func cleanVerb(verb string, request *http.Request) string {
333356
reportedVerb := verb
334357
if verb == "LIST" {

0 commit comments

Comments
 (0)