github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/actor/v3action/task.go (about)

     1  package v3action
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  	"strconv"
     7  
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     9  )
    10  
    11  // Task represents a V3 actor Task.
    12  type Task ccv3.Task
    13  
    14  // TaskWorkersUnavailableError is returned when there are no workers to run a
    15  // given task.
    16  type TaskWorkersUnavailableError struct {
    17  	Message string
    18  }
    19  
    20  func (e TaskWorkersUnavailableError) Error() string {
    21  	return e.Message
    22  }
    23  
    24  // TaskNotFoundError is returned when no tasks matching the filters are found.
    25  type TaskNotFoundError struct {
    26  	SequenceID int
    27  }
    28  
    29  func (e TaskNotFoundError) Error() string {
    30  	return fmt.Sprintf("Task sequence ID %d not found.", e.SequenceID)
    31  }
    32  
    33  // RunTask runs the provided command in the application environment associated
    34  // with the provided application GUID.
    35  func (actor Actor) RunTask(appGUID string, command string, name string, memory uint64, disk uint64) (Task, Warnings, error) {
    36  	task, warnings, err := actor.CloudControllerClient.NewTask(appGUID, command, name, memory, disk)
    37  	if err != nil {
    38  		if e, ok := err.(ccv3.TaskWorkersUnavailableError); ok {
    39  			return Task{}, Warnings(warnings), TaskWorkersUnavailableError{Message: e.Error()}
    40  		}
    41  	}
    42  
    43  	return Task(task), Warnings(warnings), err
    44  }
    45  
    46  // GetApplicationTasks returns a list of tasks associated with the provided
    47  // appplication GUID.
    48  func (actor Actor) GetApplicationTasks(appGUID string, sortOrder SortOrder) ([]Task, Warnings, error) {
    49  	query := url.Values{}
    50  	if sortOrder == Descending {
    51  		query.Add("order_by", "-created_at")
    52  	}
    53  
    54  	tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks(appGUID, query)
    55  	actorWarnings := Warnings(warnings)
    56  	if err != nil {
    57  		return nil, actorWarnings, err
    58  	}
    59  
    60  	allTasks := []Task{}
    61  	for _, task := range tasks {
    62  		allTasks = append(allTasks, Task(task))
    63  	}
    64  
    65  	return allTasks, actorWarnings, nil
    66  }
    67  
    68  func (actor Actor) GetTaskBySequenceIDAndApplication(sequenceID int, appGUID string) (Task, Warnings, error) {
    69  	query := url.Values{
    70  		"sequence_ids": []string{strconv.Itoa(sequenceID)},
    71  	}
    72  
    73  	tasks, warnings, err := actor.CloudControllerClient.GetApplicationTasks(appGUID, query)
    74  	if err != nil {
    75  		return Task{}, Warnings(warnings), err
    76  	}
    77  
    78  	if len(tasks) == 0 {
    79  		return Task{}, Warnings(warnings), TaskNotFoundError{SequenceID: sequenceID}
    80  	}
    81  
    82  	return Task(tasks[0]), Warnings(warnings), nil
    83  }
    84  
    85  func (actor Actor) TerminateTask(taskGUID string) (Task, Warnings, error) {
    86  	task, warnings, err := actor.CloudControllerClient.UpdateTask(taskGUID)
    87  	return Task(task), Warnings(warnings), err
    88  }