github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/command/v6/tasks_command.go (about)

     1  package v6
     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/v6/shared"
    12  	"code.cloudfoundry.org/cli/util/ui"
    13  )
    14  
    15  //These constants are only for filling in translations.
    16  const (
    17  	runningState   = "RUNNING"
    18  	cancelingState = "CANCELING"
    19  	pendingState   = "PENDING"
    20  	succeededState = "SUCCEEDED"
    21  )
    22  
    23  //go:generate counterfeiter . TasksActor
    24  
    25  type TasksActor interface {
    26  	GetApplicationByNameAndSpace(appName string, spaceGUID string) (v3action.Application, v3action.Warnings, error)
    27  	GetApplicationTasks(appGUID string, sortOrder v3action.SortOrder) ([]v3action.Task, v3action.Warnings, error)
    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(config)
    45  
    46  	client, _, err := shared.NewV3BasedClients(config, ui, true, "")
    47  	if err != nil {
    48  		return err
    49  	}
    50  	cmd.Actor = v3action.NewActor(client, config, nil, nil)
    51  
    52  	return nil
    53  }
    54  
    55  func (cmd TasksCommand) Execute(args []string) error {
    56  	err := cmd.SharedActor.CheckTarget(true, true)
    57  	if err != nil {
    58  		return err
    59  	}
    60  
    61  	space := cmd.Config.TargetedSpace()
    62  
    63  	user, err := cmd.Config.CurrentUser()
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	application, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, space.GUID)
    69  	cmd.UI.DisplayWarnings(warnings)
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	cmd.UI.DisplayTextWithFlavor("Getting tasks for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{
    75  		"AppName":     cmd.RequiredArgs.AppName,
    76  		"OrgName":     cmd.Config.TargetedOrganization().Name,
    77  		"SpaceName":   space.Name,
    78  		"CurrentUser": user.Name,
    79  	})
    80  
    81  	tasks, warnings, err := cmd.Actor.GetApplicationTasks(application.GUID, v3action.Descending)
    82  	cmd.UI.DisplayWarnings(warnings)
    83  	if err != nil {
    84  		return err
    85  	}
    86  
    87  	cmd.UI.DisplayOK()
    88  	cmd.UI.DisplayNewline()
    89  
    90  	table := [][]string{
    91  		{
    92  			cmd.UI.TranslateText("id"),
    93  			cmd.UI.TranslateText("name"),
    94  			cmd.UI.TranslateText("state"),
    95  			cmd.UI.TranslateText("start time"),
    96  			cmd.UI.TranslateText("command"),
    97  		},
    98  	}
    99  	for _, task := range tasks {
   100  		t, err := time.Parse(time.RFC3339, task.CreatedAt)
   101  		if err != nil {
   102  			return err
   103  		}
   104  
   105  		if task.Command == "" {
   106  			task.Command = "[hidden]"
   107  		}
   108  
   109  		table = append(table, []string{
   110  			strconv.Itoa(task.SequenceID),
   111  			task.Name,
   112  			cmd.UI.TranslateText(string(task.State)),
   113  			t.Format(time.RFC1123),
   114  			task.Command,
   115  		})
   116  	}
   117  
   118  	cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding)
   119  
   120  	return nil
   121  }