github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/actor/v7action/task.go (about)

     1  package v7action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/resources"
     5  	"strconv"
     6  
     7  	"sort"
     8  
     9  	"code.cloudfoundry.org/cli/actor/actionerror"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
    11  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    12  )
    13  
    14  // Task represents a V3 actor Task.
    15  type Task resources.Task
    16  
    17  // RunTask runs the provided command in the application environment associated
    18  // with the provided application GUID.
    19  func (actor Actor) RunTask(appGUID string, task Task) (Task, Warnings, error) {
    20  	createdTask, warnings, err := actor.CloudControllerClient.CreateApplicationTask(appGUID, resources.Task(task))
    21  	if err != nil {
    22  		if e, ok := err.(ccerror.TaskWorkersUnavailableError); ok {
    23  			return Task{}, Warnings(warnings), actionerror.TaskWorkersUnavailableError{Message: e.Error()}
    24  		}
    25  	}
    26  
    27  	return Task(createdTask), Warnings(warnings), err
    28  }
    29  
    30  // GetApplicationTasks returns a list of tasks associated with the provided
    31  // appplication GUID.
    32  func (actor Actor) GetApplicationTasks(appGUID string, sortOrder SortOrder) ([]Task, Warnings, error) {
    33  	tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks(appGUID)
    34  	actorWarnings := Warnings(warnings)
    35  	if err != nil {
    36  		return nil, actorWarnings, err
    37  	}
    38  
    39  	allTasks := []Task{}
    40  	for _, task := range tasks {
    41  		allTasks = append(allTasks, Task(task))
    42  	}
    43  
    44  	if sortOrder == Descending {
    45  		sort.Slice(allTasks, func(i int, j int) bool { return allTasks[i].SequenceID > allTasks[j].SequenceID })
    46  	} else {
    47  		sort.Slice(allTasks, func(i int, j int) bool { return allTasks[i].SequenceID < allTasks[j].SequenceID })
    48  	}
    49  
    50  	return allTasks, actorWarnings, nil
    51  }
    52  
    53  func (actor Actor) GetTaskBySequenceIDAndApplication(sequenceID int, appGUID string) (Task, Warnings, error) {
    54  	tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks(
    55  		appGUID,
    56  		ccv3.Query{Key: ccv3.SequenceIDFilter, Values: []string{strconv.Itoa(sequenceID)}},
    57  	)
    58  	if err != nil {
    59  		return Task{}, Warnings(warnings), err
    60  	}
    61  
    62  	if len(tasks) == 0 {
    63  		return Task{}, Warnings(warnings), actionerror.TaskNotFoundError{SequenceID: sequenceID}
    64  	}
    65  
    66  	return Task(tasks[0]), Warnings(warnings), nil
    67  }
    68  
    69  func (actor Actor) TerminateTask(taskGUID string) (Task, Warnings, error) {
    70  	task, warnings, err := actor.CloudControllerClient.UpdateTaskCancel(taskGUID)
    71  	return Task(task), Warnings(warnings), err
    72  }