summaryrefslogtreecommitdiffstats
path: root/client/go/cmd/status.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/go/cmd/status.go')
-rw-r--r--client/go/cmd/status.go122
1 files changed, 77 insertions, 45 deletions
diff --git a/client/go/cmd/status.go b/client/go/cmd/status.go
index 93316b7b6de..1eacff56354 100644
--- a/client/go/cmd/status.go
+++ b/client/go/cmd/status.go
@@ -5,61 +5,93 @@
package cmd
import (
+ "fmt"
+ "log"
+ "strconv"
+ "time"
+
+ "github.com/fatih/color"
"github.com/spf13/cobra"
"github.com/vespa-engine/vespa/client/go/vespa"
)
-func init() {
- rootCmd.AddCommand(statusCmd)
- statusCmd.AddCommand(statusQueryCmd)
- statusCmd.AddCommand(statusDocumentCmd)
- statusCmd.AddCommand(statusDeployCmd)
+func newStatusCmd(cli *CLI) *cobra.Command {
+ return &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)
+ },
+ }
}
-var statusCmd = &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 waitForService(vespa.QueryService, 0)
- },
+func newStatusQueryCmd(cli *CLI) *cobra.Command {
+ return &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)
+ },
+ }
}
-var statusQueryCmd = &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 waitForService(vespa.QueryService, 0)
- },
+func newStatusDocumentCmd(cli *CLI) *cobra.Command {
+ return &cobra.Command{
+ Use: "document",
+ Short: "Verify that the document service is ready to use",
+ Example: `$ vespa status document`,
+ DisableAutoGenTag: true,
+ SilenceUsage: true,
+ Args: cobra.ExactArgs(0),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ return printServiceStatus(cli, vespa.DocumentService)
+ },
+ }
}
-var statusDocumentCmd = &cobra.Command{
- Use: "document",
- Short: "Verify that the document service is ready to use",
- Example: `$ vespa status document`,
- DisableAutoGenTag: true,
- SilenceUsage: true,
- Args: cobra.ExactArgs(0),
- RunE: func(cmd *cobra.Command, args []string) error {
- return waitForService(vespa.DocumentService, 0)
- },
+func newStatusDeployCmd(cli *CLI) *cobra.Command {
+ return &cobra.Command{
+ Use: "deploy",
+ Short: "Verify that the deploy service is ready to use",
+ Example: `$ vespa status deploy`,
+ DisableAutoGenTag: true,
+ SilenceUsage: true,
+ Args: cobra.ExactArgs(0),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ return printServiceStatus(cli, vespa.DeployService)
+ },
+ }
}
-var statusDeployCmd = &cobra.Command{
- Use: "deploy",
- Short: "Verify that the deploy service is ready to use",
- Example: `$ vespa status deploy`,
- DisableAutoGenTag: true,
- SilenceUsage: true,
- Args: cobra.ExactArgs(0),
- RunE: func(cmd *cobra.Command, args []string) error {
- return waitForService(vespa.DeployService, 0)
- },
+func printServiceStatus(cli *CLI, name string) error {
+ t, err := cli.target(targetOptions{})
+ if err != nil {
+ return err
+ }
+ timeout := time.Duration(cli.flags.waitSecs) * time.Second
+ if timeout > 0 {
+ log.Printf("Waiting up to %s %s for service to become ready ...", color.CyanString(strconv.Itoa(cli.flags.waitSecs)), color.CyanString("seconds"))
+ }
+ s, err := t.Service(name, timeout, 0, "")
+ if err != nil {
+ return err
+ }
+ status, err := s.Wait(timeout)
+ if status/100 == 2 {
+ log.Print(s.Description(), " at ", color.CyanString(s.BaseURL), " is ", color.GreenString("ready"))
+ } else {
+ if err == nil {
+ err = fmt.Errorf("status %d", status)
+ }
+ return fmt.Errorf("%s at %s is %s: %w", s.Description(), color.CyanString(s.BaseURL), color.RedString("not ready"), err)
+ }
+ return nil
}