Skip to content

Commit

Permalink
feat(kafka-exporters): implement plain, table, json, json-raw printer…
Browse files Browse the repository at this point in the history
…s for kafka-exporters
  • Loading branch information
trietsch committed Aug 17, 2021
1 parent 6dbe06e commit 04ee444
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 12 deletions.
5 changes: 5 additions & 0 deletions pkg/entity/kafka_cluster/kafka_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package kafka_cluster

import (
"context"
"fmt"
"github.com/spf13/cobra"
"github.com/streammachineio/api-definitions-go/api/entities/v1"
"github.com/streammachineio/api-definitions-go/api/kafka_clusters/v1"
Expand Down Expand Up @@ -62,3 +63,7 @@ func NamesCompletion(cmd *cobra.Command, args []string, complete string) ([]stri

return names, cobra.ShellCompDirectiveNoFileComp
}

func RefToString(clusterRef *entities.KafkaClusterRef) string {
return fmt.Sprintf("%v/%v", clusterRef.BillingId, clusterRef.Name)
}
8 changes: 2 additions & 6 deletions pkg/entity/kafka_cluster/printers.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func printTable(kafkaClusters []*entities.KafkaCluster) {
for _, cluster := range kafkaClusters {

rows = append(rows, table.Row{
refToString(cluster.Ref),
RefToString(cluster.Ref),
cluster.BootstrapServers,
cluster.AuthMechanism,
cluster.TokenUri,
Expand All @@ -99,7 +99,7 @@ func printPlain(kafkaClusters []*entities.KafkaCluster) {
lastIndex := len(kafkaClusters) - 1

for index, cluster := range kafkaClusters {
names = names + refToString(cluster.Ref)
names = names + RefToString(cluster.Ref)

if index != lastIndex {
names = names + "\n"
Expand All @@ -108,7 +108,3 @@ func printPlain(kafkaClusters []*entities.KafkaCluster) {

fmt.Println(names)
}

func refToString(clusterRef *entities.KafkaClusterRef) string {
return fmt.Sprintf("%v/%v", clusterRef.BillingId, clusterRef.Name)
}
7 changes: 5 additions & 2 deletions pkg/entity/kafka_exporter/kafka_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,14 @@ func del(name *string, recursive bool) {
exporter := Get(name)

req := &kafka_exporters.DeleteKafkaExporterRequest{Ref: exporterRef, Recursive: recursive}
_, err := client.DeleteKafkaExporter(apiContext, req)
response, err := client.DeleteKafkaExporter(apiContext, req)
common.CliExit(err)

for _, user := range exporter.KafkaExporter.Users {
util.DeleteSaved(user, &user.Ref.Name)
}

printer.Print(response)
}

func create(name *string, cmd *cobra.Command) {
Expand All @@ -69,14 +72,14 @@ func create(name *string, cmd *cobra.Command) {
)

common.CliExit(err)
printer.Print(response.KafkaExporter)

save, err := flags.GetBool(saveFlag)
if save {
user := response.KafkaExporter.Users[0]
util.Save(user, &user.Ref.Name)
}

printer.Print(response)
}

func NamesCompletion(cmd *cobra.Command, args []string, complete string) ([]string, cobra.ShellCompDirective) {
Expand Down
123 changes: 119 additions & 4 deletions pkg/entity/kafka_exporter/printers.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,136 @@
package kafka_exporter

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/kafka_exporters/v1"
"google.golang.org/protobuf/proto"
"streammachine.io/strm/pkg/constants"
"streammachine.io/strm/pkg/entity/kafka_cluster"
"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 {
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 ListKafkaExportersTablePrinter{}
case constants.GetCommandName:
return GetKafkaExportersTablePrinter{}
case constants.DeleteCommandName:
return DeleteKafkaExportersPrinter{}
case constants.CreateCommandName:
return CreateKafkaExportersTablePrinter{}
}

return util.GenericPrettyJsonPrinter{}
case "plain":
switch command.Parent().Name() {
case constants.ListCommandName:
return ListKafkaExportersPlainPrinter{}
case constants.GetCommandName:
return GetKafkaExportersPlainPrinter{}
case constants.DeleteCommandName:
return DeleteKafkaExportersPrinter{}
case constants.CreateCommandName:
return CreateKafkaExportersPlainPrinter{}
}

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

type ListKafkaExportersPlainPrinter struct{}
type GetKafkaExportersPlainPrinter struct{}
type CreateKafkaExportersPlainPrinter struct{}

type ListKafkaExportersTablePrinter struct{}
type GetKafkaExportersTablePrinter struct{}
type CreateKafkaExportersTablePrinter struct{}

type DeleteKafkaExportersPrinter struct{}

func (p ListKafkaExportersTablePrinter) Print(data proto.Message) {
listResponse, _ := (data).(*kafka_exporters.ListKafkaExportersResponse)
printTable(listResponse.KafkaExporters)
}

func (p GetKafkaExportersTablePrinter) Print(data proto.Message) {
getResponse, _ := (data).(*kafka_exporters.GetKafkaExporterResponse)
printTable([]*entities.KafkaExporter{getResponse.KafkaExporter})
}

func (p CreateKafkaExportersTablePrinter) Print(data proto.Message) {
createResponse, _ := (data).(*kafka_exporters.CreateKafkaExporterResponse)
printTable([]*entities.KafkaExporter{createResponse.KafkaExporter})
}

func (p ListKafkaExportersPlainPrinter) Print(data proto.Message) {
listResponse, _ := (data).(*kafka_exporters.ListKafkaExportersResponse)
printPlain(listResponse.KafkaExporters)
}

func (p GetKafkaExportersPlainPrinter) Print(data proto.Message) {
getResponse, _ := (data).(*kafka_exporters.GetKafkaExporterResponse)
printPlain([]*entities.KafkaExporter{getResponse.KafkaExporter})
}

func (p CreateKafkaExportersPlainPrinter) Print(data proto.Message) {
createResponse, _ := (data).(*kafka_exporters.CreateKafkaExporterResponse)
printPlain([]*entities.KafkaExporter{createResponse.KafkaExporter})
}

func (p DeleteKafkaExportersPrinter) Print(_ proto.Message) {
fmt.Println("Kafka Exporter has been deleted")
}

func printTable(kafkaExporters []*entities.KafkaExporter) {
rows := make([]table.Row, 0, len(kafkaExporters))

for _, exporter := range kafkaExporters {
rows = append(rows, table.Row{
exporter.Ref.Name,
exporter.StreamRef.Name,
kafka_cluster.RefToString(exporter.Target.ClusterRef),
exporter.Target.Topic,
})
}

util.RenderTable(
table.Row{
"Kafka Exporter",
"Stream",
"Target Cluster",
"Topic",
},
rows,
)
}

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

for index, exporter := range kafkaExporters {
names = names + exporter.Ref.Name

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

fmt.Println(names)
}

0 comments on commit 04ee444

Please sign in to comment.