-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(sinks): implement plain, table, json, json-raw printers for sinks
- Loading branch information
Showing
10 changed files
with
185 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters