Skip to content

Commit ef17d55

Browse files
committed
address feedback
1 parent b9c02d9 commit ef17d55

File tree

3 files changed

+44
-19
lines changed

3 files changed

+44
-19
lines changed

components/dashboard/src/service/json-rpc-workspace-client.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { WorkspaceService } from "@gitpod/public-api/lib/gitpod/experimental/v2/
1010
import {
1111
GetWorkspaceRequest,
1212
GetWorkspaceResponse,
13-
WatchWorkspaceRequest,
14-
WatchWorkspaceResponse,
13+
WatchWorkspaceStatusRequest,
14+
WatchWorkspaceStatusResponse,
1515
} from "@gitpod/public-api/lib/gitpod/experimental/v2/workspace_pb";
1616
import { converter } from "./public-api";
1717
import { getGitpodService } from "./service";
@@ -30,10 +30,10 @@ export class JsonRpcWorkspaceClient implements PromiseClient<typeof WorkspaceSer
3030
return result;
3131
}
3232

33-
async *watchWorkspace(
34-
request: PartialMessage<WatchWorkspaceRequest>,
33+
async *watchWorkspaceStatus(
34+
request: PartialMessage<WatchWorkspaceStatusRequest>,
3535
options?: CallOptions,
36-
): AsyncIterable<WatchWorkspaceResponse> {
36+
): AsyncIterable<WatchWorkspaceStatusResponse> {
3737
if (!options?.signal) {
3838
throw new ConnectError("signal is required", Code.InvalidArgument);
3939
}
@@ -48,15 +48,27 @@ export class JsonRpcWorkspaceClient implements PromiseClient<typeof WorkspaceSer
4848
},
4949
{ signal: options.signal },
5050
);
51+
if (request.workspaceId) {
52+
const resp = await this.getWorkspace({ id: request.workspaceId });
53+
if (resp.item?.status) {
54+
const response = new WatchWorkspaceStatusResponse();
55+
response.status = resp.item.status;
56+
yield response;
57+
}
58+
}
5159
for await (const item of it) {
5260
if (!item) {
5361
continue;
5462
}
55-
if (request.id && item.workspaceId !== request.id) {
63+
if (request.workspaceId && item.workspaceId !== request.workspaceId) {
64+
continue;
65+
}
66+
const status = converter.toWorkspace(item).status;
67+
if (!status) {
5668
continue;
5769
}
58-
const response = new WatchWorkspaceResponse();
59-
response.item = converter.toWorkspace(item);
70+
const response = new WatchWorkspaceStatusResponse();
71+
response.status = status;
6072
yield response;
6173
}
6274
}

components/server/src/api/workspace-service-api.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import { WorkspaceService as WorkspaceServiceInterface } from "@gitpod/public-ap
99
import {
1010
GetWorkspaceRequest,
1111
GetWorkspaceResponse,
12-
WatchWorkspaceRequest,
13-
WatchWorkspaceResponse,
12+
WatchWorkspaceStatusRequest,
13+
WatchWorkspaceStatusResponse,
1414
} from "@gitpod/public-api/lib/gitpod/experimental/v2/workspace_pb";
1515

1616
import { inject, injectable } from "inversify";
@@ -32,19 +32,33 @@ export class WorkspaceServiceAPI implements ServiceImpl<typeof WorkspaceServiceI
3232
return response;
3333
}
3434

35-
async *watchWorkspace(req: WatchWorkspaceRequest, context: HandlerContext): AsyncIterable<WatchWorkspaceResponse> {
36-
// TODO: if id provided, send init one
37-
// TODO: will we sent stale status?
38-
const it = this.workspaceService.watchWorkspaces(context.user.id, { signal: context.signal });
35+
async *watchWorkspaceStatus(
36+
req: WatchWorkspaceStatusRequest,
37+
context: HandlerContext,
38+
): AsyncIterable<WatchWorkspaceStatusResponse> {
39+
if (req.workspaceId) {
40+
const instance = await this.workspaceService.getCurrentInstance(context.user.id, req.workspaceId);
41+
const status = this.apiConverter.toWorkspace(instance).status;
42+
if (status) {
43+
const response = new WatchWorkspaceStatusResponse();
44+
response.status = status;
45+
yield response;
46+
}
47+
}
48+
const it = this.workspaceService.watchWorkspaceStatus(context.user.id, { signal: context.signal });
3949
for await (const instance of it) {
4050
if (!instance) {
4151
continue;
4252
}
43-
if (req.id && instance.workspaceId !== req.id) {
53+
if (req.workspaceId && instance.workspaceId !== req.workspaceId) {
54+
continue;
55+
}
56+
const status = this.apiConverter.toWorkspace(instance).status;
57+
if (!status) {
4458
continue;
4559
}
46-
const response = new WatchWorkspaceResponse();
47-
response.item = this.apiConverter.toWorkspace(instance);
60+
const response = new WatchWorkspaceStatusResponse();
61+
response.status = status;
4862
yield response;
4963
}
5064
}

components/server/src/workspace/workspace-service.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -734,8 +734,7 @@ export class WorkspaceService {
734734
return urls;
735735
}
736736

737-
public watchWorkspaces(userId: string, opts: { signal: AbortSignal }) {
738-
// this.doGetWorkspace
737+
public watchWorkspaceStatus(userId: string, opts: { signal: AbortSignal }) {
739738
return generateAsyncGenerator<WorkspaceInstance>((sink) => {
740739
const dispose = this.subscriber.listenForWorkspaceInstanceUpdates(userId, (_ctx, instance) => {
741740
sink.next(instance);

0 commit comments

Comments
 (0)