github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/healthcheck/describe.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 // DescribeCommand calls the Fastly API to describe a healthcheck. 16 type DescribeCommand struct { 17 argparser.Base 18 argparser.JSONOutput 19 20 Input fastly.GetHealthCheckInput 21 serviceName argparser.OptionalServiceNameID 22 serviceVersion argparser.OptionalServiceVersion 23 } 24 25 // NewDescribeCommand returns a usable command registered under the parent. 26 func NewDescribeCommand(parent argparser.Registerer, g *global.Data) *DescribeCommand { 27 c := DescribeCommand{ 28 Base: argparser.Base{ 29 Globals: g, 30 }, 31 } 32 c.CmdClause = parent.Command("describe", "Show detailed information about a healthcheck on a Fastly service version").Alias("get") 33 34 // Required. 35 c.CmdClause.Flag("name", "Name of healthcheck").Short('n').Required().StringVar(&c.Input.Name) 36 c.RegisterFlag(argparser.StringFlagOpts{ 37 Name: argparser.FlagVersionName, 38 Description: argparser.FlagVersionDesc, 39 Dst: &c.serviceVersion.Value, 40 Required: true, 41 }) 42 43 // Optional. 44 c.RegisterFlagBool(c.JSONFlag()) // --json 45 c.RegisterFlag(argparser.StringFlagOpts{ 46 Name: argparser.FlagServiceIDName, 47 Description: argparser.FlagServiceIDDesc, 48 Dst: &g.Manifest.Flag.ServiceID, 49 Short: 's', 50 }) 51 c.RegisterFlag(argparser.StringFlagOpts{ 52 Action: c.serviceName.Set, 53 Name: argparser.FlagServiceName, 54 Description: argparser.FlagServiceDesc, 55 Dst: &c.serviceName.Value, 56 }) 57 return &c 58 } 59 60 // Exec invokes the application logic for the command. 61 func (c *DescribeCommand) Exec(_ io.Reader, out io.Writer) error { 62 if c.Globals.Verbose() && c.JSONOutput.Enabled { 63 return fsterr.ErrInvalidVerboseJSONCombo 64 } 65 66 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 67 AllowActiveLocked: true, 68 APIClient: c.Globals.APIClient, 69 Manifest: *c.Globals.Manifest, 70 Out: out, 71 ServiceNameFlag: c.serviceName, 72 ServiceVersionFlag: c.serviceVersion, 73 VerboseMode: c.Globals.Flags.Verbose, 74 }) 75 if err != nil { 76 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 77 "Service ID": serviceID, 78 "Service Version": fsterr.ServiceVersion(serviceVersion), 79 }) 80 return err 81 } 82 83 c.Input.ServiceID = serviceID 84 c.Input.ServiceVersion = fastly.ToValue(serviceVersion.Number) 85 86 o, err := c.Globals.APIClient.GetHealthCheck(&c.Input) 87 if err != nil { 88 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 89 "Service ID": serviceID, 90 "Service Version": fastly.ToValue(serviceVersion.Number), 91 }) 92 return err 93 } 94 95 if ok, err := c.WriteJSON(out, o); ok { 96 return err 97 } 98 99 if !c.Globals.Verbose() { 100 fmt.Fprintf(out, "\nService ID: %s\n", fastly.ToValue(o.ServiceID)) 101 } 102 fmt.Fprintf(out, "Version: %d\n", fastly.ToValue(o.ServiceVersion)) 103 text.PrintHealthCheck(out, "", o) 104 105 return nil 106 }