github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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  
    89  	table := [][]string{
    90  		{
    91  			cmd.UI.TranslateText("id"),
    92  			cmd.UI.TranslateText("name"),
    93  			cmd.UI.TranslateText("state"),
    94  			cmd.UI.TranslateText("start time"),
    95  			cmd.UI.TranslateText("command"),
    96  		},
    97  	}
    98  	for _, task := range tasks {
    99  		t, err := time.Parse(time.RFC3339, task.CreatedAt)
   100  		if err != nil {
   101  			return err
   102  		}
   103  
   104  		if task.Command == "" {
   105  			task.Command = "[hidden]"
   106  		}
   107  
   108  		table = append(table, []string{
   109  			strconv.FormatInt(task.SequenceID, 10),
   110  			task.Name,
   111  			cmd.UI.TranslateText(string(task.State)),
   112  			t.Format(time.RFC1123),
   113  			task.Command,
   114  		})
   115  	}
   116  
   117  	cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding)
   118  
   119  	return nil
   120  }