From b8ffd9709f32abe4623bdce1fee5a2eaacade33c Mon Sep 17 00:00:00 2001 From: Diptanu Choudhury Date: Thu, 4 Aug 2016 10:42:53 -0700 Subject: [PATCH 1/3] Sorting the job summaries while displaying --- command/status.go | 20 ++++++++++++++++++++ command/status_test.go | 11 +++++++++++ 2 files changed, 31 insertions(+) diff --git a/command/status.go b/command/status.go index 825d805c4..89143cb86 100644 --- a/command/status.go +++ b/command/status.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/gob" "fmt" + "sort" "strings" "time" @@ -266,6 +267,7 @@ func (c *StatusCommand) outputJobInfo(client *api.Client, job *api.Job) error { ) idx += 1 } + sort.Sort(JobSummaryOutputSort(summaries[1:])) c.Ui.Output(formatList(summaries)) } @@ -374,3 +376,21 @@ func convertApiJob(in *api.Job) (*structs.Job, error) { } return structJob, nil } + +// JobSummaryOutputSort implements the sort interface and sorts an array of job +// summary output +type JobSummaryOutputSort []string + +func (j JobSummaryOutputSort) Len() int { + return len(j) +} + +func (j JobSummaryOutputSort) Less(a, b int) bool { + taskGroupA := j[a][:strings.Index(j[a], "|")] + taskGroupB := j[b][:strings.Index(j[b], "|")] + return taskGroupA < taskGroupB +} + +func (j JobSummaryOutputSort) Swap(a, b int) { + j[a], j[b] = j[b], j[a] +} diff --git a/command/status_test.go b/command/status_test.go index 270d91357..dc422014d 100644 --- a/command/status_test.go +++ b/command/status_test.go @@ -1,6 +1,8 @@ package command import ( + "reflect" + "sort" "strings" "testing" @@ -170,3 +172,12 @@ func TestStatusCommand_Fails(t *testing.T) { t.Fatalf("expected failed query error, got: %s", out) } } + +func TestStatusCommand_SortTG(t *testing.T) { + summary := []string{"TGD|3|5|6|7", "TGA|3|5|6|7", "TGC|3|5|6|7"} + sort.Sort(JobSummaryOutputSort(summary)) + expected := []string{"TGA|3|5|6|7", "TGC|3|5|6|7", "TGD|3|5|6|7"} + if !reflect.DeepEqual(expected, summary) { + t.Fatalf("expected: %v, actual: %v", expected, summary) + } +} From 6550a53b39daaf866bc7930c667ac51c83895aa8 Mon Sep 17 00:00:00 2001 From: Diptanu Choudhury Date: Thu, 4 Aug 2016 11:54:14 -0700 Subject: [PATCH 2/3] Sorting the task group names and not the output of the format list --- command/status.go | 33 ++++++++++++++++++--------------- command/status_test.go | 10 +++++----- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/command/status.go b/command/status.go index 89143cb86..4794ad936 100644 --- a/command/status.go +++ b/command/status.go @@ -258,16 +258,21 @@ func (c *StatusCommand) outputJobInfo(client *api.Client, job *api.Job) error { if summary != nil { summaries := make([]string, len(summary.Summary)+1) summaries[0] = "Task Group|Queued|Starting|Running|Failed|Complete|Lost" - idx := 1 - for tg, tgs := range summary.Summary { - summaries[idx] = fmt.Sprintf("%s|%d|%d|%d|%d|%d|%d", - tg, tgs.Queued, tgs.Starting, + i := 0 + taskGroups := make([]string, len(summary.Summary)) + for taskGroup := range summary.Summary { + taskGroups[i] = taskGroup + i += 1 + } + sort.Sort(TaskGroupSort(taskGroups)) + for idx, taskGroup := range taskGroups { + tgs := summary.Summary[taskGroup] + summaries[idx+1] = fmt.Sprintf("%s|%d|%d|%d|%d|%d|%d", + taskGroup, tgs.Queued, tgs.Starting, tgs.Running, tgs.Failed, tgs.Complete, tgs.Lost, ) - idx += 1 } - sort.Sort(JobSummaryOutputSort(summaries[1:])) c.Ui.Output(formatList(summaries)) } @@ -377,20 +382,18 @@ func convertApiJob(in *api.Job) (*structs.Job, error) { return structJob, nil } -// JobSummaryOutputSort implements the sort interface and sorts an array of job -// summary output -type JobSummaryOutputSort []string +// TaskGroupSort implements the sort interface and sorts an array of task group +// names +type TaskGroupSort []string -func (j JobSummaryOutputSort) Len() int { +func (j TaskGroupSort) Len() int { return len(j) } -func (j JobSummaryOutputSort) Less(a, b int) bool { - taskGroupA := j[a][:strings.Index(j[a], "|")] - taskGroupB := j[b][:strings.Index(j[b], "|")] - return taskGroupA < taskGroupB +func (j TaskGroupSort) Less(a, b int) bool { + return j[a] < j[b] } -func (j JobSummaryOutputSort) Swap(a, b int) { +func (j TaskGroupSort) Swap(a, b int) { j[a], j[b] = j[b], j[a] } diff --git a/command/status_test.go b/command/status_test.go index dc422014d..4ac77cb47 100644 --- a/command/status_test.go +++ b/command/status_test.go @@ -174,10 +174,10 @@ func TestStatusCommand_Fails(t *testing.T) { } func TestStatusCommand_SortTG(t *testing.T) { - summary := []string{"TGD|3|5|6|7", "TGA|3|5|6|7", "TGC|3|5|6|7"} - sort.Sort(JobSummaryOutputSort(summary)) - expected := []string{"TGA|3|5|6|7", "TGC|3|5|6|7", "TGD|3|5|6|7"} - if !reflect.DeepEqual(expected, summary) { - t.Fatalf("expected: %v, actual: %v", expected, summary) + taskGroups := []string{"D", "A", "C"} + sort.Sort(TaskGroupSort(taskGroups)) + expected := []string{"A", "C", "D"} + if !reflect.DeepEqual(expected, taskGroups) { + t.Fatalf("expected: %v, actual: %v", expected, taskGroups) } } From 4cc24c035498005b59e3c2a2357e28fa79914d76 Mon Sep 17 00:00:00 2001 From: Diptanu Choudhury Date: Thu, 4 Aug 2016 13:13:41 -0700 Subject: [PATCH 3/3] Removing the custom sorting logic --- command/status.go | 24 +++--------------------- command/status_test.go | 11 ----------- 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/command/status.go b/command/status.go index 4794ad936..dcca9c1bd 100644 --- a/command/status.go +++ b/command/status.go @@ -258,13 +258,11 @@ func (c *StatusCommand) outputJobInfo(client *api.Client, job *api.Job) error { if summary != nil { summaries := make([]string, len(summary.Summary)+1) summaries[0] = "Task Group|Queued|Starting|Running|Failed|Complete|Lost" - i := 0 - taskGroups := make([]string, len(summary.Summary)) + taskGroups := make([]string, 0, len(summary.Summary)) for taskGroup := range summary.Summary { - taskGroups[i] = taskGroup - i += 1 + taskGroups = append(taskGroups, taskGroup) } - sort.Sort(TaskGroupSort(taskGroups)) + sort.Strings(taskGroups) for idx, taskGroup := range taskGroups { tgs := summary.Summary[taskGroup] summaries[idx+1] = fmt.Sprintf("%s|%d|%d|%d|%d|%d|%d", @@ -381,19 +379,3 @@ func convertApiJob(in *api.Job) (*structs.Job, error) { } return structJob, nil } - -// TaskGroupSort implements the sort interface and sorts an array of task group -// names -type TaskGroupSort []string - -func (j TaskGroupSort) Len() int { - return len(j) -} - -func (j TaskGroupSort) Less(a, b int) bool { - return j[a] < j[b] -} - -func (j TaskGroupSort) Swap(a, b int) { - j[a], j[b] = j[b], j[a] -} diff --git a/command/status_test.go b/command/status_test.go index 4ac77cb47..270d91357 100644 --- a/command/status_test.go +++ b/command/status_test.go @@ -1,8 +1,6 @@ package command import ( - "reflect" - "sort" "strings" "testing" @@ -172,12 +170,3 @@ func TestStatusCommand_Fails(t *testing.T) { t.Fatalf("expected failed query error, got: %s", out) } } - -func TestStatusCommand_SortTG(t *testing.T) { - taskGroups := []string{"D", "A", "C"} - sort.Sort(TaskGroupSort(taskGroups)) - expected := []string{"A", "C", "D"} - if !reflect.DeepEqual(expected, taskGroups) { - t.Fatalf("expected: %v, actual: %v", expected, taskGroups) - } -}