cmd: add details to run list

This commit is contained in:
Carlo Mandelli 2019-11-29 13:40:27 +01:00
parent 05984f0f62
commit a15a769610
1 changed files with 53 additions and 6 deletions

View File

@ -18,6 +18,7 @@ import (
"context"
"fmt"
"path"
"sort"
gwapitypes "agola.io/agola/services/gateway/api/types"
gwclient "agola.io/agola/services/gateway/client"
@ -43,6 +44,18 @@ type runListOptions struct {
start string
}
type runDetails struct {
runResponse *gwapitypes.RunResponse
tasks []*taskDetails
}
type taskDetails struct {
name string
level int
runTaskResponse *gwapitypes.RunTaskResponse
retrieveError error
}
var runListOpts runListOptions
func init() {
@ -60,11 +73,22 @@ func init() {
cmdRun.AddCommand(cmdRunList)
}
func printRuns(runs []*gwapitypes.RunResponse) {
func printRuns(runs []*runDetails) {
for _, run := range runs {
fmt.Printf("%s: Phase: %s, Result: %s\n", run.ID, run.Phase, run.Result)
for _, task := range run.Tasks {
fmt.Printf("\tTaskName: %s, Status: %s\n", task.Name, task.Status)
fmt.Printf("%s: Phase: %s, Result: %s\n", run.runResponse.ID, run.runResponse.Phase, run.runResponse.Result)
for _, task := range run.tasks {
fmt.Printf("\tTaskName: %s, Status: %s\n", task.runTaskResponse.Name, task.runTaskResponse.Status)
if task.retrieveError != nil {
fmt.Printf("\t\tfailed to retrieve task information: %v\n", task.retrieveError)
} else {
for n, step := range task.runTaskResponse.Steps {
if step.Phase.IsFinished() && step.Type == "run" {
fmt.Printf("\t\tStep: %d, Name: %s, Type: %s, Phase: %s, ExitStatus: %d\n", n, step.Name, step.Type, step.Phase, *step.ExitStatus)
} else {
fmt.Printf("\t\tStep: %d, Name: %s, Type: %s, Phase: %s\n", n, step.Name, step.Type, step.Phase)
}
}
}
}
}
}
@ -82,13 +106,36 @@ func runList(cmd *cobra.Command, args []string) error {
return err
}
runs := make([]*gwapitypes.RunResponse, len(runsResp))
runs := make([]*runDetails, len(runsResp))
for i, runResponse := range runsResp {
run, _, err := gwclient.GetRun(context.TODO(), runResponse.ID)
if err != nil {
return err
}
runs[i] = run
tasks := []*taskDetails{}
for _, task := range run.Tasks {
runTaskResponse, _, err := gwclient.GetRunTask(context.TODO(), run.ID, task.ID)
t := &taskDetails{
name: task.Name,
level: task.Level,
runTaskResponse: runTaskResponse,
retrieveError: err,
}
tasks = append(tasks, t)
}
sort.Slice(tasks, func(i, j int) bool {
if tasks[i].level != tasks[j].level {
return tasks[i].level < tasks[j].level
}
return tasks[i].name < tasks[j].name
})
runs[i] = &runDetails{
runResponse: run,
tasks: tasks,
}
}
printRuns(runs)