fix deltas issues

mine
derailed 2019-04-04 23:43:34 -06:00
parent 7fe70ae41b
commit ee06341120
2 changed files with 33 additions and 53 deletions

View File

@ -4,37 +4,36 @@ import (
"fmt"
"strconv"
"strings"
"time"
"k8s.io/apimachinery/pkg/api/resource"
)
func toPerc(f float64) string {
return fmt.Sprintf("%.0f%%", f)
}
func deltas(c, n string) string {
c, n = strings.TrimSpace(c), strings.TrimSpace(n)
if c == "n/a" {
func deltas(o, n string) string {
o, n = strings.TrimSpace(o), strings.TrimSpace(n)
if o == "" || o == "n/a" {
return ""
}
if i, ok := numerical(c); ok {
if j, ok := numerical(n); ok {
switch {
case i < j:
return plus()
case i > j:
return minus()
default:
return ""
}
}
return ""
}
if isAlpha(c) {
if strings.Contains(c, "(") {
if i, ok := numerical(o); ok {
j, _ := numerical(n)
switch {
case i < j:
return plus()
case i > j:
return minus()
default:
return ""
}
switch strings.Compare(c, n) {
}
if q1, err := resource.ParseQuantity(o); err == nil {
q2, _ := resource.ParseQuantity(n)
switch q1.Cmp(q2) {
case -1:
return plus()
case 1:
@ -44,11 +43,19 @@ func deltas(c, n string) string {
}
}
if len(c) == 0 {
return ""
if d1, err := time.ParseDuration(o); err == nil {
d2, _ := time.ParseDuration(n)
switch {
case d2-d1 > 0:
return plus()
case d2-d1 < 0:
return minus()
default:
return ""
}
}
switch strings.Compare(c, n) {
switch strings.Compare(o, n) {
case 1, -1:
return delta()
default:
@ -56,22 +63,12 @@ func deltas(c, n string) string {
}
}
func isAlpha(s string) bool {
if len(s) == 0 {
return false
}
if _, err := strconv.Atoi(string(s[0])); err != nil {
return false
}
return true
}
func numerical(s string) (int, bool) {
n, err := strconv.Atoi(s)
if err != nil {
return 0, false
}
return n, true
}

View File

@ -15,8 +15,9 @@ func TestDeltas(t *testing.T) {
{"fred", "blee", delta()},
{"1", "2", plus()},
{"2", "1", minus()},
{"2m33s", "1m", minus()},
{"10Gi", "20Gi", plus()},
{"15%(-)", "15%", ""},
{"15%(-)", "15%", delta()},
{resource.MissingValue, "", delta()},
{resource.NAValue, "", delta()},
}
@ -25,21 +26,3 @@ func TestDeltas(t *testing.T) {
assert.Equal(t, u.e, deltas(u.s1, u.s2))
}
}
func TestIsAlpha(t *testing.T) {
uu := []struct {
i string
e bool
}{
{"fred", false},
{"1Gi", true},
{"1", true},
{"", false},
{resource.MissingValue, false},
{resource.NAValue, false},
}
for _, u := range uu {
assert.Equal(t, u.e, isAlpha(u.i))
}
}