Skip to content

Commit 8b6b98f

Browse files
committed
add progress ui
1 parent 519fd26 commit 8b6b98f

File tree

15 files changed

+149
-523
lines changed

15 files changed

+149
-523
lines changed

components/gitpod-protocol/java/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ dependencies {
1515
implementation group: 'org.eclipse.lsp4j', name: 'org.eclipse.lsp4j.jsonrpc', version: '0.12.0'
1616
implementation group: 'org.eclipse.lsp4j', name: 'org.eclipse.lsp4j.websocket', version: '0.12.0'
1717
compileOnly group: 'javax.websocket', name: 'javax.websocket-api', version: '1.1'
18-
implementation group: 'org.glassfish.tyrus.bundles', name: 'tyrus-standalone-client', version: '1.18'
18+
implementation("org.eclipse.jetty.websocket:javax-websocket-client-impl:9.4.44.v20210927")
1919
}
2020

2121
application {

components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/ConnectionHelper.java

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,64 +4,40 @@
44

55
package io.gitpod.gitpodprotocol.api;
66

7+
import org.eclipse.lsp4j.jsonrpc.Launcher;
8+
import org.eclipse.lsp4j.websocket.WebSocketEndpoint;
9+
import org.eclipse.lsp4j.websocket.WebSocketLauncherBuilder;
10+
11+
import javax.websocket.*;
712
import java.io.IOException;
813
import java.net.URI;
914
import java.util.Arrays;
1015
import java.util.Collection;
1116
import java.util.List;
1217
import java.util.Map;
1318

14-
import javax.websocket.ClientEndpointConfig;
15-
import javax.websocket.ContainerProvider;
16-
import javax.websocket.DeploymentException;
17-
import javax.websocket.Session;
18-
import javax.websocket.WebSocketContainer;
19-
20-
import org.eclipse.lsp4j.jsonrpc.Launcher;
21-
import org.eclipse.lsp4j.websocket.WebSocketEndpoint;
22-
19+
// TODO(ak) rename
2320
public class ConnectionHelper {
2421

25-
private Session session;
26-
27-
public GitpodClient connect(final String uri, final String origin, final String token)
22+
public Session connect(final String apiUrl, final String origin, final String token, String userAgent, String clientVersion, GitpodClient client)
2823
throws DeploymentException, IOException {
29-
final GitpodClientImpl gitpodClient = new GitpodClientImpl();
30-
return connect(uri, origin, token, gitpodClient);
31-
}
32-
33-
public GitpodClient connect(final String uri, final String origin, final String token, GitpodClient gitpodClient)
34-
throws DeploymentException, IOException {
35-
36-
final WebSocketEndpoint<GitpodServer> webSocketEndpoint = new WebSocketEndpoint<GitpodServer>() {
24+
return ContainerProvider.getWebSocketContainer().connectToServer(new WebSocketEndpoint<GitpodServer>() {
3725
@Override
3826
protected void configure(final Launcher.Builder<GitpodServer> builder) {
39-
builder.setLocalService(gitpodClient).setRemoteInterface(GitpodServer.class);
27+
builder.setLocalService(client).setRemoteInterface(GitpodServer.class);
4028
}
41-
4229
@Override
4330
protected void connect(final Collection<Object> localServices, final GitpodServer remoteProxy) {
44-
localServices.forEach(s -> ((GitpodClient) s).connect(remoteProxy));
31+
client.connect(remoteProxy);
4532
}
46-
};
47-
48-
final ClientEndpointConfig.Configurator configurator = new ClientEndpointConfig.Configurator() {
33+
}, ClientEndpointConfig.Builder.create().configurator(new ClientEndpointConfig.Configurator() {
4934
@Override
5035
public void beforeRequest(final Map<String, List<String>> headers) {
5136
headers.put("Origin", Arrays.asList(origin));
5237
headers.put("Authorization", Arrays.asList("Bearer " + token));
38+
headers.put("User-Agent", Arrays.asList(userAgent));
39+
headers.put("X-Client-Version", Arrays.asList(clientVersion));
5340
}
54-
};
55-
final ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create()
56-
.configurator(configurator).build();
57-
final WebSocketContainer webSocketContainer = ContainerProvider.getWebSocketContainer();
58-
this.session = webSocketContainer.connectToServer(webSocketEndpoint, clientEndpointConfig, URI.create(uri));
59-
return gitpodClient;
60-
}
61-
62-
public void close() throws IOException {
63-
if (this.session != null && this.session.isOpen()) {
64-
this.session.close();
65-
}
41+
}).build(), URI.create(apiUrl));
6642
}
6743
}

components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/GitpodClient.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,23 @@
88

99
import io.gitpod.gitpodprotocol.api.entities.WorkspaceInstance;
1010

11-
public interface GitpodClient {
12-
void connect(GitpodServer server);
11+
public class GitpodClient {
1312

14-
GitpodServer server();
13+
private GitpodServer server;
14+
15+
public void connect(GitpodServer server) {
16+
this.server = server;
17+
}
18+
19+
public GitpodServer getServer() {
20+
if (this.server == null) {
21+
throw new IllegalStateException("not connected");
22+
}
23+
return this.server;
24+
}
1525

1626
@JsonNotification
17-
void onInstanceUpdate(WorkspaceInstance instance);
27+
public void onInstanceUpdate(WorkspaceInstance instance) {
28+
29+
}
1830
}

components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/GitpodClientImpl.java

Lines changed: 0 additions & 30 deletions
This file was deleted.

components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/testclient/TestClient.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,30 @@
1010
import io.gitpod.gitpodprotocol.api.entities.SendHeartBeatOptions;
1111
import io.gitpod.gitpodprotocol.api.entities.User;
1212

13+
import javax.websocket.Session;
14+
1315
public class TestClient {
1416
public static void main(String[] args) throws Exception {
1517
String uri = "wss://gitpod.io/api/v1";
1618
String token = "CHANGE-ME";
1719
String origin = "https://CHANGE-ME.gitpod.io/";
1820

21+
Session session = null;
1922
ConnectionHelper conn = new ConnectionHelper();
2023
try {
21-
GitpodClient gitpodClient = conn.connect(uri, origin, token);
22-
GitpodServer gitpodServer = gitpodClient.server();
24+
GitpodClient client = new GitpodClient();
25+
session = conn.connect(uri, origin, token, "Test", "Test", client);
26+
GitpodServer gitpodServer = client.getServer();
2327
User user = gitpodServer.getLoggedInUser().join();
2428
System.out.println("logged in user:" + user);
2529

2630
Void result = gitpodServer
2731
.sendHeartBeat(new SendHeartBeatOptions("CHANGE-ME", false)).join();
2832
System.out.println("send heart beat:" + result);
2933
} finally {
30-
conn.close();
34+
if (session != null) {
35+
session.close();
36+
}
3137
}
3238
}
3339
}

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/ide/jetbrains/backend/services/HeartbeatService.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.intellij.openapi.Disposable
88
import com.intellij.openapi.components.Service
99
import com.intellij.openapi.diagnostic.logger
1010
import io.gitpod.gitpodprotocol.api.ConnectionHelper
11+
import io.gitpod.gitpodprotocol.api.GitpodClient
1112
import io.gitpod.gitpodprotocol.api.entities.SendHeartBeatOptions
1213
import io.gitpod.ide.jetbrains.backend.services.ControllerStatusService.ControllerStatus
1314
import io.gitpod.ide.jetbrains.backend.utils.Retrier.retry
@@ -92,8 +93,8 @@ class HeartbeatService : Disposable {
9293
@Suppress("TooGenericExceptionCaught") // Unsure what exceptions might be thrown
9394
try {
9495
heartbeatClient.get()!!(wasClosed).await()
95-
logger.info("Heartbeat sent with wasClosed=$wasClosed")
9696
} catch (e: Exception) {
97+
// TODO(ak) implement proper reconnecting web socket
9798
// If connection fails for some reason,
9899
// remove the reference to the existing server.
99100
heartbeatClient.set(null)
@@ -111,14 +112,19 @@ class HeartbeatService : Disposable {
111112
logger.info("Creating HeartbeatClient")
112113
val supervisorInfo = SupervisorInfoService.fetch()
113114

114-
val server = ConnectionHelper().connect(
115+
val client = GitpodClient()
116+
ConnectionHelper().connect(
115117
"wss://${supervisorInfo.host.split("//").last()}/api/v1",
116118
supervisorInfo.workspaceUrl,
117-
supervisorInfo.authToken
118-
).server()
119+
supervisorInfo.authToken,
120+
"jetbrains-backend-plugin",
121+
// TODO(ak) read from properties
122+
"1.0-SNAPSHOT",
123+
client
124+
)
119125

120126
return { wasClosed: Boolean ->
121-
server.sendHeartBeat(SendHeartBeatOptions(supervisorInfo.instanceId, wasClosed))
127+
client.server.sendHeartBeat(SendHeartBeatOptions(supervisorInfo.instanceId, wasClosed))
122128
}
123129
}
124130

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.gradle
22
.idea
33
build
4+
bin

components/ide/jetbrains/gateway-plugin/.run/Run IDE with Plugin.run.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<option name="taskNames">
1313
<list>
1414
<option value="runIde" />
15-
<option value="--args='jetbrains-gateway://connect#gitpod=%7B%22gitpodHost%22%3A%22ak-jb-gateway-plugin.staging.gitpod-dev.com%22%2C%22workspaceId%22%3A%22blue-antelope-j2hcw46v%22%7D'" />
15+
<option value="--args='jetbrains-gateway://connect#gitpod=%7B%22gitpodHost%22%3A%22ak-jb-gateway-plugin.staging.gitpod-dev.com%22%2C%22workspaceId%22%3A%22black-boar-q0wk5q33%22%7D'" />
1616
</list>
1717
</option>
1818
<option name="vmOptions" value="" />

components/ide/jetbrains/gateway-plugin/bin/main/META-INF/plugin.xml

Lines changed: 0 additions & 26 deletions
This file was deleted.

components/ide/jetbrains/gateway-plugin/bin/main/io/gitpod/jetbrains/auth/GitpodAuthCallbackHandler.kt

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)