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 }