func Apps(cliConnection plugin.CliConnection, args []string) { mySpace, err := cliConnection.GetCurrentSpace() util.FreakOut(err) rawOutput, err := cliConnection.CliCommandWithoutTerminalOutput("curl", fmt.Sprintf("v3/apps?space_guids=%s", mySpace.Guid), "-X", "GET") output := strings.Join(rawOutput, "") util.FreakOut(err) apps := V3AppsModel{} err = json.Unmarshal([]byte(output), &apps) util.FreakOut(err) if len(apps.Apps) > 0 { appsTable := util.NewTable([]string{("name"), ("total_desired_instances")}) for _, v := range apps.Apps { appsTable.Add( v.Name, strconv.Itoa(v.Instances), ) } appsTable.Print() } else { fmt.Println("No v3 apps found.") } }
func CancelTask(cliConnection plugin.CliConnection, args []string) { appName := args[1] taskName := args[2] rawOutput, err := cliConnection.CliCommandWithoutTerminalOutput("curl", fmt.Sprintf("/v3/apps?names=%s", appName)) util.FreakOut(err) output := strings.Join(rawOutput, "") apps := models.V3AppsModel{} json.Unmarshal([]byte(output), &apps) if len(apps.Apps) == 0 { fmt.Printf("App %s not found\n", appName) return } appGuid := apps.Apps[0].Guid rawTasksJson, err := cliConnection.CliCommandWithoutTerminalOutput("curl", fmt.Sprintf("/v3/apps/%s/tasks", appGuid)) util.FreakOut(err) tasksJson := strings.Join(rawTasksJson, "") tasks := models.V3TasksModel{} err = json.Unmarshal([]byte(tasksJson), &tasks) util.FreakOut(err) var runningTasks []runningTask for _, task := range tasks.Tasks { if taskName == task.Name && task.State == "RUNNING" { runningTasks = append(runningTasks, runningTask{task.Guid, task.Command, task.State, task.UpdatedAt}) } } if len(runningTasks) == 0 { fmt.Println("No running task found. Task name:", taskName) return } else if len(runningTasks) == 1 { rawOutput, err = cliConnection.CliCommandWithoutTerminalOutput("curl", fmt.Sprintf("/v3/tasks/%s/cancel", runningTasks[0].guid), "-X", "PUT", "-d", "{}") util.FreakOut(err) output := strings.Join(rawOutput, "") fmt.Println(output) return } else { fmt.Printf("Please select which task to cancel: \n\n") tasksTable := util.NewTable([]string{"#", "Task Name", "Command", "State", "Time"}) for i, task := range runningTasks { tasksTable.Add( strconv.Itoa(i+1), taskName, task.command, task.state, fmt.Sprintf("%s", task.time.Format("Jan 2, 15:04:05 MST")), ) } tasksTable.Print() var i int64 = -1 var str string for i <= 0 || i > int64(len(runningTasks)) { fmt.Printf("\nSelect from above > ") fmt.Scanf("%s", &str) i, _ = strconv.ParseInt(str, 10, 32) } rawOutput, err = cliConnection.CliCommandWithoutTerminalOutput("curl", fmt.Sprintf("/v3/tasks/%s/cancel", runningTasks[i-1].guid), "-X", "PUT", "-d", "{}") util.FreakOut(err) output := strings.Join(rawOutput, "") fmt.Println(output) } }