If container doesn't have resources set, in pod view show limits as n/a

mine
Pavel Tumik 2020-04-30 14:09:24 -07:00
parent c3c77b6e50
commit 0c425f2edf
3 changed files with 15 additions and 6 deletions

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"math" "math"
"strconv"
"time" "time"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
@ -262,3 +263,11 @@ func ToPercentage(v1, v2 int64) int {
} }
return int(math.Floor((float64(v1) / float64(v2)) * 100)) return int(math.Floor((float64(v1) / float64(v2)) * 100))
} }
// ToPercentageStr computes percentage, but if v2 is 0, it will return NAValue instead of 0
func ToPercentageStr(v1, v2 int64) string {
if v2 == 0 {
return NA
}
return strconv.Itoa(ToPercentage(v1, v2))
}

View File

@ -160,10 +160,10 @@ func (*Pod) gatherPodMX(pod *v1.Pod, mx *mv1beta1.PodMetrics) (c, p metric) {
rc, rm := requestedRes(pod.Spec.Containers) rc, rm := requestedRes(pod.Spec.Containers)
lc, lm := resourceLimits(pod.Spec.Containers) lc, lm := resourceLimits(pod.Spec.Containers)
p = metric{ p = metric{
cpu: IntToStr(client.ToPercentage(cpu.MilliValue(), rc.MilliValue())), cpu: client.ToPercentageStr(cpu.MilliValue(), rc.MilliValue()),
mem: IntToStr(client.ToPercentage(client.ToMB(mem.Value()), client.ToMB(rm.Value()))), mem: client.ToPercentageStr(client.ToMB(mem.Value()), client.ToMB(rm.Value())),
cpuLim: IntToStr(client.ToPercentage(cpu.MilliValue(), lc.MilliValue())), cpuLim: client.ToPercentageStr(cpu.MilliValue(), lc.MilliValue()),
memLim: IntToStr(client.ToPercentage(client.ToMB(mem.Value()), client.ToMB(lm.Value()))), memLim: client.ToPercentageStr(client.ToMB(mem.Value()), client.ToMB(lm.Value())),
} }
return return

View File

@ -159,7 +159,7 @@ func TestPodRender(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, "default/nginx", r.ID) assert.Equal(t, "default/nginx", r.ID)
e := render.Fields{"default", "nginx", "1/1", "0", "Running", "10", "10", "10", "14", "0", "5", "172.17.0.6", "minikube", "BE"} e := render.Fields{"default", "nginx", "1/1", "0", "Running", "10", "10", "10", "14", render.NAValue, "5", "172.17.0.6", "minikube", "BE"}
assert.Equal(t, e, r.Fields[:14]) assert.Equal(t, e, r.Fields[:14])
} }
@ -190,7 +190,7 @@ func TestPodInitRender(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, "default/nginx", r.ID) assert.Equal(t, "default/nginx", r.ID)
e := render.Fields{"default", "nginx", "1/1", "0", "Init:0/1", "10", "10", "10", "14", "0", "5", "172.17.0.6", "minikube", "BE"} e := render.Fields{"default", "nginx", "1/1", "0", "Init:0/1", "10", "10", "10", "14", render.NAValue, "5", "172.17.0.6", "minikube", "BE"}
assert.Equal(t, e, r.Fields[:14]) assert.Equal(t, e, r.Fields[:14])
} }