in src/app/backend/resource/node/detail.go [171:233]
func getNodeAllocatedResources(node v1.Node, podList *v1.PodList) (NodeAllocatedResources, error) {
reqs, limits := map[v1.ResourceName]resource.Quantity{}, map[v1.ResourceName]resource.Quantity{}
for _, pod := range podList.Items {
podReqs, podLimits, err := PodRequestsAndLimits(&pod)
if err != nil {
return NodeAllocatedResources{}, err
}
for podReqName, podReqValue := range podReqs {
if value, ok := reqs[podReqName]; !ok {
reqs[podReqName] = podReqValue.DeepCopy()
} else {
value.Add(podReqValue)
reqs[podReqName] = value
}
}
for podLimitName, podLimitValue := range podLimits {
if value, ok := limits[podLimitName]; !ok {
limits[podLimitName] = podLimitValue.DeepCopy()
} else {
value.Add(podLimitValue)
limits[podLimitName] = value
}
}
}
cpuRequests, cpuLimits, memoryRequests, memoryLimits := reqs[v1.ResourceCPU],
limits[v1.ResourceCPU], reqs[v1.ResourceMemory], limits[v1.ResourceMemory]
var cpuRequestsFraction, cpuLimitsFraction float64 = 0, 0
if capacity := float64(node.Status.Allocatable.Cpu().MilliValue()); capacity > 0 {
cpuRequestsFraction = float64(cpuRequests.MilliValue()) / capacity * 100
cpuLimitsFraction = float64(cpuLimits.MilliValue()) / capacity * 100
}
var memoryRequestsFraction, memoryLimitsFraction float64 = 0, 0
if capacity := float64(node.Status.Allocatable.Memory().MilliValue()); capacity > 0 {
memoryRequestsFraction = float64(memoryRequests.MilliValue()) / capacity * 100
memoryLimitsFraction = float64(memoryLimits.MilliValue()) / capacity * 100
}
var podFraction float64 = 0
var podCapacity int64 = node.Status.Capacity.Pods().Value()
if podCapacity > 0 {
podFraction = float64(len(podList.Items)) / float64(podCapacity) * 100
}
return NodeAllocatedResources{
CPURequests: cpuRequests.MilliValue(),
CPURequestsFraction: cpuRequestsFraction,
CPULimits: cpuLimits.MilliValue(),
CPULimitsFraction: cpuLimitsFraction,
CPUCapacity: node.Status.Allocatable.Cpu().MilliValue(),
MemoryRequests: memoryRequests.Value(),
MemoryRequestsFraction: memoryRequestsFraction,
MemoryLimits: memoryLimits.Value(),
MemoryLimitsFraction: memoryLimitsFraction,
MemoryCapacity: node.Status.Allocatable.Memory().Value(),
AllocatedPods: len(podList.Items),
PodCapacity: podCapacity,
PodFraction: podFraction,
}, nil
}