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