diff --git a/pkg/entity/kafka_cluster/kafka_cluster.go b/pkg/entity/kafka_cluster/kafka_cluster.go index fb8c603..8bf41ae 100644 --- a/pkg/entity/kafka_cluster/kafka_cluster.go +++ b/pkg/entity/kafka_cluster/kafka_cluster.go @@ -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" @@ -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) +} diff --git a/pkg/entity/kafka_cluster/printers.go b/pkg/entity/kafka_cluster/printers.go index cd97d5c..3b96977 100644 --- a/pkg/entity/kafka_cluster/printers.go +++ b/pkg/entity/kafka_cluster/printers.go @@ -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, @@ -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" @@ -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) -} diff --git a/pkg/entity/kafka_exporter/kafka_exporter.go b/pkg/entity/kafka_exporter/kafka_exporter.go index b204903..431ed98 100644 --- a/pkg/entity/kafka_exporter/kafka_exporter.go +++ b/pkg/entity/kafka_exporter/kafka_exporter.go @@ -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) { @@ -69,7 +72,6 @@ func create(name *string, cmd *cobra.Command) { ) common.CliExit(err) - printer.Print(response.KafkaExporter) save, err := flags.GetBool(saveFlag) if save { @@ -77,6 +79,7 @@ func create(name *string, cmd *cobra.Command) { util.Save(user, &user.Ref.Name) } + printer.Print(response) } func NamesCompletion(cmd *cobra.Command, args []string, complete string) ([]string, cobra.ShellCompDirective) { diff --git a/pkg/entity/kafka_exporter/printers.go b/pkg/entity/kafka_exporter/printers.go index 08c22e8..374ab80 100644 --- a/pkg/entity/kafka_exporter/printers.go +++ b/pkg/entity/kafka_exporter/printers.go @@ -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) }