github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/logging/kafka/list.go (about) 1 package kafka 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/fastly/go-fastly/v9/fastly" 8 9 "github.com/fastly/cli/pkg/argparser" 10 fsterr "github.com/fastly/cli/pkg/errors" 11 "github.com/fastly/cli/pkg/global" 12 "github.com/fastly/cli/pkg/text" 13 ) 14 15 // ListCommand calls the Fastly API to list Kafka logging endpoints. 16 type ListCommand struct { 17 argparser.Base 18 argparser.JSONOutput 19 20 Input fastly.ListKafkasInput 21 serviceName argparser.OptionalServiceNameID 22 serviceVersion argparser.OptionalServiceVersion 23 } 24 25 // NewListCommand returns a usable command registered under the parent. 26 func NewListCommand(parent argparser.Registerer, g *global.Data) *ListCommand { 27 c := ListCommand{ 28 Base: argparser.Base{ 29 Globals: g, 30 }, 31 } 32 c.CmdClause = parent.Command("list", "List Kafka endpoints on a Fastly service version") 33 34 // Required. 35 c.RegisterFlag(argparser.StringFlagOpts{ 36 Name: argparser.FlagVersionName, 37 Description: argparser.FlagVersionDesc, 38 Dst: &c.serviceVersion.Value, 39 Required: true, 40 }) 41 42 // Optional. 43 c.RegisterFlagBool(c.JSONFlag()) // --json 44 c.RegisterFlag(argparser.StringFlagOpts{ 45 Name: argparser.FlagServiceIDName, 46 Description: argparser.FlagServiceIDDesc, 47 Dst: &g.Manifest.Flag.ServiceID, 48 Short: 's', 49 }) 50 c.RegisterFlag(argparser.StringFlagOpts{ 51 Action: c.serviceName.Set, 52 Name: argparser.FlagServiceName, 53 Description: argparser.FlagServiceDesc, 54 Dst: &c.serviceName.Value, 55 }) 56 return &c 57 } 58 59 // Exec invokes the application logic for the command. 60 func (c *ListCommand) Exec(_ io.Reader, out io.Writer) error { 61 if c.Globals.Verbose() && c.JSONOutput.Enabled { 62 return fsterr.ErrInvalidVerboseJSONCombo 63 } 64 65 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 66 AllowActiveLocked: true, 67 APIClient: c.Globals.APIClient, 68 Manifest: *c.Globals.Manifest, 69 Out: out, 70 ServiceNameFlag: c.serviceName, 71 ServiceVersionFlag: c.serviceVersion, 72 VerboseMode: c.Globals.Flags.Verbose, 73 }) 74 if err != nil { 75 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 76 "Service ID": serviceID, 77 "Service Version": fsterr.ServiceVersion(serviceVersion), 78 }) 79 return err 80 } 81 82 c.Input.ServiceID = serviceID 83 c.Input.ServiceVersion = fastly.ToValue(serviceVersion.Number) 84 85 o, err := c.Globals.APIClient.ListKafkas(&c.Input) 86 if err != nil { 87 c.Globals.ErrLog.Add(err) 88 return err 89 } 90 91 if ok, err := c.WriteJSON(out, o); ok { 92 return err 93 } 94 95 if !c.Globals.Verbose() { 96 tw := text.NewTable(out) 97 tw.AddHeader("SERVICE", "VERSION", "NAME") 98 for _, kafka := range o { 99 tw.AddLine( 100 fastly.ToValue(kafka.ServiceID), 101 fastly.ToValue(kafka.ServiceVersion), 102 fastly.ToValue(kafka.Name), 103 ) 104 } 105 tw.Print() 106 return nil 107 } 108 109 fmt.Fprintf(out, "Version: %d\n", c.Input.ServiceVersion) 110 for i, kafka := range o { 111 fmt.Fprintf(out, "\tKafka %d/%d\n", i+1, len(o)) 112 fmt.Fprintf(out, "\t\tService ID: %s\n", fastly.ToValue(kafka.ServiceID)) 113 fmt.Fprintf(out, "\t\tVersion: %d\n", fastly.ToValue(kafka.ServiceVersion)) 114 fmt.Fprintf(out, "\t\tName: %s\n", fastly.ToValue(kafka.Name)) 115 fmt.Fprintf(out, "\t\tTopic: %s\n", fastly.ToValue(kafka.Topic)) 116 fmt.Fprintf(out, "\t\tBrokers: %s\n", fastly.ToValue(kafka.Brokers)) 117 fmt.Fprintf(out, "\t\tRequired acks: %s\n", fastly.ToValue(kafka.RequiredACKs)) 118 fmt.Fprintf(out, "\t\tCompression codec: %s\n", fastly.ToValue(kafka.CompressionCodec)) 119 fmt.Fprintf(out, "\t\tUse TLS: %t\n", fastly.ToValue(kafka.UseTLS)) 120 fmt.Fprintf(out, "\t\tTLS CA certificate: %s\n", fastly.ToValue(kafka.TLSCACert)) 121 fmt.Fprintf(out, "\t\tTLS client certificate: %s\n", fastly.ToValue(kafka.TLSClientCert)) 122 fmt.Fprintf(out, "\t\tTLS client key: %s\n", fastly.ToValue(kafka.TLSClientKey)) 123 fmt.Fprintf(out, "\t\tTLS hostname: %s\n", fastly.ToValue(kafka.TLSHostname)) 124 fmt.Fprintf(out, "\t\tFormat: %s\n", fastly.ToValue(kafka.Format)) 125 fmt.Fprintf(out, "\t\tFormat version: %d\n", fastly.ToValue(kafka.FormatVersion)) 126 fmt.Fprintf(out, "\t\tResponse condition: %s\n", fastly.ToValue(kafka.ResponseCondition)) 127 fmt.Fprintf(out, "\t\tPlacement: %s\n", fastly.ToValue(kafka.Placement)) 128 fmt.Fprintf(out, "\t\tParse log key-values: %t\n", fastly.ToValue(kafka.ParseLogKeyvals)) 129 fmt.Fprintf(out, "\t\tMax batch size: %d\n", fastly.ToValue(kafka.RequestMaxBytes)) 130 fmt.Fprintf(out, "\t\tSASL authentication method: %s\n", fastly.ToValue(kafka.AuthMethod)) 131 fmt.Fprintf(out, "\t\tSASL authentication username: %s\n", fastly.ToValue(kafka.User)) 132 fmt.Fprintf(out, "\t\tSASL authentication password: %s\n", fastly.ToValue(kafka.Password)) 133 } 134 fmt.Fprintln(out) 135 136 return nil 137 }