diff --git a/pkg/util/util.go b/pkg/util/util.go index ebd5bac..71cbd96 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -228,6 +228,12 @@ func GetPodResources(pods v1.PodList) (int64, int64, int64, int64) { var rc, rm, lc, lm int64 for _, pod := range pods.Items { + + // skip if pod status is not running + if pod.Status.Phase != v1.PodRunning { + continue + } + for _, container := range pod.Spec.Containers { rc += container.Resources.Requests.Cpu().MilliValue() lc += container.Resources.Limits.Cpu().MilliValue() diff --git a/pkg/util/util_test.go b/pkg/util/util_test.go index 8412539..3581882 100644 --- a/pkg/util/util_test.go +++ b/pkg/util/util_test.go @@ -80,6 +80,9 @@ var testPods = []v1.Pod{ }, }, }, + Status: v1.PodStatus{ + Phase: v1.PodRunning, + }, }, { ObjectMeta: metav1.ObjectMeta{ @@ -117,6 +120,36 @@ var testPods = []v1.Pod{ }, }, }, + Status: v1.PodStatus{ + Phase: v1.PodRunning, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "pod3", + Namespace: "default", + }, + Spec: v1.PodSpec{ + NodeName: "node3", + Containers: []v1.Container{ + { + Name: "container3", + Resources: v1.ResourceRequirements{ + Limits: v1.ResourceList{ + v1.ResourceCPU: *resource.NewMilliQuantity(300, resource.DecimalSI), + v1.ResourceMemory: *resource.NewQuantity(300, resource.DecimalSI), + }, + Requests: v1.ResourceList{ + v1.ResourceCPU: *resource.NewMilliQuantity(300, resource.DecimalSI), + v1.ResourceMemory: *resource.NewQuantity(300, resource.DecimalSI), + }, + }, + }, + }, + }, + Status: v1.PodStatus{ + Phase: v1.PodFailed, + }, }, } @@ -474,13 +507,15 @@ func TestGetPods(t *testing.T) { func TestGetPodResources(t *testing.T) { // cpu/ mem cpu/ mem - // pod1 container1 [requests 1000/1000] [limits 2000/2000] - // pod2 container1 [requests 500/1000] [limits 500/1000] - // pod2 container2 [requests 50/ 100] [limits 50/ 100] + // pod1 container1 : Running [requests 1000/1000] [limits 2000/2000] + // pod2 container2a : Running [requests 500/1000] [limits 500/1000] + // pod2 container2b : Running [requests 50/ 100] [limits 50/ 100] + // pod3 container3 : Failed [requests 300/ 300] [limits 300/ 300] pods := v1.PodList{ Items: []v1.Pod{ testPods[0], testPods[1], + testPods[2], }, }