Skip to content

Commit

Permalink
Refine route list output
Browse files Browse the repository at this point in the history
- Show tag for revisionName if any
- Make the traffic colume shorter

[issue 350](#350)
  • Loading branch information
Gong Zhang committed Sep 16, 2019
1 parent 34fcd89 commit e217cc5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 23 deletions.
14 changes: 8 additions & 6 deletions pkg/kn/commands/route/human_readable_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package route

import (
"fmt"
"strings"

metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
Expand Down Expand Up @@ -70,13 +71,14 @@ func printRoute(route *servingv1alpha1.Route, options hprinters.PrintOptions) ([
}

func calculateTraffic(targets []servingv1alpha1.TrafficTarget) string {
var traffic string
var traffics []string
for _, target := range targets {
if len(traffic) > 0 {
traffic = fmt.Sprintf("%s, %d%% -> %s", traffic, target.Percent, target.RevisionName)
} else {
traffic = fmt.Sprintf("%d%% -> %s", target.Percent, target.RevisionName)
var tag string
if target.Tag != "" {
tag = fmt.Sprintf("(%s)", target.Tag)
}
traffic := fmt.Sprintf("%s%s=%d", tag, target.RevisionName, target.Percent)
traffics = append(traffics, traffic)
}
return traffic
return strings.Join(traffics, ", ")
}
38 changes: 21 additions & 17 deletions pkg/kn/commands/route/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,10 @@ func TestListEmpty(t *testing.T) {
}

func TestRouteListDefaultOutput(t *testing.T) {
route1 := createMockRouteSingleTarget("foo", "foo-01234", 100)
route2 := createMockRouteSingleTarget("bar", "bar-98765", 100)
routeList := &v1alpha1.RouteList{Items: []v1alpha1.Route{*route1, *route2}}
route1 := createMockRouteSingleTarget("foo", "foo-01234", "", 100)
route2 := createMockRouteSingleTarget("bar", "bar-98765", "", 100)
route3 := createMockRouteSingleTarget("foo-bar", "foobar-23456", "current", 100)
routeList := &v1alpha1.RouteList{Items: []v1alpha1.Route{*route1, *route2, *route3}}
action, output, err := fakeRouteList([]string{"route", "list"}, routeList)
assert.NilError(t, err)
if action == nil {
Expand All @@ -68,13 +69,15 @@ func TestRouteListDefaultOutput(t *testing.T) {
t.Errorf("Bad action %v", action)
}
assert.Check(t, util.ContainsAll(output[0], "NAME", "URL", "AGE", "CONDITIONS", "TRAFFIC"))
assert.Check(t, util.ContainsAll(output[1], "foo", "100% -> foo-01234"))
assert.Check(t, util.ContainsAll(output[2], "bar", "100% -> bar-98765"))
assert.Check(t, util.ContainsAll(output[1], "foo", "foo-01234=100"))
assert.Check(t, util.ContainsAll(output[2], "bar", "bar-98765=100"))
assert.Check(t, util.ContainsAll(output[3], "foo-bar", "(current)foobar-23456=100"))

}

func TestRouteListDefaultOutputNoHeaders(t *testing.T) {
route1 := createMockRouteSingleTarget("foo", "foo-01234", 100)
route2 := createMockRouteSingleTarget("bar", "bar-98765", 100)
route1 := createMockRouteSingleTarget("foo", "foo-01234", "", 100)
route2 := createMockRouteSingleTarget("bar", "bar-98765", "", 100)
routeList := &v1alpha1.RouteList{Items: []v1alpha1.Route{*route1, *route2}}
action, output, err := fakeRouteList([]string{"route", "list", "--no-headers"}, routeList)
assert.NilError(t, err)
Expand All @@ -85,13 +88,13 @@ func TestRouteListDefaultOutputNoHeaders(t *testing.T) {
}

assert.Check(t, util.ContainsNone(output[0], "NAME", "URL", "GENERATION", "AGE", "CONDITIONS", "READY", "REASON"))
assert.Check(t, util.ContainsAll(output[0], "foo", "100% -> foo-01234"))
assert.Check(t, util.ContainsAll(output[1], "bar", "100% -> bar-98765"))
assert.Check(t, util.ContainsAll(output[0], "foo", "foo-01234=100"))
assert.Check(t, util.ContainsAll(output[1], "bar", "bar-98765=100"))

}

func TestRouteListWithTwoTargetsOutput(t *testing.T) {
route := createMockRouteTwoTarget("foo", "foo-01234", "foo-98765", 20, 80)
route := createMockRouteTwoTarget("foo", "foo-01234", "foo-98765", 20, 80, "current", "candidate")
routeList := &v1alpha1.RouteList{Items: []v1alpha1.Route{*route}}
action, output, err := fakeRouteList([]string{"route", "list"}, routeList)
assert.NilError(t, err)
Expand All @@ -101,7 +104,7 @@ func TestRouteListWithTwoTargetsOutput(t *testing.T) {
t.Errorf("Bad action %v", action)
}
assert.Check(t, util.ContainsAll(output[0], "NAME", "URL", "AGE", "CONDITIONS", "TRAFFIC"))
assert.Check(t, util.ContainsAll(output[1], "foo", "20% -> foo-01234, 80% -> foo-98765"))
assert.Check(t, util.ContainsAll(output[1], "foo", "(current)foo-01234=20, (candidate)foo-98765=80"))
}

func createMockRouteMeta(name string) *v1alpha1.Route {
Expand All @@ -113,26 +116,27 @@ func createMockRouteMeta(name string) *v1alpha1.Route {
return route
}

func createMockTrafficTarget(revision string, percent int) *v1alpha1.TrafficTarget {
func createMockTrafficTarget(revision string, tag string, percent int) *v1alpha1.TrafficTarget {
return &v1alpha1.TrafficTarget{
TrafficTarget: v1beta1.TrafficTarget{
RevisionName: revision,
Tag: tag,
Percent: percent,
},
}
}

func createMockRouteSingleTarget(name, revision string, percent int) *v1alpha1.Route {
func createMockRouteSingleTarget(name string, revision string, tag string , percent int) *v1alpha1.Route {
route := createMockRouteMeta(name)
target := createMockTrafficTarget(revision, percent)
target := createMockTrafficTarget(revision, tag, percent)
route.Status.Traffic = []v1alpha1.TrafficTarget{*target}
return route
}

func createMockRouteTwoTarget(name string, rev1, rev2 string, percent1, percent2 int) *v1alpha1.Route {
func createMockRouteTwoTarget(name string, rev1, rev2 string, percent1, percent2 int, tag1, tag2 string) *v1alpha1.Route {
route := createMockRouteMeta(name)
target1 := createMockTrafficTarget(rev1, percent1)
target2 := createMockTrafficTarget(rev2, percent2)
target1 := createMockTrafficTarget(rev1, tag1, percent1)
target2 := createMockTrafficTarget(rev2, tag2, percent2)
route.Status.Traffic = []v1alpha1.TrafficTarget{*target1, *target2}
return route
}

0 comments on commit e217cc5

Please sign in to comment.