Skip to content

Commit 80bf3d7

Browse files
authored
fix(cli): improve error message for invalid server url (#3587)
1 parent 69393fc commit 80bf3d7

File tree

3 files changed

+50
-15
lines changed

3 files changed

+50
-15
lines changed

cli/cmd/middleware.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,27 @@ func WithResultHandler(runFn RunFn) CobraRunFn {
2929
}
3030
}
3131

32-
func OnError(err error) {
33-
errorMessage := handleErrorMessage(err)
32+
type errorMessageRenderer interface {
33+
Render()
34+
}
3435

35-
fmt.Fprintf(os.Stderr, `
36+
const defaultErrorFormat = `
3637
Version
3738
%s
3839
3940
An error ocurred when executing the command
4041
4142
%s
42-
`, versionText, errorMessage)
43+
`
44+
45+
func OnError(err error) {
46+
errorMessage := handleErrorMessage(err)
47+
48+
if renderer, ok := err.(errorMessageRenderer); ok {
49+
renderer.Render()
50+
} else {
51+
fmt.Fprintf(os.Stderr, defaultErrorFormat, versionText, errorMessage)
52+
}
4353
ExitCLI(1)
4454
}
4555

cli/config/config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ func (c Config) URL() string {
5151
return fmt.Sprintf("%s://%s", c.Scheme, strings.TrimSuffix(c.Endpoint, "/"))
5252
}
5353

54+
func (c Config) FullURL() string {
55+
return fmt.Sprintf("%s%s", c.URL(), c.ServerPath)
56+
}
57+
5458
func (c Config) UI() string {
5559
if c.UIEndpoint != "" && !c.EndpointOverriden {
5660
return fmt.Sprintf("%s/organizations/%s/environments/%s", strings.TrimSuffix(c.UIEndpoint, "/"), c.OrganizationID, c.EnvironmentID)

cli/config/configurator.go

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,25 @@ import (
1717
type onFinishFn func(context.Context, Config)
1818

1919
type Configurator struct {
20-
resources *resourcemanager.Registry
21-
ui cliUI.UI
22-
onFinish onFinishFn
23-
flags agentConfig.Flags
20+
resources *resourcemanager.Registry
21+
ui cliUI.UI
22+
onFinish onFinishFn
23+
flags agentConfig.Flags
24+
finalServerURL string
2425
}
2526

2627
func NewConfigurator(resources *resourcemanager.Registry) Configurator {
2728
ui := cliUI.DefaultUI
28-
onFinish := func(_ context.Context, _ Config) {
29-
ui.Success("Successfully configured Tracetest CLI")
30-
ui.Finish()
31-
}
32-
flags := agentConfig.Flags{}
3329

34-
return Configurator{resources, ui, onFinish, flags}
30+
return Configurator{
31+
resources: resources,
32+
ui: ui,
33+
onFinish: func(_ context.Context, _ Config) {
34+
ui.Success("Successfully configured Tracetest CLI")
35+
ui.Finish()
36+
},
37+
flags: agentConfig.Flags{},
38+
}
3539
}
3640

3741
func (c Configurator) WithOnFinish(onFinish onFinishFn) Configurator {
@@ -42,6 +46,7 @@ func (c Configurator) WithOnFinish(onFinish onFinishFn) Configurator {
4246
func (c Configurator) Start(ctx context.Context, prev *Config, flags agentConfig.Flags) error {
4347
c.flags = flags
4448
serverURL, err := c.getServerURL(prev, flags)
49+
c.finalServerURL = serverURL
4550
if err != nil {
4651
return err
4752
}
@@ -113,11 +118,27 @@ func (c Configurator) createConfig(serverURL string) (Config, error) {
113118
}, nil
114119
}
115120

121+
type invalidServerErr struct {
122+
ui cliUI.UI
123+
serverURL string
124+
parent error
125+
}
126+
127+
func (e invalidServerErr) Error() string {
128+
return fmt.Errorf("cannot reach %s: %w", e.serverURL, e.parent).Error()
129+
}
130+
131+
func (e invalidServerErr) Render() {
132+
msg := fmt.Sprintf(`Cannot reach "%s". Please verify the url and enter it again.`, e.serverURL)
133+
e.ui.Error(msg)
134+
}
135+
116136
func (c Configurator) populateConfigWithVersionInfo(ctx context.Context, cfg Config) (_ Config, _ error, isOSS bool) {
117137
client := GetAPIClient(cfg)
118138
version, err := getVersionMetadata(ctx, client)
119139
if err != nil {
120-
return Config{}, fmt.Errorf("cannot get version metadata: %w", err), false
140+
err = invalidServerErr{c.ui, c.finalServerURL, fmt.Errorf("cannot get version metadata: %w", err)}
141+
return Config{}, err, false
121142
}
122143

123144
serverType := version.GetType()

0 commit comments

Comments
 (0)