func populateTimeCells(startTime time.Time, endTime time.Time) (ui.TableCell, ui.TableCell, ui.TableCell) { var startTimeCell ui.TableCell var endTimeCell ui.TableCell var durationCell ui.TableCell startTime = startTime.Local() endTime = endTime.Local() zeroTime := time.Unix(0, 0) if startTime == zeroTime { startTimeCell.Contents = "n/a" } else { startTimeCell.Contents = startTime.Format(timeDateLayout) } if endTime == zeroTime { endTimeCell.Contents = "n/a" durationCell.Contents = fmt.Sprintf("%v+", roundSecondsOffDuration(time.Since(startTime))) } else { endTimeCell.Contents = endTime.Format(timeDateLayout) durationCell.Contents = endTime.Sub(startTime).String() } if startTime == zeroTime && endTime == zeroTime { durationCell.Contents = "n/a" } return startTimeCell, endTimeCell, durationCell }
func stringOrNone(str string) ui.TableCell { var column ui.TableCell if len(str) == 0 { column.Contents = "none" column.Color = color.New(color.Faint) } else { column.Contents = str } return column }
func buildIDOrNone(id int) ui.TableCell { var column ui.TableCell if id == 0 { column.Contents = "none" column.Color = color.New(color.Faint) } else { column.Contents = strconv.Itoa(id) } return column }
func stringOrDefault(containerType string, def ...string) ui.TableCell { var column ui.TableCell column.Contents = containerType if column.Contents == "" || column.Contents == "[]" { if len(def) == 0 { column.Contents = "none" column.Color = color.New(color.Faint) } else { column.Contents = def[0] } } return column }
func (command *PipelinesCommand) Execute([]string) error { client, err := rc.TargetClient(Fly.Target) if err != nil { return err } err = rc.ValidateClient(client, Fly.Target) if err != nil { return err } pipelines, err := client.ListPipelines() if err != nil { return err } table := ui.Table{ Headers: ui.TableRow{ {Contents: "name", Color: color.New(color.Bold)}, {Contents: "paused", Color: color.New(color.Bold)}, }, } for _, p := range pipelines { var pausedColumn ui.TableCell if p.Paused { pausedColumn.Contents = "yes" pausedColumn.Color = color.New(color.FgCyan) } else { pausedColumn.Contents = "no" } table.Data = append(table.Data, []ui.TableCell{ {Contents: p.Name}, pausedColumn, }) } return table.Render(os.Stdout) }
func (command *PipelinesCommand) Execute([]string) error { connection, err := rc.TargetConnection(Fly.Target) if err != nil { log.Fatalln(err) return nil } client := concourse.NewClient(connection) pipelines, err := client.ListPipelines() if err != nil { log.Fatalln(err) } table := ui.Table{ Headers: ui.TableRow{ {Contents: "name", Color: color.New(color.Bold)}, {Contents: "paused", Color: color.New(color.Bold)}, }, } for _, p := range pipelines { var pausedColumn ui.TableCell if p.Paused { pausedColumn.Contents = "yes" pausedColumn.Color = color.New(color.FgCyan) } else { pausedColumn.Contents = "no" } table.Data = append(table.Data, []ui.TableCell{ {Contents: p.Name}, pausedColumn, }) } return table.Render(os.Stdout) }
func (command *BuildsCommand) Execute([]string) error { client, err := rc.TargetClient(Fly.Target) if err != nil { return err } err = rc.ValidateClient(client, Fly.Target) if err != nil { return err } page := concourse.Page{Limit: command.Count} var builds []atc.Build if command.Job.PipelineName != "" && command.Job.JobName != "" { var found bool builds, _, found, err = client.JobBuilds( command.Job.PipelineName, command.Job.JobName, page, ) if err != nil { return err } if !found { displayhelpers.Failf("pipeline/job not found") } } else { builds, _, err = client.Builds(page) if err != nil { return err } } table := ui.Table{ Headers: ui.TableRow{ {Contents: "id", Color: color.New(color.Bold)}, {Contents: "pipeline/job", Color: color.New(color.Bold)}, {Contents: "build", Color: color.New(color.Bold)}, {Contents: "status", Color: color.New(color.Bold)}, {Contents: "start", Color: color.New(color.Bold)}, {Contents: "end", Color: color.New(color.Bold)}, {Contents: "duration", Color: color.New(color.Bold)}, }, } var rangeUntil int if command.Count < len(builds) { rangeUntil = command.Count } else { rangeUntil = len(builds) } for _, b := range builds[:rangeUntil] { startTimeCell, endTimeCell, durationCell := populateTimeCells(time.Unix(b.StartTime, 0), time.Unix(b.EndTime, 0)) var pipelineJobCell, buildCell ui.TableCell if b.PipelineName == "" { pipelineJobCell.Contents = "one-off" buildCell.Contents = "n/a" } else { pipelineJobCell.Contents = fmt.Sprintf("%s/%s", b.PipelineName, b.JobName) buildCell.Contents = b.Name } var statusCell ui.TableCell statusCell.Contents = b.Status switch b.Status { case "pending": statusCell.Color = ui.PendingColor case "started": statusCell.Color = ui.StartedColor case "succeeded": statusCell.Color = ui.SucceededColor case "failed": statusCell.Color = ui.FailedColor case "errored": statusCell.Color = ui.ErroredColor case "aborted": statusCell.Color = ui.AbortedColor case "paused": statusCell.Color = ui.PausedColor } table.Data = append(table.Data, []ui.TableCell{ {Contents: strconv.Itoa(b.ID)}, pipelineJobCell, buildCell, statusCell, startTimeCell, endTimeCell, durationCell, }) } return table.Render(os.Stdout) }