2018-10-23 17:51:13 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
2019-10-18 00:23:45 +00:00
|
|
|
"time"
|
2018-10-23 17:51:13 +00:00
|
|
|
|
|
|
|
"github.com/influxdata/flux/repl"
|
2019-01-08 00:37:16 +00:00
|
|
|
platform "github.com/influxdata/influxdb"
|
|
|
|
"github.com/influxdata/influxdb/cmd/influx/internal"
|
|
|
|
"github.com/influxdata/influxdb/http"
|
2018-10-23 17:51:13 +00:00
|
|
|
"github.com/spf13/cobra"
|
|
|
|
)
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func cmdTask() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
|
|
|
Use: "task",
|
|
|
|
Short: "Task management commands",
|
|
|
|
RunE: wrapCheckSetup(func(cmd *cobra.Command, args []string) error {
|
|
|
|
if flags.local {
|
|
|
|
return fmt.Errorf("local flag not supported for task command")
|
|
|
|
}
|
|
|
|
|
|
|
|
seeHelp(cmd, args)
|
|
|
|
return nil
|
|
|
|
}),
|
2018-10-25 19:28:33 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
cmd.AddCommand(
|
|
|
|
taskLogCmd(),
|
|
|
|
taskRunCmd(),
|
|
|
|
taskCreateCmd(),
|
|
|
|
taskDeleteCmd(),
|
|
|
|
taskFindCmd(),
|
|
|
|
taskUpdateCmd(),
|
|
|
|
)
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return cmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 22:14:07 +00:00
|
|
|
var taskCreateFlags struct {
|
2020-01-10 00:34:30 +00:00
|
|
|
org organization
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskCreateCmd() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
2018-10-25 19:57:17 +00:00
|
|
|
Use: "create [query literal or @/path/to/query.flux]",
|
2018-10-23 17:51:13 +00:00
|
|
|
Short: "Create task",
|
2018-10-25 19:57:17 +00:00
|
|
|
Args: cobra.ExactArgs(1),
|
2019-01-22 18:19:26 +00:00
|
|
|
RunE: wrapCheckSetup(taskCreateF),
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
taskCreateFlags.org.register(cmd, false)
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return cmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 18:19:26 +00:00
|
|
|
func taskCreateF(cmd *cobra.Command, args []string) error {
|
2020-01-10 00:34:30 +00:00
|
|
|
if err := taskCreateFlags.org.validOrgFlags(); err != nil {
|
2019-12-17 19:55:35 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
s := &http.TaskService{
|
2019-11-14 23:28:43 +00:00
|
|
|
Addr: flags.host,
|
|
|
|
Token: flags.token,
|
|
|
|
InsecureSkipVerify: flags.skipVerify,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
flux, err := repl.LoadQuery(args[0])
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return fmt.Errorf("error parsing flux script: %s", err)
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-02-09 01:34:44 +00:00
|
|
|
tc := platform.TaskCreate{
|
|
|
|
Flux: flux,
|
2020-01-10 00:34:30 +00:00
|
|
|
Organization: taskCreateFlags.org.name,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
2020-01-10 00:34:30 +00:00
|
|
|
if taskCreateFlags.org.id != "" || taskCreateFlags.org.name != "" {
|
2019-12-17 19:55:35 +00:00
|
|
|
svc, err := newOrganizationService()
|
|
|
|
if err != nil {
|
|
|
|
return nil
|
|
|
|
}
|
2020-01-10 00:34:30 +00:00
|
|
|
oid, err := taskCreateFlags.org.getID(svc)
|
2018-10-23 17:51:13 +00:00
|
|
|
if err != nil {
|
2019-02-09 01:34:44 +00:00
|
|
|
return fmt.Errorf("error parsing organization ID: %s", err)
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
2019-12-17 19:55:35 +00:00
|
|
|
tc.OrganizationID = oid
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-02-14 23:58:17 +00:00
|
|
|
t, err := s.CreateTask(context.Background(), tc)
|
2019-02-09 01:34:44 +00:00
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
w := internal.NewTabWriter(os.Stdout)
|
|
|
|
w.WriteHeaders(
|
|
|
|
"ID",
|
|
|
|
"Name",
|
2019-01-18 16:10:14 +00:00
|
|
|
"OrganizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Organization",
|
2019-02-21 15:50:36 +00:00
|
|
|
"AuthorizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Status",
|
|
|
|
"Every",
|
|
|
|
"Cron",
|
|
|
|
)
|
|
|
|
w.Write(map[string]interface{}{
|
2019-11-06 22:10:52 +00:00
|
|
|
"ID": t.ID.String(),
|
|
|
|
"Name": t.Name,
|
|
|
|
"OrganizationID": t.OrganizationID.String(),
|
|
|
|
"Organization": t.Organization,
|
|
|
|
"Status": t.Status,
|
|
|
|
"Every": t.Every,
|
|
|
|
"Cron": t.Cron,
|
2018-10-23 17:51:13 +00:00
|
|
|
})
|
|
|
|
w.Flush()
|
2019-01-22 18:19:26 +00:00
|
|
|
|
|
|
|
return nil
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 22:14:07 +00:00
|
|
|
var taskFindFlags struct {
|
|
|
|
user string
|
|
|
|
id string
|
|
|
|
limit int
|
|
|
|
headers bool
|
2020-01-10 00:34:30 +00:00
|
|
|
org organization
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskFindCmd() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
2018-10-23 17:51:13 +00:00
|
|
|
Use: "find",
|
|
|
|
Short: "Find tasks",
|
2019-01-22 18:19:26 +00:00
|
|
|
RunE: wrapCheckSetup(taskFindF),
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
taskFindFlags.org.register(cmd, false)
|
|
|
|
cmd.Flags().StringVarP(&taskFindFlags.id, "id", "i", "", "task ID")
|
|
|
|
cmd.Flags().StringVarP(&taskFindFlags.user, "user-id", "n", "", "task owner ID")
|
|
|
|
cmd.Flags().IntVarP(&taskFindFlags.limit, "limit", "", platform.TaskDefaultPageSize, "the number of tasks to find")
|
|
|
|
cmd.Flags().BoolVar(&taskFindFlags.headers, "headers", true, "To print the table headers; defaults true")
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return cmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 18:19:26 +00:00
|
|
|
func taskFindF(cmd *cobra.Command, args []string) error {
|
2020-01-10 00:34:30 +00:00
|
|
|
if err := taskFindFlags.org.validOrgFlags(); err != nil {
|
2019-12-17 19:55:35 +00:00
|
|
|
return err
|
2019-12-10 23:46:36 +00:00
|
|
|
}
|
2018-10-23 17:51:13 +00:00
|
|
|
s := &http.TaskService{
|
2019-11-14 23:28:43 +00:00
|
|
|
Addr: flags.host,
|
|
|
|
Token: flags.token,
|
|
|
|
InsecureSkipVerify: flags.skipVerify,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
filter := platform.TaskFilter{}
|
|
|
|
if taskFindFlags.user != "" {
|
|
|
|
id, err := platform.IDFromString(taskFindFlags.user)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
filter.User = id
|
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
if taskFindFlags.org.name != "" {
|
|
|
|
filter.Organization = taskFindFlags.org.name
|
2019-02-27 15:56:32 +00:00
|
|
|
}
|
2020-01-10 00:34:30 +00:00
|
|
|
if taskFindFlags.org.id != "" {
|
|
|
|
id, err := platform.IDFromString(taskFindFlags.org.id)
|
2018-10-23 17:51:13 +00:00
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
2019-02-27 15:56:32 +00:00
|
|
|
filter.OrganizationID = id
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:28:17 +00:00
|
|
|
if taskFindFlags.limit < 1 || taskFindFlags.limit > platform.TaskMaxPageSize {
|
2019-01-22 18:19:26 +00:00
|
|
|
return fmt.Errorf("limit must be between 1 and %d", platform.TaskMaxPageSize)
|
2018-11-29 16:28:17 +00:00
|
|
|
}
|
|
|
|
filter.Limit = taskFindFlags.limit
|
|
|
|
|
2019-11-06 22:10:52 +00:00
|
|
|
var tasks []http.Task
|
2018-10-23 17:51:13 +00:00
|
|
|
var err error
|
|
|
|
|
|
|
|
if taskFindFlags.id != "" {
|
|
|
|
id, err := platform.IDFromString(taskFindFlags.id)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
task, err := s.FindTaskByID(context.Background(), *id)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-11-06 22:10:52 +00:00
|
|
|
tasks = append(tasks, *task)
|
2018-10-23 17:51:13 +00:00
|
|
|
} else {
|
|
|
|
tasks, _, err = s.FindTasks(context.Background(), filter)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
w := internal.NewTabWriter(os.Stdout)
|
2019-12-27 22:14:07 +00:00
|
|
|
w.HideHeaders(!taskFindFlags.headers)
|
2018-10-23 17:51:13 +00:00
|
|
|
w.WriteHeaders(
|
|
|
|
"ID",
|
|
|
|
"Name",
|
2019-01-18 16:10:14 +00:00
|
|
|
"OrganizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Organization",
|
2019-02-21 15:50:36 +00:00
|
|
|
"AuthorizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Status",
|
|
|
|
"Every",
|
|
|
|
"Cron",
|
|
|
|
)
|
|
|
|
for _, t := range tasks {
|
|
|
|
w.Write(map[string]interface{}{
|
2019-11-06 22:10:52 +00:00
|
|
|
"ID": t.ID.String(),
|
|
|
|
"Name": t.Name,
|
|
|
|
"OrganizationID": t.OrganizationID.String(),
|
|
|
|
"Organization": t.Organization,
|
|
|
|
"Status": t.Status,
|
|
|
|
"Every": t.Every,
|
|
|
|
"Cron": t.Cron,
|
2018-10-23 17:51:13 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
w.Flush()
|
2019-01-22 18:19:26 +00:00
|
|
|
|
|
|
|
return nil
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 22:14:07 +00:00
|
|
|
var taskUpdateFlags struct {
|
2018-10-23 17:51:13 +00:00
|
|
|
id string
|
|
|
|
status string
|
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskUpdateCmd() *cobra.Command {
|
2018-10-23 17:51:13 +00:00
|
|
|
taskUpdateCmd := &cobra.Command{
|
|
|
|
Use: "update",
|
|
|
|
Short: "Update task",
|
2019-01-22 18:19:26 +00:00
|
|
|
RunE: wrapCheckSetup(taskUpdateF),
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
taskUpdateCmd.Flags().StringVarP(&taskUpdateFlags.id, "id", "i", "", "task ID (required)")
|
|
|
|
taskUpdateCmd.Flags().StringVarP(&taskUpdateFlags.status, "status", "", "", "update task status")
|
|
|
|
taskUpdateCmd.MarkFlagRequired("id")
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return taskUpdateCmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 18:19:26 +00:00
|
|
|
func taskUpdateF(cmd *cobra.Command, args []string) error {
|
2018-10-23 17:51:13 +00:00
|
|
|
s := &http.TaskService{
|
2019-11-14 23:28:43 +00:00
|
|
|
Addr: flags.host,
|
|
|
|
Token: flags.token,
|
|
|
|
InsecureSkipVerify: flags.skipVerify,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var id platform.ID
|
|
|
|
if err := id.DecodeFromString(taskUpdateFlags.id); err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
update := platform.TaskUpdate{}
|
|
|
|
if taskUpdateFlags.status != "" {
|
|
|
|
update.Status = &taskUpdateFlags.status
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(args) > 0 {
|
|
|
|
flux, err := repl.LoadQuery(args[0])
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return fmt.Errorf("error parsing flux script: %s", err)
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
update.Flux = &flux
|
|
|
|
}
|
|
|
|
|
|
|
|
t, err := s.UpdateTask(context.Background(), id, update)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
w := internal.NewTabWriter(os.Stdout)
|
|
|
|
w.WriteHeaders(
|
|
|
|
"ID",
|
|
|
|
"Name",
|
2019-01-18 16:10:14 +00:00
|
|
|
"OrganizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Organization",
|
2019-02-21 15:50:36 +00:00
|
|
|
"AuthorizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Status",
|
|
|
|
"Every",
|
|
|
|
"Cron",
|
|
|
|
)
|
|
|
|
w.Write(map[string]interface{}{
|
2019-11-06 22:10:52 +00:00
|
|
|
"ID": t.ID.String(),
|
|
|
|
"Name": t.Name,
|
|
|
|
"OrganizationID": t.OrganizationID.String(),
|
|
|
|
"Organization": t.Organization,
|
|
|
|
"Status": t.Status,
|
|
|
|
"Every": t.Every,
|
|
|
|
"Cron": t.Cron,
|
2018-10-23 17:51:13 +00:00
|
|
|
})
|
|
|
|
w.Flush()
|
2019-01-22 18:19:26 +00:00
|
|
|
|
|
|
|
return nil
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 22:14:07 +00:00
|
|
|
var taskDeleteFlags struct {
|
2018-10-23 17:51:13 +00:00
|
|
|
id string
|
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskDeleteCmd() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
2018-10-23 17:51:13 +00:00
|
|
|
Use: "delete",
|
|
|
|
Short: "Delete task",
|
2019-01-22 18:19:26 +00:00
|
|
|
RunE: wrapCheckSetup(taskDeleteF),
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
cmd.Flags().StringVarP(&taskDeleteFlags.id, "id", "i", "", "task id (required)")
|
|
|
|
cmd.MarkFlagRequired("id")
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return cmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 18:19:26 +00:00
|
|
|
func taskDeleteF(cmd *cobra.Command, args []string) error {
|
2018-10-23 17:51:13 +00:00
|
|
|
s := &http.TaskService{
|
2019-11-14 23:28:43 +00:00
|
|
|
Addr: flags.host,
|
|
|
|
Token: flags.token,
|
|
|
|
InsecureSkipVerify: flags.skipVerify,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var id platform.ID
|
|
|
|
err := id.DecodeFromString(taskDeleteFlags.id)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ctx := context.TODO()
|
|
|
|
t, err := s.FindTaskByID(ctx, id)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if err = s.DeleteTask(ctx, id); err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
w := internal.NewTabWriter(os.Stdout)
|
|
|
|
w.WriteHeaders(
|
|
|
|
"ID",
|
|
|
|
"Name",
|
2019-01-18 16:10:14 +00:00
|
|
|
"OrganizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Organization",
|
2019-02-21 15:50:36 +00:00
|
|
|
"AuthorizationID",
|
2018-10-23 17:51:13 +00:00
|
|
|
"Status",
|
|
|
|
"Every",
|
|
|
|
"Cron",
|
|
|
|
)
|
|
|
|
w.Write(map[string]interface{}{
|
2019-11-06 22:10:52 +00:00
|
|
|
"ID": t.ID.String(),
|
|
|
|
"Name": t.Name,
|
|
|
|
"OrganizationID": t.OrganizationID.String(),
|
|
|
|
"Organization": t.Organization,
|
|
|
|
"Status": t.Status,
|
|
|
|
"Every": t.Every,
|
|
|
|
"Cron": t.Cron,
|
2018-10-23 17:51:13 +00:00
|
|
|
})
|
|
|
|
w.Flush()
|
2019-01-22 18:19:26 +00:00
|
|
|
|
|
|
|
return nil
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskLogCmd() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
|
|
|
Use: "log",
|
|
|
|
Short: "Log related commands",
|
|
|
|
Run: seeHelp,
|
|
|
|
}
|
|
|
|
|
|
|
|
cmd.AddCommand(
|
|
|
|
taskLogFindCmd(),
|
|
|
|
)
|
|
|
|
|
|
|
|
return cmd
|
|
|
|
}
|
|
|
|
|
2019-12-27 22:14:07 +00:00
|
|
|
var taskLogFindFlags struct {
|
2018-10-23 17:51:13 +00:00
|
|
|
taskID string
|
|
|
|
runID string
|
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskLogFindCmd() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
2018-10-23 17:51:13 +00:00
|
|
|
Use: "find",
|
|
|
|
Short: "find logs for task",
|
2019-01-22 18:19:26 +00:00
|
|
|
RunE: wrapCheckSetup(taskLogFindF),
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
cmd.Flags().StringVarP(&taskLogFindFlags.taskID, "task-id", "", "", "task id (required)")
|
|
|
|
cmd.Flags().StringVarP(&taskLogFindFlags.runID, "run-id", "", "", "run id")
|
|
|
|
cmd.MarkFlagRequired("task-id")
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return cmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 18:19:26 +00:00
|
|
|
func taskLogFindF(cmd *cobra.Command, args []string) error {
|
2018-10-23 17:51:13 +00:00
|
|
|
s := &http.TaskService{
|
2019-11-14 23:28:43 +00:00
|
|
|
Addr: flags.host,
|
|
|
|
Token: flags.token,
|
|
|
|
InsecureSkipVerify: flags.skipVerify,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var filter platform.LogFilter
|
|
|
|
id, err := platform.IDFromString(taskLogFindFlags.taskID)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
2019-02-16 00:04:54 +00:00
|
|
|
filter.Task = *id
|
2018-10-23 17:51:13 +00:00
|
|
|
|
|
|
|
if taskLogFindFlags.runID != "" {
|
|
|
|
id, err := platform.IDFromString(taskLogFindFlags.runID)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
filter.Run = id
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx := context.TODO()
|
|
|
|
logs, _, err := s.FindLogs(ctx, filter)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
w := internal.NewTabWriter(os.Stdout)
|
|
|
|
w.WriteHeaders(
|
2019-06-05 17:53:44 +00:00
|
|
|
"RunID",
|
|
|
|
"Time",
|
|
|
|
"Message",
|
2018-10-23 17:51:13 +00:00
|
|
|
)
|
|
|
|
for _, log := range logs {
|
|
|
|
w.Write(map[string]interface{}{
|
2019-06-05 17:53:44 +00:00
|
|
|
"RunID": log.RunID,
|
|
|
|
"Time": log.Time,
|
|
|
|
"Message": log.Message,
|
2018-10-23 17:51:13 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
w.Flush()
|
2019-01-22 18:19:26 +00:00
|
|
|
|
|
|
|
return nil
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskRunCmd() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
|
|
|
Use: "run",
|
|
|
|
Short: "Run related commands",
|
|
|
|
Run: seeHelp,
|
|
|
|
}
|
|
|
|
cmd.AddCommand(
|
|
|
|
taskRunFindCmd(),
|
|
|
|
taskRunRetryCmd(),
|
|
|
|
)
|
|
|
|
|
|
|
|
return cmd
|
|
|
|
}
|
|
|
|
|
2019-12-27 22:14:07 +00:00
|
|
|
var taskRunFindFlags struct {
|
2018-10-23 17:51:13 +00:00
|
|
|
runID string
|
|
|
|
taskID string
|
|
|
|
afterTime string
|
|
|
|
beforeTime string
|
|
|
|
limit int
|
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskRunFindCmd() *cobra.Command {
|
|
|
|
cmd := &cobra.Command{
|
2018-10-23 17:51:13 +00:00
|
|
|
Use: "find",
|
|
|
|
Short: "find runs for a task",
|
2019-01-22 18:19:26 +00:00
|
|
|
RunE: wrapCheckSetup(taskRunFindF),
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
cmd.Flags().StringVarP(&taskRunFindFlags.taskID, "task-id", "", "", "task id (required)")
|
|
|
|
cmd.Flags().StringVarP(&taskRunFindFlags.runID, "run-id", "", "", "run id")
|
|
|
|
cmd.Flags().StringVarP(&taskRunFindFlags.afterTime, "after", "", "", "after time for filtering")
|
|
|
|
cmd.Flags().StringVarP(&taskRunFindFlags.beforeTime, "before", "", "", "before time for filtering")
|
|
|
|
cmd.Flags().IntVarP(&taskRunFindFlags.limit, "limit", "", 0, "limit the results")
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
cmd.MarkFlagRequired("task-id")
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return cmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 18:19:26 +00:00
|
|
|
func taskRunFindF(cmd *cobra.Command, args []string) error {
|
2018-10-23 17:51:13 +00:00
|
|
|
s := &http.TaskService{
|
2019-11-14 23:28:43 +00:00
|
|
|
Addr: flags.host,
|
|
|
|
Token: flags.token,
|
|
|
|
InsecureSkipVerify: flags.skipVerify,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
filter := platform.RunFilter{
|
|
|
|
Limit: taskRunFindFlags.limit,
|
|
|
|
AfterTime: taskRunFindFlags.afterTime,
|
|
|
|
BeforeTime: taskRunFindFlags.beforeTime,
|
|
|
|
}
|
|
|
|
taskID, err := platform.IDFromString(taskRunFindFlags.taskID)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
2019-02-16 00:04:54 +00:00
|
|
|
filter.Task = *taskID
|
2018-10-23 17:51:13 +00:00
|
|
|
|
|
|
|
var runs []*platform.Run
|
|
|
|
if taskRunFindFlags.runID != "" {
|
|
|
|
id, err := platform.IDFromString(taskRunFindFlags.runID)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
2019-02-16 00:04:54 +00:00
|
|
|
run, err := s.FindRunByID(context.Background(), filter.Task, *id)
|
2018-10-23 17:51:13 +00:00
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
runs = append(runs, run)
|
|
|
|
} else {
|
|
|
|
runs, _, err = s.FindRuns(context.Background(), filter)
|
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
w := internal.NewTabWriter(os.Stdout)
|
|
|
|
w.WriteHeaders(
|
|
|
|
"ID",
|
|
|
|
"TaskID",
|
|
|
|
"Status",
|
|
|
|
"ScheduledFor",
|
|
|
|
"StartedAt",
|
|
|
|
"FinishedAt",
|
|
|
|
"RequestedAt",
|
|
|
|
)
|
2019-10-18 00:23:45 +00:00
|
|
|
|
2018-10-23 17:51:13 +00:00
|
|
|
for _, r := range runs {
|
2019-10-18 00:23:45 +00:00
|
|
|
scheduledFor := r.ScheduledFor.Format(time.RFC3339)
|
|
|
|
startedAt := r.StartedAt.Format(time.RFC3339Nano)
|
|
|
|
finishedAt := r.FinishedAt.Format(time.RFC3339Nano)
|
|
|
|
requestedAt := r.RequestedAt.Format(time.RFC3339Nano)
|
|
|
|
|
2018-10-23 17:51:13 +00:00
|
|
|
w.Write(map[string]interface{}{
|
|
|
|
"ID": r.ID,
|
|
|
|
"TaskID": r.TaskID,
|
|
|
|
"Status": r.Status,
|
2019-10-18 00:23:45 +00:00
|
|
|
"ScheduledFor": scheduledFor,
|
|
|
|
"StartedAt": startedAt,
|
|
|
|
"FinishedAt": finishedAt,
|
|
|
|
"RequestedAt": requestedAt,
|
2018-10-23 17:51:13 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
w.Flush()
|
2019-01-22 18:19:26 +00:00
|
|
|
|
|
|
|
return nil
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 22:14:07 +00:00
|
|
|
var runRetryFlags struct {
|
2018-10-25 23:43:11 +00:00
|
|
|
taskID, runID string
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
func taskRunRetryCmd() *cobra.Command {
|
2018-10-23 17:51:13 +00:00
|
|
|
cmd := &cobra.Command{
|
|
|
|
Use: "retry",
|
|
|
|
Short: "retry a run",
|
2019-01-22 18:19:26 +00:00
|
|
|
RunE: wrapCheckSetup(runRetryF),
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2018-10-25 23:43:11 +00:00
|
|
|
cmd.Flags().StringVarP(&runRetryFlags.taskID, "task-id", "i", "", "task id (required)")
|
|
|
|
cmd.Flags().StringVarP(&runRetryFlags.runID, "run-id", "r", "", "run id (required)")
|
|
|
|
cmd.MarkFlagRequired("task-id")
|
|
|
|
cmd.MarkFlagRequired("run-id")
|
2018-10-23 17:51:13 +00:00
|
|
|
|
2020-01-10 00:34:30 +00:00
|
|
|
return cmd
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 18:19:26 +00:00
|
|
|
func runRetryF(cmd *cobra.Command, args []string) error {
|
2018-10-23 17:51:13 +00:00
|
|
|
s := &http.TaskService{
|
2019-11-14 23:28:43 +00:00
|
|
|
Addr: flags.host,
|
|
|
|
Token: flags.token,
|
|
|
|
InsecureSkipVerify: flags.skipVerify,
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2018-10-25 23:43:11 +00:00
|
|
|
var taskID, runID platform.ID
|
|
|
|
if err := taskID.DecodeFromString(runRetryFlags.taskID); err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-25 23:43:11 +00:00
|
|
|
}
|
|
|
|
if err := runID.DecodeFromString(runRetryFlags.runID); err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ctx := context.TODO()
|
2018-11-27 22:32:25 +00:00
|
|
|
newRun, err := s.RetryRun(ctx, taskID, runID)
|
2018-11-20 21:53:52 +00:00
|
|
|
if err != nil {
|
2019-01-22 18:19:26 +00:00
|
|
|
return err
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|
|
|
|
|
2018-11-20 21:53:52 +00:00
|
|
|
fmt.Printf("Retry for task %s's run %s queued as run %s.\n", taskID, runID, newRun.ID)
|
2019-01-22 18:19:26 +00:00
|
|
|
|
|
|
|
return nil
|
2018-10-23 17:51:13 +00:00
|
|
|
}
|