Skip to content

Commit 2cb85e3

Browse files
committed
(GH-136) Add UI to extension client to show load status of server
The client will now query the language server periodically after connecting. This query is for the load status which is shown in the UI of the extension status bar item, until it is fully loaded. Once loaded, the puppet version is displayed.
1 parent b6e156c commit 2cb85e3

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

client/src/commands/puppetcommands.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ export function setupPuppetCommands(langID:string, connManager:IConnectionManage
1919
ctx.subscriptions.push(vscode.commands.registerCommand(messages.PuppetCommandStrings.PuppetNodeGraphToTheSideCommandId,
2020
uri => showNodeGraph(uri, true))
2121
);
22-
22+
23+
ctx.subscriptions.push(vscode.commands.registerCommand(messages.PuppetCommandStrings.PuppetShowConnectionMenuCommandId,
24+
() => { connManager.showConnectionMenu(); }
25+
));
26+
2327
const contentProvider = new PuppetNodeGraphContentProvider(ctx, connManager);
2428
const contentProviderRegistration = vscode.workspace.registerTextDocumentContentProvider(langID, contentProvider);
2529

client/src/connection.ts

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,11 @@ export class ConnectionManager implements IConnectionManager {
325325
var languageServerClient = new LanguageClient(title, serverOptions, clientOptions)
326326
languageServerClient.onReady().then(() => {
327327
langClient.logger.debug('Language server client started, setting puppet version')
328-
languageServerClient.sendRequest(messages.PuppetVersionRequest.type).then((versionDetails) => {
329-
this.setConnectionStatus(versionDetails.puppetVersion, ConnectionStatus.Running);
330-
if (reporter) {
328+
this.setConnectionStatus("Loading Puppet", ConnectionStatus.Starting);
329+
this.queryLanguageServerStatus();
330+
// Send telemetry
331+
if (reporter) {
332+
languageServerClient.sendRequest(messages.PuppetVersionRequest.type).then((versionDetails) => {
331333
reporter.sendTelemetryEvent('puppetVersion' +versionDetails.puppetVersion);
332334
reporter.sendTelemetryEvent('facterVersion' + versionDetails.facterVersion);
333335
reporter.sendTelemetryEvent('languageServerVersion' + versionDetails.languageServerVersion);
@@ -336,15 +338,54 @@ export class ConnectionManager implements IConnectionManager {
336338
facterVersion: versionDetails.facterVersion,
337339
languageServerVersion: versionDetails.languageServerVersion,
338340
});
339-
}
340-
});
341+
});
342+
}
341343
}, (reason) => {
342344
this.setSessionFailure("Could not start language service: ", reason);
343345
});
344346

345347
return languageServerClient;
346348
}
347349

350+
private queryLanguageServerStatus() {
351+
let connectionManager = this;
352+
353+
return new Promise((resolve, reject) => {
354+
let count = 0;
355+
let lastVersionResponse = null;
356+
let handle = setInterval(() => {
357+
count++;
358+
359+
// After 30 seonds timeout the progress
360+
if (count >= 30 || connectionManager.languageClient == undefined) {
361+
clearInterval(handle);
362+
connectionManager.setConnectionStatus(lastVersionResponse.puppetVersion, ConnectionStatus.Running);
363+
resolve();
364+
}
365+
366+
connectionManager.languageClient.sendRequest(messages.PuppetVersionRequest.type).then((versionDetails) => {
367+
lastVersionResponse = versionDetails
368+
if (versionDetails.factsLoaded && versionDetails.functionsLoaded && versionDetails.typesLoaded) {
369+
clearInterval(handle);
370+
connectionManager.setConnectionStatus(lastVersionResponse.puppetVersion, ConnectionStatus.Running);
371+
resolve();
372+
} else {
373+
let progress = 0;
374+
375+
if (versionDetails.factsLoaded) { progress++; }
376+
if (versionDetails.functionsLoaded) { progress++; }
377+
if (versionDetails.typesLoaded) { progress++; }
378+
progress = Math.round(progress / 3.0 * 100);
379+
380+
this.setConnectionStatus("Loading Puppet (" + progress.toString() + "%)", ConnectionStatus.Starting);
381+
}
382+
});
383+
384+
}, 1000);
385+
});
386+
}
387+
388+
348389
private restartConnection(connectionConfig?: IConnectionConfiguration) {
349390
this.stop();
350391
this.start(connectionConfig);

0 commit comments

Comments
 (0)