Skip to content

Commit 9f692bb

Browse files
local cli: better logging for ws stop (#19031)
* local cli: better logging for `ws stop` * Fix `ws start` status logging * Fix hangs * Defer stream closure for status observance
1 parent 110defe commit 9f692bb

File tree

2 files changed

+38
-25
lines changed

2 files changed

+38
-25
lines changed

components/local-app/cmd/workspace-stop.go

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,54 +34,64 @@ var workspaceStopCommand = &cobra.Command{
3434
return err
3535
}
3636

37-
slog.Info("stopping workspace...")
37+
slog.Debug("stopping workspace...")
3838
wsInfo, err := gitpod.Workspaces.StopWorkspace(ctx, connect.NewRequest(&v1.StopWorkspaceRequest{WorkspaceId: workspaceID}))
3939
if err != nil {
4040
return err
4141
}
4242

43-
currentPhase := wsInfo.Msg.GetResult().Status.Instance.Status.Phase
44-
45-
if currentPhase == v1.WorkspaceInstanceStatus_PHASE_STOPPED {
43+
wsPhase := wsInfo.Msg.GetResult().Status.Instance.Status.Phase
44+
switch wsPhase {
45+
case v1.WorkspaceInstanceStatus_PHASE_STOPPED:
4646
slog.Info("workspace is already stopped")
4747
return nil
48-
}
49-
if currentPhase == v1.WorkspaceInstanceStatus_PHASE_STOPPING {
48+
case v1.WorkspaceInstanceStatus_PHASE_STOPPING:
5049
slog.Info("workspace is already stopping")
5150
return nil
5251
}
52+
5353
if stopDontWait {
5454
slog.Info("workspace stopping")
5555
return nil
5656
}
5757

5858
stream, err := gitpod.Workspaces.StreamWorkspaceStatus(ctx, connect.NewRequest(&v1.StreamWorkspaceStatusRequest{WorkspaceId: workspaceID}))
59-
6059
if err != nil {
6160
return err
6261
}
6362

63+
defer stream.Close()
64+
6465
slog.Info("waiting for workspace to stop...")
65-
slog.Info("workspace " + prettyprint.FormatWorkspacePhase(currentPhase))
6666

6767
previousStatus := ""
68-
6968
for stream.Receive() {
7069
msg := stream.Msg()
7170
if msg == nil {
7271
slog.Debug("no message received")
7372
continue
7473
}
7574

76-
if msg.GetResult().Instance.Status.Phase == v1.WorkspaceInstanceStatus_PHASE_STOPPED {
77-
slog.Info("workspace stopped")
75+
wsPhase = msg.GetResult().Instance.Status.Phase
76+
switch wsPhase {
77+
case v1.WorkspaceInstanceStatus_PHASE_STOPPED:
78+
{
79+
slog.Info("workspace stopped")
80+
return nil
81+
}
82+
case v1.WorkspaceInstanceStatus_PHASE_RUNNING:
83+
// Skip reporting the "running" status as it is often the initial state and seems confusing to the user.
84+
// There is some delay between requesting a workspace to stop and it actually stopping, so we don't want
85+
// to report "running" in the meantime.
7886
break
79-
}
80-
81-
currentStatus := prettyprint.FormatWorkspacePhase(msg.GetResult().Instance.Status.Phase)
82-
if currentStatus != previousStatus {
83-
slog.Info("workspace " + currentStatus)
84-
previousStatus = currentStatus
87+
default:
88+
{
89+
currentStatus := prettyprint.FormatWorkspacePhase(wsPhase)
90+
if currentStatus != previousStatus {
91+
slog.Info("workspace status: " + currentStatus)
92+
previousStatus = currentStatus
93+
}
94+
}
8595
}
8696
}
8797

components/local-app/pkg/helper/workspace.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,11 @@ func ObserveWorkspaceUntilStarted(ctx context.Context, clnt *client.Gitpod, work
164164
return ws.Status, nil
165165
}
166166

167+
var wsStatus string
167168
slog.Info("waiting for workspace to start...", "workspaceID", workspaceID)
168169
if HasInstanceStatus(wsInfo.Msg.Result) {
169-
slog.Info("workspace " + prettyprint.FormatWorkspacePhase(wsInfo.Msg.Result.Status.Instance.Status.Phase))
170+
slog.Info("workspace status: " + prettyprint.FormatWorkspacePhase(wsInfo.Msg.Result.Status.Instance.Status.Phase))
171+
wsStatus = prettyprint.FormatWorkspacePhase(wsInfo.Msg.Result.Status.Instance.Status.Phase)
170172
}
171173

172174
var (
@@ -186,7 +188,8 @@ func ObserveWorkspaceUntilStarted(ctx context.Context, clnt *client.Gitpod, work
186188
continue
187189
}
188190

189-
previousStatus := ""
191+
defer stream.Close()
192+
190193
for stream.Receive() {
191194
msg := stream.Msg()
192195
if msg == nil {
@@ -200,13 +203,13 @@ func ObserveWorkspaceUntilStarted(ctx context.Context, clnt *client.Gitpod, work
200203
return ws, nil
201204
}
202205

203-
var currentStatus string
204206
if HasInstanceStatus(wsInfo.Msg.Result) {
205-
currentStatus = prettyprint.FormatWorkspacePhase(wsInfo.Msg.Result.Status.Instance.Status.Phase)
206-
}
207-
if currentStatus != previousStatus {
208-
slog.Info("workspace " + currentStatus)
209-
previousStatus = currentStatus
207+
newWsStatus := prettyprint.FormatWorkspacePhase(ws.Instance.Status.Phase)
208+
// De-duplicate status messages
209+
if wsStatus != newWsStatus {
210+
slog.Info("workspace status: " + newWsStatus)
211+
wsStatus = newWsStatus
212+
}
210213
}
211214
}
212215
if err := stream.Err(); err != nil {

0 commit comments

Comments
 (0)