Skip to content

Commit 1a4c6f1

Browse files
author
Andrea Falzetti
committed
add outcome to event
1 parent a91fe20 commit 1a4c6f1

File tree

2 files changed

+50
-39
lines changed

2 files changed

+50
-39
lines changed

components/gitpod-cli/cmd/rebuild.go

+29-28
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,15 @@ func TerminateExistingContainer(ctx context.Context) error {
4949
return nil
5050
}
5151

52-
func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClient, event *utils.EventTracker) error {
52+
func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClient, event *utils.EventTracker) (string, error) {
5353
wsInfo, err := supervisorClient.Info.WorkspaceInfo(ctx, &api.WorkspaceInfoRequest{})
5454
if err != nil {
55-
event.Set("ErrorCode", utils.SystemErrorCode)
56-
return err
55+
return utils.Outcome_SystemErr, err
5756
}
5857

5958
tmpDir, err := os.MkdirTemp("", "gp-rebuild-*")
6059
if err != nil {
61-
event.Set("ErrorCode", utils.SystemErrorCode)
62-
return err
60+
return utils.Outcome_SystemErr, err
6361
}
6462
defer os.RemoveAll(tmpDir)
6563

@@ -70,7 +68,7 @@ func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClie
7068
fmt.Println("For help check out the reference page:")
7169
fmt.Println("https://www.gitpod.io/docs/references/gitpod-yml#gitpodyml")
7270
event.Set("ErrorCode", utils.RebuildErrorCode_MalformedGitpodYaml)
73-
return err
71+
return utils.Outcome_UserErr, err
7472
}
7573

7674
if gitpodConfig == nil {
@@ -81,7 +79,7 @@ func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClie
8179
fmt.Println("Alternatively, check out the following docs for getting started configuring your project")
8280
fmt.Println("https://www.gitpod.io/docs/configure#configure-gitpod")
8381
event.Set("ErrorCode", utils.RebuildErrorCode_MissingGitpodYaml)
84-
return nil
82+
return utils.Outcome_UserErr, nil
8583
}
8684

8785
var baseimage string
@@ -95,13 +93,11 @@ func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClie
9593

9694
if _, err := os.Stat(dockerfilePath); os.IsNotExist(err) {
9795
fmt.Println("Your .gitpod.yml points to a Dockerfile that doesn't exist: " + dockerfilePath)
98-
event.Set("ErrorCode", utils.RebuildErrorCode_DockerfileNotFound).Send(ctx)
99-
return err
96+
return utils.Outcome_UserErr, err
10097
}
10198
dockerfile, err := os.ReadFile(dockerfilePath)
10299
if err != nil {
103-
event.Set("ErrorCode", utils.RebuildErrorCode_DockerfileCannotRead)
104-
return err
100+
return utils.Outcome_SystemErr, err
105101
}
106102
if string(dockerfile) == "" {
107103
fmt.Println("Your Gitpod's Dockerfile is empty")
@@ -110,14 +106,13 @@ func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClie
110106
fmt.Println("https://www.gitpod.io/docs/configure/workspaces/workspace-image#use-a-custom-dockerfile")
111107
fmt.Println("")
112108
fmt.Println("Once you configure your Dockerfile, re-run this command to validate your changes")
113-
event.Set("ErrorCode", utils.RebuildErrorCode_DockerfileEmpty)
114-
return nil
109+
return utils.Outcome_UserErr, nil
115110
}
116111
baseimage = "\n" + string(dockerfile) + "\n"
117112
default:
118113
fmt.Println("Check your .gitpod.yml and make sure the image property is configured correctly")
119114
event.Set("ErrorCode", utils.RebuildErrorCode_MalformedGitpodYaml)
120-
return err
115+
return utils.Outcome_UserErr, nil
121116
}
122117

123118
if baseimage == "" {
@@ -126,23 +121,22 @@ func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClie
126121
fmt.Println("")
127122
fmt.Println("https://www.gitpod.io/docs/configure/workspaces/workspace-image#use-a-public-docker-image")
128123
event.Set("ErrorCode", utils.RebuildErrorCode_NoCustomImage)
129-
return nil
124+
return utils.Outcome_UserErr, nil
130125
}
131126

132127
tmpDockerfile := filepath.Join(tmpDir, "Dockerfile")
133128

134129
err = os.WriteFile(tmpDockerfile, []byte(baseimage), 0644)
135130
if err != nil {
136131
fmt.Println("Could not write the temporary Dockerfile")
137-
event.Set("ErrorCode", utils.RebuildErrorCode_DockerfileCannotWrite)
138-
return err
132+
return utils.Outcome_SystemErr, err
139133
}
140134

141135
dockerPath, err := exec.LookPath("docker")
142136
if err != nil {
143137
fmt.Println("Docker is not installed in your workspace")
144138
event.Set("ErrorCode", utils.RebuildErrorCode_DockerNotFound)
145-
return err
139+
return utils.Outcome_SystemErr, err
146140
}
147141

148142
tag := "gp-rebuild-temp-build"
@@ -155,20 +149,19 @@ func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClie
155149
err = dockerCmd.Run()
156150
if _, ok := err.(*exec.ExitError); ok {
157151
fmt.Println("Image Build Failed")
158-
event.Set("ErrorCode", utils.RebuildErrorCode_DockerBuildFailed)
159-
return nil
152+
event.Set("ErrorCode", utils.RebuildErrorCode_ImageBuildFailed)
153+
return utils.Outcome_UserErr, nil
160154
} else if err != nil {
161155
fmt.Println("Docker error")
162156
event.Set("ErrorCode", utils.RebuildErrorCode_DockerErr)
163-
return err
157+
return utils.Outcome_SystemErr, err
164158
}
165159
ImageBuildDuration := time.Since(imageBuildStartTime).Milliseconds()
166160
event.Set("ImageBuildDuration", ImageBuildDuration)
167161

168162
err = TerminateExistingContainer(ctx)
169163
if err != nil {
170-
event.Set("ErrorCode", utils.SystemErrorCode)
171-
return err
164+
return utils.Outcome_SystemErr, err
172165
}
173166

174167
welcomeMessage := strings.Join([]string{
@@ -209,12 +202,12 @@ func runRebuild(ctx context.Context, supervisorClient *supervisor.SupervisorClie
209202
if err != nil {
210203
fmt.Println("Failed to run docker container")
211204
event.Set("ErrorCode", utils.RebuildErrorCode_DockerRunFailed)
212-
return err
205+
return utils.Outcome_UserErr, err
213206
}
214207

215208
_ = dockerRunCmd.Wait()
216209

217-
return nil
210+
return utils.Outcome_Success, nil
218211
}
219212

220213
var buildCmd = &cobra.Command{
@@ -240,10 +233,18 @@ var buildCmd = &cobra.Command{
240233
Command: cmd.Name(),
241234
})
242235

243-
err = runRebuild(ctx, supervisorClient, event)
244-
if err != nil && event.Data.ErrorCode == "" {
245-
event.Set("ErrorCode", utils.SystemErrorCode)
236+
outcome, err := runRebuild(ctx, supervisorClient, event)
237+
event.Set("Outcome", outcome)
238+
239+
if outcome != utils.Outcome_Success && event.Data.ErrorCode == "" {
240+
switch outcome {
241+
case utils.Outcome_UserErr:
242+
event.Set("ErrorCode", utils.UserErrorCode)
243+
case utils.Outcome_SystemErr:
244+
event.Set("ErrorCode", utils.SystemErrorCode)
245+
}
246246
}
247+
247248
event.Send(ctx)
248249

249250
if err != nil {

components/gitpod-cli/pkg/utils/trackEvent.go

+21-11
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,29 @@ import (
1515
log "github.com/sirupsen/logrus"
1616
)
1717

18+
const (
19+
Outcome_Success = "success"
20+
Outcome_UserErr = "user_error"
21+
Outcome_SystemErr = "system_error"
22+
)
23+
1824
const (
1925
// System
2026
SystemErrorCode = "system_error"
27+
UserErrorCode = "user_error"
2128

2229
// Rebuild
23-
RebuildErrorCode_DockerBuildFailed = "rebuild_docker_build_failed"
24-
RebuildErrorCode_DockerErr = "rebuild_docker_err"
25-
RebuildErrorCode_DockerfileCannotRead = "rebuild_dockerfile_cannot_read"
26-
RebuildErrorCode_DockerfileCannotWrite = "rebuild_dockerfile_cannot_write"
27-
RebuildErrorCode_DockerfileEmpty = "rebuild_dockerfile_empty"
28-
RebuildErrorCode_DockerfileNotFound = "rebuild_dockerfile_not_found"
29-
RebuildErrorCode_DockerNotFound = "rebuild_docker_not_found"
30-
RebuildErrorCode_DockerRunFailed = "rebuild_docker_run_failed"
31-
RebuildErrorCode_MalformedGitpodYaml = "rebuild_malformed_gitpod_yaml"
32-
RebuildErrorCode_MissingGitpodYaml = "rebuild_missing_gitpod_yaml"
33-
RebuildErrorCode_NoCustomImage = "rebuild_no_custom_image"
30+
RebuildErrorCode_ImageBuildFailed = "rebuild_image_build_failed"
31+
RebuildErrorCode_DockerErr = "rebuild_docker_err"
32+
// RebuildErrorCode_DockerfileCannotRead = "rebuild_dockerfile_cannot_read"
33+
// RebuildErrorCode_DockerfileCannotWrite = "rebuild_dockerfile_cannot_write"
34+
// RebuildErrorCode_DockerfileEmpty = "rebuild_dockerfile_empty"
35+
// RebuildErrorCode_DockerfileNotFound = "rebuild_dockerfile_not_found"
36+
RebuildErrorCode_DockerNotFound = "rebuild_docker_not_found"
37+
RebuildErrorCode_DockerRunFailed = "rebuild_docker_run_failed"
38+
RebuildErrorCode_MalformedGitpodYaml = "rebuild_malformed_gitpod_yaml"
39+
RebuildErrorCode_MissingGitpodYaml = "rebuild_missing_gitpod_yaml"
40+
RebuildErrorCode_NoCustomImage = "rebuild_no_custom_image"
3441
)
3542

3643
type TrackCommandUsageParams struct {
@@ -41,6 +48,7 @@ type TrackCommandUsageParams struct {
4148
InstanceId string `json:"instanceId,omitempty"`
4249
Timestamp int64 `json:"timestamp,omitempty"`
4350
ImageBuildDuration int64 `json:"imageBuildDuration,omitempty"`
51+
Outcome string `json:"outcome,omitempty"`
4452
}
4553

4654
type EventTracker struct {
@@ -96,6 +104,8 @@ func (t *EventTracker) Set(key string, value interface{}) *EventTracker {
96104
t.Data.InstanceId = value.(string)
97105
case "ImageBuildDuration":
98106
t.Data.ImageBuildDuration = value.(int64)
107+
case "Outcome":
108+
t.Data.Outcome = value.(string)
99109
}
100110
return t
101111
}

0 commit comments

Comments
 (0)