mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Fix verb reporting in metrics
This commit is contained in:
parent
34791349d6
commit
715f538c70
@ -213,10 +213,16 @@ func Record(req *http.Request, requestInfo *request.RequestInfo, component, cont
|
|||||||
requestInfo = &request.RequestInfo{Verb: req.Method, Path: req.URL.Path}
|
requestInfo = &request.RequestInfo{Verb: req.Method, Path: req.URL.Path}
|
||||||
}
|
}
|
||||||
scope := CleanScope(requestInfo)
|
scope := CleanScope(requestInfo)
|
||||||
|
// We don't use verb from <requestInfo>, as for the healthy path
|
||||||
|
// MonitorRequest is called from InstrumentRouteFunc which is registered
|
||||||
|
// in installer.go with predefined list of verbs (different than those
|
||||||
|
// translated to RequestInfo).
|
||||||
|
// However, we need to tweak it e.g. to differentiate GET from LIST.
|
||||||
|
verb := canonicalVerb(strings.ToUpper(req.Method), scope)
|
||||||
if requestInfo.IsResourceRequest {
|
if requestInfo.IsResourceRequest {
|
||||||
MonitorRequest(req, strings.ToUpper(requestInfo.Verb), requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component, contentType, code, responseSizeInBytes, elapsed)
|
MonitorRequest(req, verb, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component, contentType, code, responseSizeInBytes, elapsed)
|
||||||
} else {
|
} else {
|
||||||
MonitorRequest(req, strings.ToUpper(requestInfo.Verb), "", "", "", requestInfo.Path, scope, component, contentType, code, responseSizeInBytes, elapsed)
|
MonitorRequest(req, verb, "", "", "", requestInfo.Path, scope, component, contentType, code, responseSizeInBytes, elapsed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,7 +234,12 @@ func RecordLongRunning(req *http.Request, requestInfo *request.RequestInfo, comp
|
|||||||
}
|
}
|
||||||
var g prometheus.Gauge
|
var g prometheus.Gauge
|
||||||
scope := CleanScope(requestInfo)
|
scope := CleanScope(requestInfo)
|
||||||
reportedVerb := cleanVerb(strings.ToUpper(requestInfo.Verb), req)
|
// We don't use verb from <requestInfo>, as for the healthy path
|
||||||
|
// MonitorRequest is called from InstrumentRouteFunc which is registered
|
||||||
|
// in installer.go with predefined list of verbs (different than those
|
||||||
|
// translated to RequestInfo).
|
||||||
|
// However, we need to tweak it e.g. to differentiate GET from LIST.
|
||||||
|
reportedVerb := cleanVerb(canonicalVerb(strings.ToUpper(req.Method), scope), req)
|
||||||
if requestInfo.IsResourceRequest {
|
if requestInfo.IsResourceRequest {
|
||||||
g = longRunningRequestGauge.WithLabelValues(reportedVerb, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component)
|
g = longRunningRequestGauge.WithLabelValues(reportedVerb, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component)
|
||||||
} else {
|
} else {
|
||||||
@ -320,6 +331,18 @@ func CleanScope(requestInfo *request.RequestInfo) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func canonicalVerb(verb string, scope string) string {
|
||||||
|
switch verb {
|
||||||
|
case "GET", "HEAD":
|
||||||
|
if scope != "resource" {
|
||||||
|
return "LIST"
|
||||||
|
}
|
||||||
|
return "GET"
|
||||||
|
default:
|
||||||
|
return verb
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func cleanVerb(verb string, request *http.Request) string {
|
func cleanVerb(verb string, request *http.Request) string {
|
||||||
reportedVerb := verb
|
reportedVerb := verb
|
||||||
if verb == "LIST" {
|
if verb == "LIST" {
|
||||||
|
Loading…
Reference in New Issue
Block a user