summaryrefslogtreecommitdiffstats
path: root/client/go/internal/cli/cmd/status.go
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-08-17 14:55:28 +0200
committerMartin Polden <mpolden@mpolden.no>2023-08-21 14:26:36 +0200
commitb1863768b512a7200496f8646fe239d3786d4443 (patch)
treedd21c88008f42506560b0e034769207d751f4cc3 /client/go/internal/cli/cmd/status.go
parent873350caf5e984b5a580e2e0585dfd521eb493c0 (diff)
Support cluster discovery for all target types
Diffstat (limited to 'client/go/internal/cli/cmd/status.go')
-rw-r--r--client/go/internal/cli/cmd/status.go111
1 files changed, 49 insertions, 62 deletions
diff --git a/client/go/internal/cli/cmd/status.go b/client/go/internal/cli/cmd/status.go
index 6570aeff448..7d17cce97fa 100644
--- a/client/go/internal/cli/cmd/status.go
+++ b/client/go/internal/cli/cmd/status.go
@@ -7,6 +7,7 @@ package cmd
import (
"fmt"
"log"
+ "strings"
"time"
"github.com/fatih/color"
@@ -17,48 +18,43 @@ import (
func newStatusCmd(cli *CLI) *cobra.Command {
var waitSecs int
cmd := &cobra.Command{
- Use: "status",
- Short: "Verify that a service is ready to use (query by default)",
- Example: `$ vespa status query`,
- DisableAutoGenTag: true,
- SilenceUsage: true,
- Args: cobra.MaximumNArgs(1),
- RunE: func(cmd *cobra.Command, args []string) error {
- return printServiceStatus(cli, vespa.QueryService, waitSecs)
- },
- }
- cli.bindWaitFlag(cmd, 0, &waitSecs)
- return cmd
-}
-
-func newStatusQueryCmd(cli *CLI) *cobra.Command {
- var waitSecs int
- cmd := &cobra.Command{
- Use: "query",
- Short: "Verify that the query service is ready to use (default)",
- Example: `$ vespa status query`,
- DisableAutoGenTag: true,
- SilenceUsage: true,
- Args: cobra.ExactArgs(0),
- RunE: func(cmd *cobra.Command, args []string) error {
- return printServiceStatus(cli, vespa.QueryService, waitSecs)
+ Use: "status",
+ Aliases: []string{
+ "status container",
+ "status document", // TODO: Remove on Vespa 9
+ "status query", // TODO: Remove on Vespa 9
},
- }
- cli.bindWaitFlag(cmd, 0, &waitSecs)
- return cmd
-}
-
-func newStatusDocumentCmd(cli *CLI) *cobra.Command {
- var waitSecs int
- cmd := &cobra.Command{
- Use: "document",
- Short: "Verify that the document service is ready to use",
- Example: `$ vespa status document`,
+ Short: "Verify that container service(s) are ready to use",
+ Example: `$ vespa status
+$ vespa status --cluster mycluster`,
DisableAutoGenTag: true,
SilenceUsage: true,
- Args: cobra.ExactArgs(0),
+ Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
- return printServiceStatus(cli, vespa.DocumentService, waitSecs)
+ cluster := cli.config.cluster()
+ t, err := cli.target(targetOptions{})
+ if err != nil {
+ return err
+ }
+ if cluster == "" {
+ timeout := time.Duration(waitSecs) * time.Second
+ services, err := t.ContainerServices(timeout)
+ if err != nil {
+ return err
+ }
+ if len(services) == 0 {
+ return errHint(fmt.Errorf("no services exist"), "Deployment may not be ready yet", "Try 'vespa status deployment'")
+ }
+ for _, service := range services {
+ if err := printServiceStatus(service, service.Wait(timeout), cli); err != nil {
+ return err
+ }
+ }
+ return nil
+ } else {
+ s, err := cli.service(t, cluster, 0)
+ return printServiceStatus(s, err, cli)
+ }
},
}
cli.bindWaitFlag(cmd, 0, &waitSecs)
@@ -75,36 +71,27 @@ func newStatusDeployCmd(cli *CLI) *cobra.Command {
SilenceUsage: true,
Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
- return printServiceStatus(cli, vespa.DeployService, waitSecs)
+ t, err := cli.target(targetOptions{})
+ if err != nil {
+ return err
+ }
+ s, err := t.DeployService(0)
+ if err != nil {
+ return err
+ }
+ return printServiceStatus(s, s.Wait(time.Duration(waitSecs)*time.Second), cli)
},
}
cli.bindWaitFlag(cmd, 0, &waitSecs)
return cmd
}
-func printServiceStatus(cli *CLI, name string, waitSecs int) error {
- t, err := cli.target(targetOptions{})
- if err != nil {
- return err
- }
- cluster := cli.config.cluster()
- s, err := cli.service(t, name, 0, cluster, 0)
- if err != nil {
- return err
- }
- // Wait explicitly
- status, err := s.Wait(time.Duration(waitSecs) * time.Second)
- clusterPart := ""
- if cluster != "" {
- clusterPart = fmt.Sprintf(" named %s", color.CyanString(cluster))
- }
- if status/100 == 2 {
- log.Print(s.Description(), clusterPart, " at ", color.CyanString(s.BaseURL), " is ", color.GreenString("ready"))
- } else {
- if err == nil {
- err = fmt.Errorf("status %d", status)
- }
- return fmt.Errorf("%s%s at %s is %s: %w", s.Description(), clusterPart, color.CyanString(s.BaseURL), color.RedString("not ready"), err)
+func printServiceStatus(s *vespa.Service, waitErr error, cli *CLI) error {
+ if waitErr != nil {
+ return waitErr
}
+ desc := s.Description()
+ desc = strings.ToUpper(string(desc[0])) + string(desc[1:])
+ log.Print(desc, " at ", color.CyanString(s.BaseURL), " is ", color.GreenString("ready"))
return nil
}