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  }