mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #105674 from tkashem/apf-debug
apf: include seat information in per request debug dump
This commit is contained in:
commit
0cef26182c
@ -159,18 +159,21 @@ func (cfgCtlr *configController) dumpRequests(w http.ResponseWriter, r *http.Req
|
|||||||
"RequestIndexInQueue", // 4
|
"RequestIndexInQueue", // 4
|
||||||
"FlowDistingsher", // 5
|
"FlowDistingsher", // 5
|
||||||
"ArriveTime", // 6
|
"ArriveTime", // 6
|
||||||
|
"InitialSeats", // 7
|
||||||
|
"FinalSeats", // 8
|
||||||
|
"AdditionalLatency", // 9
|
||||||
}))
|
}))
|
||||||
if includeRequestDetails {
|
if includeRequestDetails {
|
||||||
continueLine(tabWriter)
|
continueLine(tabWriter)
|
||||||
tabPrint(tabWriter, rowForHeaders([]string{
|
tabPrint(tabWriter, rowForHeaders([]string{
|
||||||
"UserName", // 7
|
"UserName", // 10
|
||||||
"Verb", // 8
|
"Verb", // 11
|
||||||
"APIPath", // 9
|
"APIPath", // 12
|
||||||
"Namespace", // 10
|
"Namespace", // 13
|
||||||
"Name", // 11
|
"Name", // 14
|
||||||
"APIVersion", // 12
|
"APIVersion", // 15
|
||||||
"Resource", // 13
|
"Resource", // 16
|
||||||
"SubResource", // 14
|
"SubResource", // 17
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
endLine(tabWriter)
|
endLine(tabWriter)
|
||||||
@ -181,28 +184,31 @@ func (cfgCtlr *configController) dumpRequests(w http.ResponseWriter, r *http.Req
|
|||||||
queueSetDigest := plState.queues.Dump(includeRequestDetails)
|
queueSetDigest := plState.queues.Dump(includeRequestDetails)
|
||||||
for iq, q := range queueSetDigest.Queues {
|
for iq, q := range queueSetDigest.Queues {
|
||||||
for ir, r := range q.Requests {
|
for ir, r := range q.Requests {
|
||||||
tabPrint(tabWriter, rowForRequest(
|
tabPrint(tabWriter, row(
|
||||||
plState.pl.Name, // 1
|
plState.pl.Name, // 1
|
||||||
r.MatchedFlowSchema, // 2
|
r.MatchedFlowSchema, // 2
|
||||||
iq, // 3
|
strconv.Itoa(iq), // 3
|
||||||
ir, // 4
|
strconv.Itoa(ir), // 4
|
||||||
r.FlowDistinguisher, // 5
|
r.FlowDistinguisher, // 5
|
||||||
r.ArriveTime, // 6
|
r.ArriveTime.UTC().Format(time.RFC3339Nano), // 6
|
||||||
|
strconv.Itoa(int(r.WorkEstimate.InitialSeats)), // 7
|
||||||
|
strconv.Itoa(int(r.WorkEstimate.FinalSeats)), // 8
|
||||||
|
r.WorkEstimate.AdditionalLatency.String(), // 9
|
||||||
))
|
))
|
||||||
if includeRequestDetails {
|
if includeRequestDetails {
|
||||||
continueLine(tabWriter)
|
continueLine(tabWriter)
|
||||||
tabPrint(tabWriter, rowForRequestDetails(
|
tabPrint(tabWriter, rowForRequestDetails(
|
||||||
r.UserName, // 7
|
r.UserName, // 10
|
||||||
r.RequestInfo.Verb, // 8
|
r.RequestInfo.Verb, // 11
|
||||||
r.RequestInfo.Path, // 9
|
r.RequestInfo.Path, // 12
|
||||||
r.RequestInfo.Namespace, // 10
|
r.RequestInfo.Namespace, // 13
|
||||||
r.RequestInfo.Name, // 11
|
r.RequestInfo.Name, // 14
|
||||||
schema.GroupVersion{
|
schema.GroupVersion{
|
||||||
Group: r.RequestInfo.APIGroup,
|
Group: r.RequestInfo.APIGroup,
|
||||||
Version: r.RequestInfo.APIVersion,
|
Version: r.RequestInfo.APIVersion,
|
||||||
}.String(), // 12
|
}.String(), // 15
|
||||||
r.RequestInfo.Resource, // 13
|
r.RequestInfo.Resource, // 16
|
||||||
r.RequestInfo.Subresource, // 14
|
r.RequestInfo.Subresource, // 17
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
endLine(tabWriter)
|
endLine(tabWriter)
|
||||||
@ -241,17 +247,6 @@ func rowForPriorityLevel(plName string, activeQueues int, isIdle, isQuiescing bo
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func rowForRequest(plName, fsName string, queueIndex, requestIndex int, flowDistinguisher string, arriveTime time.Time) string {
|
|
||||||
return row(
|
|
||||||
plName,
|
|
||||||
fsName,
|
|
||||||
strconv.Itoa(queueIndex),
|
|
||||||
strconv.Itoa(requestIndex),
|
|
||||||
flowDistinguisher,
|
|
||||||
arriveTime.UTC().Format(time.RFC3339Nano),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func rowForRequestDetails(username, verb, path, namespace, name, apiVersion, resource, subResource string) string {
|
func rowForRequestDetails(username, verb, path, namespace, name, apiVersion, resource, subResource string) string {
|
||||||
return row(
|
return row(
|
||||||
username,
|
username,
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/request"
|
"k8s.io/apiserver/pkg/endpoints/request"
|
||||||
|
flowcontrolrequest "k8s.io/apiserver/pkg/util/flowcontrol/request"
|
||||||
)
|
)
|
||||||
|
|
||||||
// QueueSetDump is an instant dump of queue-set.
|
// QueueSetDump is an instant dump of queue-set.
|
||||||
@ -51,6 +52,7 @@ type RequestDump struct {
|
|||||||
FlowDistinguisher string
|
FlowDistinguisher string
|
||||||
ArriveTime time.Time
|
ArriveTime time.Time
|
||||||
StartTime time.Time
|
StartTime time.Time
|
||||||
|
WorkEstimate flowcontrolrequest.WorkEstimate
|
||||||
// request details
|
// request details
|
||||||
UserName string
|
UserName string
|
||||||
RequestInfo request.RequestInfo
|
RequestInfo request.RequestInfo
|
||||||
|
@ -161,6 +161,7 @@ func (q *queue) dump(includeDetails bool) debug.QueueDump {
|
|||||||
digest[i].FlowDistinguisher = r.flowDistinguisher
|
digest[i].FlowDistinguisher = r.flowDistinguisher
|
||||||
digest[i].ArriveTime = r.arrivalTime
|
digest[i].ArriveTime = r.arrivalTime
|
||||||
digest[i].StartTime = r.startTime
|
digest[i].StartTime = r.startTime
|
||||||
|
digest[i].WorkEstimate = r.workEstimate.WorkEstimate
|
||||||
if includeDetails {
|
if includeDetails {
|
||||||
userInfo, _ := genericrequest.UserFrom(r.ctx)
|
userInfo, _ := genericrequest.UserFrom(r.ctx)
|
||||||
digest[i].UserName = userInfo.GetName()
|
digest[i].UserName = userInfo.GetName()
|
||||||
|
Loading…
Reference in New Issue
Block a user