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  }