Skip to content

Commit 7417379

Browse files
committed
Automatic start trace server when user requests to open a trace
This change uses the vscode-trace-server commands to start a trace server and when the server is started it will perform the pending open command. This change relies on the vscode-trace-server extension. In a future release an API can be introduced so that an extension can register the start/stop commands and also the started notification. This future enhancement would decouple the vscode-trace-extension with the vscode-trace-server implementation. Contributes to fixing Issue #15 Signed-off-by: Bernd Hufmann <[email protected]>
1 parent d4df38f commit 7417379

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

vscode-trace-extension/src/extension.ts

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ import { TraceExplorerAvailableViewsProvider } from './trace-explorer/available-
66
import { TraceExplorerOpenedTracesViewProvider } from './trace-explorer/opened-traces/trace-explorer-opened-traces-webview-provider';
77
import { fileHandler, openOverviewHandler, resetZoomHandler, undoRedoHandler, zoomHandler, keyboardShortcutsHandler } from './trace-explorer/trace-tree';
88
import { TraceServerConnectionStatusService } from './utils/trace-server-status';
9-
import { updateTspClient } from './utils/tspClient';
9+
import { getTspClientUrl, updateTspClient } from './utils/tspClient';
1010
import { TraceExtensionLogger } from './utils/trace-extension-logger';
1111
import { VSCODE_MESSAGES } from 'vscode-trace-common/lib/messages/vscode-message-manager';
12+
import { TspClientProvider } from 'vscode-trace-common/lib/client/tsp-client-provider-impl';
1213

1314
export let traceLogger: TraceExtensionLogger;
15+
const tspClientProvider = new TspClientProvider(getTspClientUrl(), undefined);
1416

1517
export function activate(context: vscode.ExtensionContext): void {
1618
traceLogger = new TraceExtensionLogger('Trace Extension');
@@ -41,8 +43,11 @@ export function activate(context: vscode.ExtensionContext): void {
4143
const analysisProvider = new AnalysisProvider();
4244
// TODO: For now, a different command opens traces from file explorer. Remove when we have a proper trace finder
4345
const fileOpenHandler = fileHandler(analysisProvider);
44-
context.subscriptions.push(vscode.commands.registerCommand('traces.openTraceFile', file => {
45-
fileOpenHandler(context, file);
46+
context.subscriptions.push(vscode.commands.registerCommand('traces.openTraceFile', async file => {
47+
await startTraceServerIfAvailable();
48+
if (await isUp()) {
49+
fileOpenHandler(context, file);
50+
}
4651
}));
4752

4853
// Listening to configuration change for the trace server URL
@@ -79,8 +84,11 @@ export function activate(context: vscode.ExtensionContext): void {
7984
zoomHandler(false);
8085
}));
8186

82-
context.subscriptions.push(vscode.commands.registerCommand('openedTraces.openTraceFolder', () => {
83-
fileOpenHandler(context, undefined);
87+
context.subscriptions.push(vscode.commands.registerCommand('openedTraces.openTraceFolder', async () => {
88+
await startTraceServerIfAvailable();
89+
if (await isUp()) {
90+
fileOpenHandler(context, undefined);
91+
}
8492
}));
8593

8694
context.subscriptions.push(vscode.commands.registerCommand('traceViewer.shortcuts', () => {
@@ -102,3 +110,18 @@ export function activate(context: vscode.ExtensionContext): void {
102110
export function deactivate(): void {
103111
traceLogger.disposeChannel();
104112
}
113+
114+
async function startTraceServerIfAvailable(): Promise<void> {
115+
const extensionId = 'vscode-trace-server';
116+
const traceServerExtension = vscode.extensions.getExtension('tracecompass-community.' + extensionId);
117+
if (!traceServerExtension || await isUp()) {
118+
return;
119+
}
120+
await vscode.commands.executeCommand(extensionId + '.start-if-stopped');
121+
}
122+
123+
async function isUp() {
124+
const health = await tspClientProvider.getTspClient().checkHealth();
125+
const status = health.getModel()?.status;
126+
return health.isOk() && status === 'UP';
127+
}

0 commit comments

Comments
 (0)