From 3c2e5d39f794dd20608f54151328358b20397bb5 Mon Sep 17 00:00:00 2001
From: makocchi-git <makocchi@gmail.com>
Date: Thu, 11 Jul 2019 14:27:25 +0900
Subject: [PATCH] Ignore resource calculating when pod status is not running

---
 pkg/util/util.go      |  6 ++++++
 pkg/util/util_test.go | 41 ++++++++++++++++++++++++++++++++++++++---
 2 files changed, 44 insertions(+), 3 deletions(-)

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],
 		},
 	}