github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/command/v3/tasks_command.go (about) 1 package v3 2 3 import ( 4 "strconv" 5 "time" 6 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v3action" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/v3/shared" 12 ) 13 14 //These constants are only for filling in translations. 15 const ( 16 runningState = "RUNNING" 17 cancelingState = "CANCELING" 18 pendingState = "PENDING" 19 succeededState = "SUCCEEDED" 20 ) 21 22 //go:generate counterfeiter . TasksActor 23 24 type TasksActor interface { 25 GetApplicationByNameAndSpace(appName string, spaceGUID string) (v3action.Application, v3action.Warnings, error) 26 GetApplicationTasks(appGUID string, sortOrder v3action.SortOrder) ([]v3action.Task, v3action.Warnings, error) 27 CloudControllerAPIVersion() string 28 } 29 30 type TasksCommand struct { 31 RequiredArgs flag.AppName `positional-args:"yes"` 32 usage interface{} `usage:"CF_NAME tasks APP_NAME"` 33 relatedCommands interface{} `related_commands:"apps, logs, run-task, terminate-task"` 34 35 UI command.UI 36 Config command.Config 37 SharedActor command.SharedActor 38 Actor TasksActor 39 } 40 41 func (cmd *TasksCommand) Setup(config command.Config, ui command.UI) error { 42 cmd.UI = ui 43 cmd.Config = config 44 cmd.SharedActor = sharedaction.NewActor() 45 46 client, _, err := shared.NewClients(config, ui, true) 47 if err != nil { 48 return err 49 } 50 cmd.Actor = v3action.NewActor(client, config) 51 52 return nil 53 } 54 55 func (cmd TasksCommand) Execute(args []string) error { 56 err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), command.MinVersionRunTaskV3) 57 if err != nil { 58 return err 59 } 60 61 err = cmd.SharedActor.CheckTarget(cmd.Config, true, true) 62 if err != nil { 63 return shared.HandleError(err) 64 } 65 66 space := cmd.Config.TargetedSpace() 67 68 user, err := cmd.Config.CurrentUser() 69 if err != nil { 70 return err 71 } 72 73 application, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, space.GUID) 74 cmd.UI.DisplayWarnings(warnings) 75 if err != nil { 76 return shared.HandleError(err) 77 } 78 79 cmd.UI.DisplayTextWithFlavor("Getting tasks for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ 80 "AppName": cmd.RequiredArgs.AppName, 81 "OrgName": cmd.Config.TargetedOrganization().Name, 82 "SpaceName": space.Name, 83 "CurrentUser": user.Name, 84 }) 85 86 tasks, warnings, err := cmd.Actor.GetApplicationTasks(application.GUID, v3action.Descending) 87 cmd.UI.DisplayWarnings(warnings) 88 if err != nil { 89 return shared.HandleError(err) 90 } 91 92 cmd.UI.DisplayOK() 93 cmd.UI.DisplayNewline() 94 95 table := [][]string{ 96 { 97 cmd.UI.TranslateText("id"), 98 cmd.UI.TranslateText("name"), 99 cmd.UI.TranslateText("state"), 100 cmd.UI.TranslateText("start time"), 101 cmd.UI.TranslateText("command"), 102 }, 103 } 104 for _, task := range tasks { 105 t, err := time.Parse(time.RFC3339, task.CreatedAt) 106 if err != nil { 107 return err 108 } 109 110 if task.Command == "" { 111 task.Command = "[hidden]" 112 } 113 114 table = append(table, []string{ 115 strconv.Itoa(task.SequenceID), 116 task.Name, 117 cmd.UI.TranslateText(task.State), 118 t.Format(time.RFC1123), 119 task.Command, 120 }) 121 } 122 123 cmd.UI.DisplayTableWithHeader("", table, 3) 124 125 return nil 126 }