Skip to content

Commit a990ff8

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 <bernd.hufmann@ericsson.com>
1 parent 2b90716 commit a990ff8

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,12 +6,14 @@ 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';
1212
import { TraceViewerPanel } from './trace-viewer-panel/trace-viewer-webview-panel';
13+
import { TspClientProvider } from 'vscode-trace-common/lib/client/tsp-client-provider-impl';
1314

1415
export let traceLogger: TraceExtensionLogger;
16+
const tspClientProvider = new TspClientProvider(getTspClientUrl(), undefined);
1517

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

4954
// Listening to configuration change for the trace server URL
@@ -88,8 +93,11 @@ export function activate(context: vscode.ExtensionContext): void {
8893
TraceViewerPanel.showMarkersFilterOnCurrent();
8994
}));
9095

91-
context.subscriptions.push(vscode.commands.registerCommand('openedTraces.openTraceFolder', () => {
92-
fileOpenHandler(context, undefined);
96+
context.subscriptions.push(vscode.commands.registerCommand('openedTraces.openTraceFolder', async () => {
97+
await startTraceServerIfAvailable();
98+
if (await isUp()) {
99+
fileOpenHandler(context, undefined);
100+
}
93101
}));
94102

95103
context.subscriptions.push(vscode.commands.registerCommand('traceViewer.shortcuts', () => {
@@ -114,3 +122,18 @@ export function activate(context: vscode.ExtensionContext): void {
114122
export function deactivate(): void {
115123
traceLogger.disposeChannel();
116124
}
125+
126+
async function startTraceServerIfAvailable(): Promise<void> {
127+
const extensionId = 'vscode-trace-server';
128+
const traceServerExtension = vscode.extensions.getExtension('tracecompass-community.' + extensionId);
129+
if (!traceServerExtension || await isUp()) {
130+
return;
131+
}
132+
await vscode.commands.executeCommand(extensionId + '.start-if-stopped');
133+
}
134+
135+
async function isUp() {
136+
const health = await tspClientProvider.getTspClient().checkHealth();
137+
const status = health.getModel()?.status;
138+
return health.isOk() && status === 'UP';
139+
}

0 commit comments

Comments
 (0)