Skip to content

Commit c4074b9

Browse files
Mikhail ArkhipovDonJayamanne
authored andcommitted
Add support for telemetry from LS and remove obsolete LS option (microsoft#2978)
For microsoft#2940
1 parent dbe3652 commit c4074b9

5 files changed

Lines changed: 41 additions & 25 deletions

File tree

package-lock.json

Lines changed: 23 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/client/activation/interpreterDataService.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export class InterpreterData {
2020
// tslint:disable-next-line:no-shadowed-variable
2121
public readonly path: string,
2222
public readonly version: string,
23-
public readonly prefix: string,
2423
public readonly searchPaths: string,
2524
public readonly hash: string
2625
) { }
@@ -81,26 +80,23 @@ export class InterpreterDataService {
8180
}
8281

8382
private async getInterpreterDataFromPython(execService: IPythonExecutionService, interpreterPath: string): Promise<InterpreterData> {
84-
const result = await execService.exec(['-c', 'import sys; print(sys.version_info); print(sys.prefix)'], {});
85-
// 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) <<SOMETIMES NEW LINE HERE>>
86-
// [MSC v.1500 32 bit (Intel)]
87-
// C:\Python27
83+
const result = await execService.exec(['-c', 'import sys; print(sys.version_info)'], {});
84+
// sys.version_info(major=3, minor=6, micro=6, releaselevel='final', serial=0)
8885
if (!result.stdout) {
8986
throw Error('Unable to determine Python interpreter version and system prefix.');
9087
}
9188
const output = result.stdout.splitLines({ removeEmptyEntries: true, trim: true });
92-
if (!output || output.length < 2) {
89+
if (!output || output.length < 1) {
9390
throw Error('Unable to parse version and and system prefix from the Python interpreter output.');
9491
}
9592
const majorMatches = output[0].match(/major=(\d*?),/);
9693
const minorMatches = output[0].match(/minor=(\d*?),/);
9794
if (!majorMatches || majorMatches.length < 2 || !minorMatches || minorMatches.length < 2) {
9895
throw Error('Unable to parse interpreter version.');
9996
}
100-
const prefix = output[output.length - 1];
10197
const hash = await this.getInterpreterHash(interpreterPath);
10298
const searchPaths = await this.getSearchPaths(execService);
103-
return new InterpreterData(DataVersion, interpreterPath, `${majorMatches[1]}.${minorMatches[1]}`, prefix, searchPaths, hash);
99+
return new InterpreterData(DataVersion, interpreterPath, `${majorMatches[1]}.${minorMatches[1]}`, searchPaths, hash);
104100
}
105101

106102
private async getSearchPaths(execService: IPythonExecutionService): Promise<string> {

src/client/activation/languageServer/languageServer.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ import { LanguageServerSymbolProvider } from '../../providers/symbolProvider';
3333
import { sendTelemetryEvent } from '../../telemetry';
3434
import {
3535
PYTHON_LANGUAGE_SERVER_ENABLED,
36-
PYTHON_LANGUAGE_SERVER_ERROR
36+
PYTHON_LANGUAGE_SERVER_ERROR,
37+
PYTHON_LANGUAGE_SERVER_TELEMETRY
3738
} from '../../telemetry/constants';
3839
import { IUnitTestManagementService } from '../../unittests/types';
3940
import { LanguageServerDownloader } from '../downloader';
@@ -164,6 +165,10 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
164165
this.languageClient = this.createSelfContainedLanguageClient(serverModule, clientOptions);
165166
try {
166167
await this.startLanguageClient();
168+
this.languageClient.onTelemetry(telemetryEvent => {
169+
const eventName = telemetryEvent.Name ? telemetryEvent.Name : PYTHON_LANGUAGE_SERVER_TELEMETRY;
170+
sendTelemetryEvent(eventName, telemetryEvent.Measurements, telemetryEvent.Properties);
171+
});
167172
return true;
168173
} catch (ex) {
169174
this.appShell.showErrorMessage(`Language server failed to start. Error ${ex}`);
@@ -212,8 +217,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
212217

213218
// tslint:disable-next-line:member-ordering
214219
public async getAnalysisOptions(): Promise<LanguageClientOptions | undefined> {
215-
// tslint:disable-next-line:no-any
216-
const properties = new Map<string, any>();
220+
const properties = new Map<string, {}>();
217221
let interpreterData: InterpreterData | undefined;
218222
let pythonPath = '';
219223

@@ -231,8 +235,6 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
231235
properties['InterpreterPath'] = interpreterData.path;
232236
// tslint:disable-next-line:no-string-literal
233237
properties['Version'] = interpreterData.version;
234-
// tslint:disable-next-line:no-string-literal
235-
properties['PrefixPath'] = interpreterData.prefix;
236238
}
237239

238240
// tslint:disable-next-line:no-string-literal

src/client/telemetry/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export const PYTHON_LANGUAGE_SERVER_DOWNLOADED = 'PYTHON_LANGUAGE_SERVER.DOWNLOA
4040
export const PYTHON_LANGUAGE_SERVER_ERROR = 'PYTHON_LANGUAGE_SERVER.ERROR';
4141
export const PYTHON_LANGUAGE_SERVER_STARTUP = 'PYTHON_LANGUAGE_SERVER.STARTUP';
4242
export const PYTHON_LANGUAGE_SERVER_PLATFORM_NOT_SUPPORTED = 'PYTHON_LANGUAGE_SERVER.PLATFORM_NOT_SUPPORTED';
43+
export const PYTHON_LANGUAGE_SERVER_TELEMETRY = 'PYTHON_LANGUAGE_SERVER.EVENT';
4344

4445
export const TERMINAL_CREATE = 'TERMINAL.CREATE';
4546
export const PYTHON_LANGUAGE_SERVER_LIST_BLOB_STORE_PACKAGES = 'PYTHON_LANGUAGE_SERVER.LIST_BLOB_PACKAGES';

src/client/telemetry/types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export type FormatTelemetry = {
1515
formatSelection: boolean;
1616
};
1717

18-
export type LanguageServerTelemetry = {
18+
export type LanguageServerVersionTelemetry = {
1919
success: boolean;
2020
lsVersion?: string;
2121
};
@@ -24,6 +24,10 @@ export type LanguageServerErrorTelemetry = {
2424
error: string;
2525
};
2626

27+
export type LanguageServerTelemetry = {
28+
[key: string]: string;
29+
};
30+
2731
export type LinterTrigger = 'auto' | 'save';
2832

2933
export type LintingTelemetry = {
@@ -86,6 +90,7 @@ export type TerminalTelemetry = {
8690
};
8791
export type TelemetryProperties = FormatTelemetry
8892
| LanguageServerTelemetry
93+
| LanguageServerVersionTelemetry
8994
| LanguageServerErrorTelemetry
9095
| LintingTelemetry
9196
| EditorLoadTelemetry

0 commit comments

Comments
 (0)