github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/healthcheck/list.go (about) 1 package healthcheck 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 healthchecks. 16 type ListCommand struct { 17 argparser.Base 18 argparser.JSONOutput 19 20 Input fastly.ListHealthChecksInput 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 healthchecks 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.ListHealthChecks(&c.Input) 86 if err != nil { 87 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 88 "Service ID": serviceID, 89 "Service Version": fastly.ToValue(serviceVersion.Number), 90 }) 91 return err 92 } 93 94 if ok, err := c.WriteJSON(out, o); ok { 95 return err 96 } 97 98 if !c.Globals.Verbose() { 99 tw := text.NewTable(out) 100 tw.AddHeader("SERVICE", "VERSION", "NAME", "METHOD", "HOST", "PATH") 101 for _, hc := range o { 102 tw.AddLine( 103 fastly.ToValue(hc.ServiceID), 104 fastly.ToValue(hc.ServiceVersion), 105 fastly.ToValue(hc.Name), 106 fastly.ToValue(hc.Method), 107 fastly.ToValue(hc.Host), 108 fastly.ToValue(hc.Path), 109 ) 110 } 111 tw.Print() 112 return nil 113 } 114 115 fmt.Fprintf(out, "Version: %d\n", c.Input.ServiceVersion) 116 for i, hc := range o { 117 fmt.Fprintf(out, "\tHealthcheck %d/%d\n", i+1, len(o)) 118 text.PrintHealthCheck(out, "\t\t", hc) 119 } 120 fmt.Fprintln(out) 121 122 return nil 123 }