From aafdd9c77f596b7604cb175e9f1764bd8b80849c Mon Sep 17 00:00:00 2001 From: feedmeapples Date: Fri, 5 Jun 2020 08:48:08 -0700 Subject: [PATCH 1/2] Create CLI command to list Tasks from Tasklist --- tools/cli/admin.go | 84 +++++++++++------------------- tools/cli/adminTaskListCommands.go | 26 +++++++++ tools/cli/flags.go | 55 +++++++++++++++++++ tools/cli/persistenceUtil.go | 4 +- 4 files changed, 113 insertions(+), 56 deletions(-) diff --git a/tools/cli/admin.go b/tools/cli/admin.go index 74b01de4136..2be7b690bed 100644 --- a/tools/cli/admin.go +++ b/tools/cli/admin.go @@ -720,6 +720,36 @@ func newAdminTaskListCommands() []cli.Command { AdminDescribeTaskList(c) }, }, + { + Name: "list_tasks", + Usage: "List tasks of a tasklist", + Flags: append(getDBFlags(), + cli.StringFlag{ + Name: FlagNamespaceID, + Usage: "Namespace Id", + }, + cli.StringFlag{ + Name: FlagTaskListType, + Value: "activity", + Usage: "Tasklist type: activity, decision", + }, + cli.StringFlag{ + Name: FlagTaskList, + Usage: "Tasklist name", + }, + cli.Int64Flag{ + Name: FlagMinReadLevel, + Usage: "Lower bound of read level", + }, + cli.Int64Flag{ + Name: FlagMaxReadLevel, + Usage: "Upper bound of read level", + }, + ), + Action: func(c *cli.Context) { + AdminListTaskListTasks(c) + }, + }, } } @@ -939,57 +969,3 @@ func newDBCommands() []cli.Command { }, } } - -// TODO need to support other database: https://github.com/uber/cadence/issues/2777 -func getDBFlags() []cli.Flag { - return []cli.Flag{ - cli.StringFlag{ - Name: FlagDBEngine, - Value: "cassandra", - Usage: "Type of the DB engine to use (cassandra, mysql..)", - }, - cli.StringFlag{ - Name: FlagDBAddress, - Value: "127.0.0.1", - Usage: "persistence address (right now only cassandra is fully supported)", - }, - cli.IntFlag{ - Name: FlagDBPort, - Value: 9042, - Usage: "persistence port", - }, - cli.StringFlag{ - Name: FlagUsername, - Usage: "cassandra username", - }, - cli.StringFlag{ - Name: FlagPassword, - Usage: "cassandra password", - }, - cli.StringFlag{ - Name: FlagKeyspace, - Value: "temporal", - Usage: "cassandra keyspace", - }, - cli.BoolFlag{ - Name: FlagEnableTLS, - Usage: "enable TLS over cassandra connection", - }, - cli.StringFlag{ - Name: FlagTLSCertPath, - Usage: "cassandra tls client cert path (tls must be enabled)", - }, - cli.StringFlag{ - Name: FlagTLSKeyPath, - Usage: "cassandra tls client key path (tls must be enabled)", - }, - cli.StringFlag{ - Name: FlagTLSCaPath, - Usage: "cassandra tls client ca path (tls must be enabled)", - }, - cli.BoolFlag{ - Name: FlagTLSEnableHostVerification, - Usage: "cassandra tls verify hostname and server cert (tls must be enabled)", - }, - } -} diff --git a/tools/cli/adminTaskListCommands.go b/tools/cli/adminTaskListCommands.go index 5cb27793414..3e92dc1d53e 100644 --- a/tools/cli/adminTaskListCommands.go +++ b/tools/cli/adminTaskListCommands.go @@ -31,6 +31,7 @@ import ( "strings" "github.com/olekukonko/tablewriter" + "github.com/temporalio/temporal/common/persistence" "github.com/urfave/cli" tasklistpb "go.temporal.io/temporal-proto/tasklist" "go.temporal.io/temporal-proto/workflowservice" @@ -107,3 +108,28 @@ func printPollerInfo(pollers []*tasklistpb.PollerInfo, taskListType tasklistpb.T } table.Render() } + +// AdminListTaskListTasks displays task information +func AdminListTaskListTasks(c *cli.Context) { + namespace := getRequiredOption(c, FlagNamespaceID) + tlName := getRequiredOption(c, FlagTaskList) + tlType := tasklistpb.TaskListType_Decision + if strings.ToLower(c.String(FlagTaskListType)) == "activity" { + tlType = tasklistpb.TaskListType_Activity + } + minReadLvl := getRequiredInt64Option(c, FlagMinReadLevel) + maxReadLvl := getRequiredInt64Option(c, FlagMaxReadLevel) + + pFactory := CreatePersistenceFactory(c) + taskManager, err := pFactory.NewTaskManager() + if err != nil { + ErrorAndExit("Failed to initialize task manager", err) + } + + req := &persistence.GetTasksRequest{NamespaceID: namespace, TaskList: tlName, TaskType: tlType, ReadLevel: minReadLvl, MaxReadLevel: &maxReadLvl} + tasks, err := taskManager.GetTasks(req) + if err != nil { + ErrorAndExit("Failed to get Tasks", err) + } + prettyPrintJSONObject(tasks) +} diff --git a/tools/cli/flags.go b/tools/cli/flags.go index d35f11b7ee9..3a6135e4e39 100644 --- a/tools/cli/flags.go +++ b/tools/cli/flags.go @@ -196,6 +196,8 @@ const ( FlagSignalNameWithAlias = FlagSignalName + ", sig" FlagTaskID = "task_id" FlagTaskType = "task_type" + FlagMinReadLevel = "min_read_level" + FlagMaxReadLevel = "max_read_level" FlagTaskVisibilityTimestamp = "task_timestamp" FlagMinVisibilityTimestamp = "min_visibility_ts" FlagMaxVisibilityTimestamp = "max_visibility_ts" @@ -582,3 +584,56 @@ func getFlagsForObserveID() []cli.Flag { }, } } + +func getDBFlags() []cli.Flag { + return []cli.Flag{ + cli.StringFlag{ + Name: FlagDBEngine, + Value: "cassandra", + Usage: "Type of the DB engine to use (cassandra, mysql..)", + }, + cli.StringFlag{ + Name: FlagDBAddress, + Value: "127.0.0.1", + Usage: "persistence address (right now only cassandra is fully supported)", + }, + cli.IntFlag{ + Name: FlagDBPort, + Value: 9042, + Usage: "persistence port", + }, + cli.StringFlag{ + Name: FlagUsername, + Usage: "cassandra username", + }, + cli.StringFlag{ + Name: FlagPassword, + Usage: "cassandra password", + }, + cli.StringFlag{ + Name: FlagKeyspace, + Value: "temporal", + Usage: "cassandra keyspace", + }, + cli.BoolFlag{ + Name: FlagEnableTLS, + Usage: "enable TLS over cassandra connection", + }, + cli.StringFlag{ + Name: FlagTLSCertPath, + Usage: "cassandra tls client cert path (tls must be enabled)", + }, + cli.StringFlag{ + Name: FlagTLSKeyPath, + Usage: "cassandra tls client key path (tls must be enabled)", + }, + cli.StringFlag{ + Name: FlagTLSCaPath, + Usage: "cassandra tls client ca path (tls must be enabled)", + }, + cli.BoolFlag{ + Name: FlagTLSEnableHostVerification, + Usage: "cassandra tls verify hostname and server cert (tls must be enabled)", + }, + } +} diff --git a/tools/cli/persistenceUtil.go b/tools/cli/persistenceUtil.go index 4255bbeaad7..4c772382312 100644 --- a/tools/cli/persistenceUtil.go +++ b/tools/cli/persistenceUtil.go @@ -76,11 +76,11 @@ func CreateDefaultDBConfig(c *cli.Context) (config.DataStore, error) { if engine == cassandraDBType { defaultConfig := &config.Cassandra{ - Hosts: getRequiredOption(c, FlagDBAddress), + Hosts: c.String(FlagDBAddress), Port: c.Int(FlagDBPort), User: c.String(FlagUsername), Password: c.String(FlagPassword), - Keyspace: getRequiredOption(c, FlagKeyspace), + Keyspace: c.String(FlagKeyspace), } if c.Bool(FlagEnableTLS) { From 6973170446e192563eafdb0523ff72b9ec6c5a30 Mon Sep 17 00:00:00 2001 From: feedmeapples Date: Wed, 10 Jun 2020 15:16:52 -0700 Subject: [PATCH 2/2] update cli according to proto changes --- tools/cli/adminTaskListCommands.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/cli/adminTaskListCommands.go b/tools/cli/adminTaskListCommands.go index 3e92dc1d53e..c0add09141a 100644 --- a/tools/cli/adminTaskListCommands.go +++ b/tools/cli/adminTaskListCommands.go @@ -113,10 +113,9 @@ func printPollerInfo(pollers []*tasklistpb.PollerInfo, taskListType tasklistpb.T func AdminListTaskListTasks(c *cli.Context) { namespace := getRequiredOption(c, FlagNamespaceID) tlName := getRequiredOption(c, FlagTaskList) - tlType := tasklistpb.TaskListType_Decision - if strings.ToLower(c.String(FlagTaskListType)) == "activity" { - tlType = tasklistpb.TaskListType_Activity - } + tlTypeFlag := strings.Title(c.String(FlagTaskListType)) + tlTypeInt := tasklistpb.TaskListType_value[tlTypeFlag] + tlType := tasklistpb.TaskListType(tlTypeInt) minReadLvl := getRequiredInt64Option(c, FlagMinReadLevel) maxReadLvl := getRequiredInt64Option(c, FlagMaxReadLevel)