Skip to content

Commit

Permalink
feat(sinks): implement plain, table, json, json-raw printers for sinks
Browse files Browse the repository at this point in the history
  • Loading branch information
trietsch committed Aug 17, 2021
1 parent f205174 commit 6dc2c77
Show file tree
Hide file tree
Showing 10 changed files with 185 additions and 21 deletions.
3 changes: 2 additions & 1 deletion pkg/cmd/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ var DeleteCmd = &cobra.Command{
}

func init() {
DeleteCmd.PersistentFlags().BoolP("recursive", "r", false, "recursive")
DeleteCmd.AddCommand(stream.DeleteCmd())
DeleteCmd.AddCommand(kafka_exporter.DeleteCmd())
DeleteCmd.AddCommand(batch_exporter.DeleteCmd())
DeleteCmd.AddCommand(sink.DeleteCmd())
DeleteCmd.AddCommand(kafka_user.DeleteCmd())

DeleteCmd.PersistentFlags().BoolP(constants.RecursiveFlagName, constants.RecursiveFlagShorthand, false, constants.RecursiveFlagUsage)
}
3 changes: 2 additions & 1 deletion pkg/cmd/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,6 @@ func init() {
GetCmd.AddCommand(schema_code.GetCmd())
GetCmd.AddCommand(event_contract.GetCmd())
GetCmd.AddCommand(usage.GetCmd())
GetCmd.PersistentFlags().BoolP("recursive", "r", false, "recursive")

GetCmd.PersistentFlags().BoolP(constants.RecursiveFlagName, constants.RecursiveFlagShorthand, false, constants.RecursiveFlagUsage)
}
4 changes: 2 additions & 2 deletions pkg/cmd/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"streammachine.io/strm/pkg/entity/stream"
)


var ListCmd = &cobra.Command{
Use: constants.ListCommandName,
Short: "List entities",
Expand All @@ -30,5 +29,6 @@ func init() {
ListCmd.AddCommand(key_stream.ListCmd())
ListCmd.AddCommand(schema.ListCmd())
ListCmd.AddCommand(event_contract.ListCmd())
ListCmd.PersistentFlags().BoolP("recursive", "r", false, "recursive")

ListCmd.PersistentFlags().BoolP(constants.RecursiveFlagName, constants.RecursiveFlagShorthand, false, constants.RecursiveFlagUsage)
}
3 changes: 3 additions & 0 deletions pkg/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@ const ListCommandName = "list"
const CreateCommandName = "create"
const DeleteCommandName = "delete"

const RecursiveFlagName = "recursive"
const RecursiveFlagUsage = "Retrieve entities and their dependents"
const RecursiveFlagShorthand = "r"

7 changes: 4 additions & 3 deletions pkg/entity/kafka_exporter/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package kafka_exporter
import (
"github.com/spf13/cobra"
"streammachine.io/strm/pkg/common"
"streammachine.io/strm/pkg/constants"
"streammachine.io/strm/pkg/entity/kafka_cluster"
"streammachine.io/strm/pkg/entity/stream"
)
Expand All @@ -24,7 +25,7 @@ func DeleteCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
del(&args[0], recursive)
},
Args: cobra.ExactArgs(1), // the stream name
Expand All @@ -40,7 +41,7 @@ func GetCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
get(&args[0], recursive)
},
Args: cobra.ExactArgs(1), // the stream name
Expand All @@ -56,7 +57,7 @@ func ListCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
flag, _ := cmd.Root().PersistentFlags().GetBool("recursive")
flag, _ := cmd.Root().PersistentFlags().GetBool(constants.RecursiveFlagName)
list(flag)
},
}
Expand Down
7 changes: 4 additions & 3 deletions pkg/entity/sink/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package sink
import (
"github.com/spf13/cobra"
"streammachine.io/strm/pkg/common"
"streammachine.io/strm/pkg/constants"
)

const (
Expand All @@ -18,7 +19,7 @@ func GetCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
get(&args[0], recursive)
},
Args: cobra.ExactArgs(1), // the stream name
Expand All @@ -33,7 +34,7 @@ func ListCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
list(recursive)
},
}
Expand All @@ -46,7 +47,7 @@ func DeleteCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
del(&args[0], recursive)
},
Args: cobra.ExactArgs(1),
Expand Down
161 changes: 157 additions & 4 deletions pkg/entity/sink/printers.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,174 @@
package sink

import (
"fmt"
"github.com/jedib0t/go-pretty/v6/table"
"github.com/spf13/cobra"
"github.com/streammachineio/api-definitions-go/api/entities/v1"
"github.com/streammachineio/api-definitions-go/api/sinks/v1"
"google.golang.org/protobuf/proto"
"streammachine.io/strm/pkg/constants"
"streammachine.io/strm/pkg/util"
)

var printer util.Printer

func configurePrinter(cmd *cobra.Command) util.Printer {
outputFormat := util.GetStringAndErr(cmd.Flags(), util.OutputFormatFlag)
func configurePrinter(command *cobra.Command) util.Printer {
recursive := util.GetBoolAndErr(command.Flags(), constants.RecursiveFlagName)
outputFormat := util.GetStringAndErr(command.Flags(), util.OutputFormatFlag)

switch outputFormat {
case "json":
return util.GenericPrettyJsonPrinter{}
case "json-raw":
return util.GenericRawJsonPrinter{}
case "table":
return util.GenericRawJsonPrinter{}
switch command.Parent().Name() {
case constants.ListCommandName:
return listTablePrinter{recursive}
case constants.GetCommandName:
return getTablePrinter{recursive}
case constants.DeleteCommandName:
return deletePrinter{recursive}
case constants.CreateCommandName:
return createTablePrinter{}
}

return util.GenericPrettyJsonPrinter{}
case "plain":
switch command.Parent().Name() {
case constants.ListCommandName:
return listPlainPrinter{}
case constants.GetCommandName:
return getPlainPrinter{}
case constants.DeleteCommandName:
return deletePrinter{recursive}
case constants.CreateCommandName:
return createPlainPrinter{}
}

return util.GenericPrettyJsonPrinter{}
default:
return util.GenericRawJsonPrinter{}
return util.GenericPrettyJsonPrinter{}
}
}

type listPlainPrinter struct{}
type getPlainPrinter struct{}
type createPlainPrinter struct{}

type listTablePrinter struct {
recursive bool
}
type getTablePrinter struct {
recursive bool
}
type createTablePrinter struct{}

type deletePrinter struct {
recursive bool
}

func (p listTablePrinter) Print(data proto.Message) {
listResponse, _ := (data).(*sinks.ListSinksResponse)
printTable(listResponse.Sinks, p.recursive)
}

func (p getTablePrinter) Print(data proto.Message) {
getResponse, _ := (data).(*sinks.GetSinkResponse)
printTable([]*entities.SinkTree{getResponse.SinkTree}, p.recursive)
}

func (p createTablePrinter) Print(data proto.Message) {
createResponse, _ := (data).(*sinks.CreateSinkResponse)
printTable([]*entities.SinkTree{{Sink: createResponse.Sink}}, false)
}

func (p listPlainPrinter) Print(data proto.Message) {
listResponse, _ := (data).(*sinks.ListSinksResponse)
printPlain(listResponse.Sinks)
}

func (p getPlainPrinter) Print(data proto.Message) {
getResponse, _ := (data).(*sinks.GetSinkResponse)
printPlain([]*entities.SinkTree{getResponse.SinkTree})
}

func (p createPlainPrinter) Print(data proto.Message) {
createResponse, _ := (data).(*sinks.CreateSinkResponse)
printPlain([]*entities.SinkTree{{Sink: createResponse.Sink}})
}

func (p deletePrinter) Print(_ proto.Message) {
if p.recursive {
fmt.Println("Sink and linked resources have been deleted")
} else {
fmt.Println("Sink has been deleted")
}
}

func printTable(sinkTreeArray []*entities.SinkTree, recursive bool) {
rows := make([]table.Row, 0, len(sinkTreeArray))

for _, sink := range sinkTreeArray {
var sinkBucketName string

switch config := sink.Sink.Config.(type) {
case *entities.Sink_Bucket:
sinkBucketName = config.Bucket.BucketName
}

var row table.Row

if recursive {
row = table.Row{
sink.Sink.Ref.Name,
sink.Sink.SinkType.String(),
sinkBucketName,
len(sink.BatchExporters),
}
} else {
row = table.Row{
sink.Sink.Ref.Name,
sink.Sink.SinkType.String(),
sinkBucketName,
}
}

rows = append(rows, row)
}

var header table.Row

if recursive {
header = table.Row{
"Sink",
"Type",
"Bucket",
"# Batch Exporters",
}
} else {
header = table.Row{
"Sink",
"Type",
"Bucket",
}
}

util.RenderTable(header, rows)
}

func printPlain(sinkTreeArray []*entities.SinkTree) {
var names string
lastIndex := len(sinkTreeArray) - 1

for index, sink := range sinkTreeArray {
names = names + sink.Sink.Ref.Name

if index != lastIndex {
names = names + "\n"
}
}

util.RenderPlain(names)
}
7 changes: 3 additions & 4 deletions pkg/entity/sink/sink.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ func list(recursive bool) {

func get(name *string, recursive bool) {
req := &sinks.GetSinkRequest{Recursive: recursive, Ref: ref(name)}
stream, err := Client.GetSink(apiContext, req)
sink, err := Client.GetSink(apiContext, req)
common.CliExit(err)
printer.Print(stream)
printer.Print(sink)
}

func del(name *string, recursive bool) {
Expand All @@ -58,8 +58,7 @@ func create(sinkName *string, bucketName *string, cmd *cobra.Command) {
}
response, err := Client.CreateSink(apiContext, &sinks.CreateSinkRequest{Sink: sink})
common.CliExit(err)
printer.Print(response.Sink)

printer.Print(response)
}

func readCredentialsFile(flags *pflag.FlagSet) string {
Expand Down
7 changes: 4 additions & 3 deletions pkg/entity/stream/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package stream
import (
"github.com/spf13/cobra"
"streammachine.io/strm/pkg/common"
"streammachine.io/strm/pkg/constants"
)

func CreateCmd() *cobra.Command {
Expand Down Expand Up @@ -48,7 +49,7 @@ func DeleteCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
del(&args[0], recursive)
},
Args: cobra.ExactArgs(1), // the stream name
Expand All @@ -63,7 +64,7 @@ func GetCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
get(&args[0], recursive)
},
Args: cobra.ExactArgs(1), // the stream name
Expand All @@ -78,7 +79,7 @@ func ListCmd() *cobra.Command {
printer = configurePrinter(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
recursive, _ := cmd.Flags().GetBool("recursive")
recursive, _ := cmd.Flags().GetBool(constants.RecursiveFlagName)
list(recursive)
},
ValidArgsFunction: common.NoFilesEmptyCompletion,
Expand Down
4 changes: 4 additions & 0 deletions pkg/entity/usage/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"github.com/spf13/cobra"
"streammachine.io/strm/pkg/entity/stream"
"streammachine.io/strm/pkg/util"
)

const (
Expand Down Expand Up @@ -60,5 +61,8 @@ from,count,duration,change,rate
_ = usage.RegisterFlagCompletionFunc(fromFlag, dateCompletion)
_ = usage.RegisterFlagCompletionFunc(untilFlag, dateCompletion)

//usage.PersistentFlags().Lookup(util.OutputFormatFlag).Hidden = true
flags.StringP(util.OutputFormatFlag, "o", "table", "")

return usage
}

0 comments on commit 6dc2c77

Please sign in to comment.