Skip to content

Commit

Permalink
fix(cli): improve error message for invalid server url (#3587)
Browse files Browse the repository at this point in the history
  • Loading branch information
schoren committed Jan 31, 2024
1 parent 69393fc commit 80bf3d7
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 15 deletions.
18 changes: 14 additions & 4 deletions cli/cmd/middleware.go
Expand Up @@ -29,17 +29,27 @@ func WithResultHandler(runFn RunFn) CobraRunFn {
}
}

func OnError(err error) {
errorMessage := handleErrorMessage(err)
type errorMessageRenderer interface {
Render()
}

fmt.Fprintf(os.Stderr, `
const defaultErrorFormat = `
Version
%s
An error ocurred when executing the command
%s
`, versionText, errorMessage)
`

func OnError(err error) {
errorMessage := handleErrorMessage(err)

if renderer, ok := err.(errorMessageRenderer); ok {
renderer.Render()
} else {
fmt.Fprintf(os.Stderr, defaultErrorFormat, versionText, errorMessage)
}
ExitCLI(1)
}

Expand Down
4 changes: 4 additions & 0 deletions cli/config/config.go
Expand Up @@ -51,6 +51,10 @@ func (c Config) URL() string {
return fmt.Sprintf("%s://%s", c.Scheme, strings.TrimSuffix(c.Endpoint, "/"))
}

func (c Config) FullURL() string {
return fmt.Sprintf("%s%s", c.URL(), c.ServerPath)
}

func (c Config) UI() string {
if c.UIEndpoint != "" && !c.EndpointOverriden {
return fmt.Sprintf("%s/organizations/%s/environments/%s", strings.TrimSuffix(c.UIEndpoint, "/"), c.OrganizationID, c.EnvironmentID)
Expand Down
43 changes: 32 additions & 11 deletions cli/config/configurator.go
Expand Up @@ -17,21 +17,25 @@ import (
type onFinishFn func(context.Context, Config)

type Configurator struct {
resources *resourcemanager.Registry
ui cliUI.UI
onFinish onFinishFn
flags agentConfig.Flags
resources *resourcemanager.Registry
ui cliUI.UI
onFinish onFinishFn
flags agentConfig.Flags
finalServerURL string
}

func NewConfigurator(resources *resourcemanager.Registry) Configurator {
ui := cliUI.DefaultUI
onFinish := func(_ context.Context, _ Config) {
ui.Success("Successfully configured Tracetest CLI")
ui.Finish()
}
flags := agentConfig.Flags{}

return Configurator{resources, ui, onFinish, flags}
return Configurator{
resources: resources,
ui: ui,
onFinish: func(_ context.Context, _ Config) {
ui.Success("Successfully configured Tracetest CLI")
ui.Finish()
},
flags: agentConfig.Flags{},
}
}

func (c Configurator) WithOnFinish(onFinish onFinishFn) Configurator {
Expand All @@ -42,6 +46,7 @@ func (c Configurator) WithOnFinish(onFinish onFinishFn) Configurator {
func (c Configurator) Start(ctx context.Context, prev *Config, flags agentConfig.Flags) error {
c.flags = flags
serverURL, err := c.getServerURL(prev, flags)
c.finalServerURL = serverURL
if err != nil {
return err
}
Expand Down Expand Up @@ -113,11 +118,27 @@ func (c Configurator) createConfig(serverURL string) (Config, error) {
}, nil
}

type invalidServerErr struct {
ui cliUI.UI
serverURL string
parent error
}

func (e invalidServerErr) Error() string {
return fmt.Errorf("cannot reach %s: %w", e.serverURL, e.parent).Error()
}

func (e invalidServerErr) Render() {
msg := fmt.Sprintf(`Cannot reach "%s". Please verify the url and enter it again.`, e.serverURL)
e.ui.Error(msg)
}

func (c Configurator) populateConfigWithVersionInfo(ctx context.Context, cfg Config) (_ Config, _ error, isOSS bool) {
client := GetAPIClient(cfg)
version, err := getVersionMetadata(ctx, client)
if err != nil {
return Config{}, fmt.Errorf("cannot get version metadata: %w", err), false
err = invalidServerErr{c.ui, c.finalServerURL, fmt.Errorf("cannot get version metadata: %w", err)}
return Config{}, err, false
}

serverType := version.GetType()
Expand Down

0 comments on commit 80bf3d7

Please sign in to comment.