github.com/cloudfoundry-attic/ltc@v0.0.0-20151123212628-098adc7919fc/task_runner/command_factory/task_runner_command_factory.go (about)

     1  package command_factory
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  
     7  	"github.com/cloudfoundry-incubator/ltc/exit_handler"
     8  	"github.com/cloudfoundry-incubator/ltc/exit_handler/exit_codes"
     9  	"github.com/cloudfoundry-incubator/ltc/logs/reserved_app_ids"
    10  	"github.com/cloudfoundry-incubator/ltc/task_runner"
    11  	"github.com/cloudfoundry-incubator/ltc/terminal"
    12  	"github.com/cloudfoundry-incubator/ltc/terminal/colors"
    13  	"github.com/codegangsta/cli"
    14  )
    15  
    16  const AttemptedToCreateLatticeDebugErrorMessage = reserved_app_ids.LatticeDebugLogStreamAppId + " is a reserved app name. It is used internally to stream debug logs for lattice components."
    17  
    18  type TaskRunnerCommandFactory struct {
    19  	taskRunner  task_runner.TaskRunner
    20  	ui          terminal.UI
    21  	exitHandler exit_handler.ExitHandler
    22  }
    23  
    24  func NewTaskRunnerCommandFactory(taskRunner task_runner.TaskRunner, ui terminal.UI, exitHandler exit_handler.ExitHandler) *TaskRunnerCommandFactory {
    25  	return &TaskRunnerCommandFactory{
    26  		taskRunner:  taskRunner,
    27  		ui:          ui,
    28  		exitHandler: exitHandler,
    29  	}
    30  }
    31  
    32  func (factory *TaskRunnerCommandFactory) MakeSubmitTaskCommand() cli.Command {
    33  	var submitTaskCommand = cli.Command{
    34  		Name:        "submit-task",
    35  		Aliases:     []string{"su"},
    36  		Usage:       "Submits a task from JSON on lattice",
    37  		Description: "ltc submit-task <json-path>",
    38  		Action:      factory.submitTask,
    39  	}
    40  
    41  	return submitTaskCommand
    42  }
    43  
    44  func (factory *TaskRunnerCommandFactory) MakeDeleteTaskCommand() cli.Command {
    45  	var taskDeleteCommand = cli.Command{
    46  		Name:        "delete-task",
    47  		Aliases:     []string{"dt"},
    48  		Usage:       "Deletes the given task",
    49  		Description: "ltc delete-task <task-guid>",
    50  		Action:      factory.deleteTask,
    51  		Flags:       []cli.Flag{},
    52  	}
    53  	return taskDeleteCommand
    54  }
    55  
    56  func (factory *TaskRunnerCommandFactory) MakeCancelTaskCommand() cli.Command {
    57  	var taskDeleteCommand = cli.Command{
    58  		Name:        "cancel-task",
    59  		Aliases:     []string{"ct"},
    60  		Usage:       "Cancels the given task",
    61  		Description: "ltc cancel-task <task-guid>",
    62  		Action:      factory.cancelTask,
    63  		Flags:       []cli.Flag{},
    64  	}
    65  	return taskDeleteCommand
    66  }
    67  
    68  func (factory *TaskRunnerCommandFactory) submitTask(context *cli.Context) {
    69  	filePath := context.Args().First()
    70  	if filePath == "" {
    71  		factory.ui.SayLine("Path to JSON is required")
    72  		factory.exitHandler.Exit(exit_codes.InvalidSyntax)
    73  		return
    74  	}
    75  
    76  	jsonBytes, err := ioutil.ReadFile(filePath)
    77  	if err != nil {
    78  		factory.ui.SayLine("Error reading file: " + err.Error())
    79  		factory.exitHandler.Exit(exit_codes.FileSystemError)
    80  		return
    81  	}
    82  
    83  	taskName, err := factory.taskRunner.SubmitTask(jsonBytes)
    84  	if err != nil {
    85  		factory.ui.SayLine(fmt.Sprintf("Error submitting %s: %s", taskName, err))
    86  		factory.exitHandler.Exit(exit_codes.CommandFailed)
    87  		return
    88  	}
    89  	factory.ui.SayLine(colors.Green("Successfully submitted " + taskName))
    90  }
    91  
    92  func (factory *TaskRunnerCommandFactory) deleteTask(context *cli.Context) {
    93  	taskGuid := context.Args().First()
    94  	if taskGuid == "" {
    95  		factory.ui.SayIncorrectUsage("Please input a valid <task-guid>")
    96  		factory.exitHandler.Exit(exit_codes.InvalidSyntax)
    97  		return
    98  	}
    99  
   100  	if err := factory.taskRunner.DeleteTask(taskGuid); err != nil {
   101  		factory.ui.SayLine(fmt.Sprintf(colors.Red("Error deleting %s: %s"), taskGuid, err.Error()))
   102  		factory.exitHandler.Exit(exit_codes.CommandFailed)
   103  		return
   104  	}
   105  	factory.ui.SayLine(colors.Green("OK"))
   106  }
   107  
   108  func (factory *TaskRunnerCommandFactory) cancelTask(context *cli.Context) {
   109  	taskGuid := context.Args().First()
   110  	if taskGuid == "" {
   111  		factory.ui.SayIncorrectUsage("Please input a valid <task-guid>")
   112  		factory.exitHandler.Exit(exit_codes.InvalidSyntax)
   113  		return
   114  	}
   115  
   116  	if err := factory.taskRunner.CancelTask(taskGuid); err != nil {
   117  		factory.ui.SayLine(fmt.Sprintf(colors.Red("Error cancelling %s: %s"), taskGuid, err.Error()))
   118  		factory.exitHandler.Exit(exit_codes.CommandFailed)
   119  		return
   120  	}
   121  	factory.ui.SayLine(colors.Green("OK"))
   122  }