Skip to content

Commit 9bf27c2

Browse files
author
Kartik Raj
authored
Sending telemetry for what language server is chosen (microsoft#7442)
* Sending telemetry for what language server is chosen * News entry * Apply suggestions from code review Co-Authored-By: Eric Snow <ericsnowcurrently@gmail.com> * Remove reduntant type info
1 parent 631acd2 commit 9bf27c2

File tree

5 files changed

+61
-21
lines changed

5 files changed

+61
-21
lines changed

news/3 Code Health/7109.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Send telemetry for what language server is chosen

src/client/activation/activationService.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,17 +103,17 @@ export class LanguageServerExtensionActivationService implements IExtensionActiv
103103
this.currentActivator.activator.dispose();
104104
}
105105
}
106-
@swallowExceptions('Switch Language Server')
107-
public async trackLangaugeServerSwitch(jediEnabled: boolean): Promise<void> {
106+
@swallowExceptions('Send telemetry for Language Server current selection')
107+
public async sendTelemetryForChosenLanguageServer(jediEnabled: boolean): Promise<void> {
108108
const state = this.stateFactory.createGlobalPersistentState<boolean | undefined>('SWITCH_LS', undefined);
109109
if (typeof state.value !== 'boolean') {
110110
await state.updateValue(jediEnabled);
111-
return;
112111
}
113112
if (state.value !== jediEnabled) {
114113
await state.updateValue(jediEnabled);
115-
const message = jediEnabled ? 'Switch to Jedi from LS' : 'Switch to LS from Jedi';
116-
sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_SWITCHED, undefined, { change: message });
114+
sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION, undefined, { switchTo: jediEnabled });
115+
} else {
116+
sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION, undefined, { startup: jediEnabled });
117117
}
118118
}
119119

@@ -145,7 +145,7 @@ export class LanguageServerExtensionActivationService implements IExtensionActiv
145145
}
146146
const configurationService = this.serviceContainer.get<IConfigurationService>(IConfigurationService);
147147
const enabled = configurationService.getSettings(this.resource).jediEnabled;
148-
this.trackLangaugeServerSwitch(enabled).ignoreErrors();
148+
this.sendTelemetryForChosenLanguageServer(enabled).ignoreErrors();
149149
return enabled;
150150
}
151151

src/client/telemetry/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export enum EventName {
5757
UNITTEST_NAVIGATE = 'UNITTEST.NAVIGATE',
5858
UNITTEST_ENABLED = 'UNITTEST.ENABLED',
5959
UNITTEST_EXPLORER_WORK_SPACE_COUNT = 'UNITTEST.TEST_EXPLORER.WORK_SPACE_COUNT',
60-
PYTHON_LANGUAGE_SERVER_SWITCHED = 'PYTHON_LANGUAGE_SERVER.SWITCHED',
60+
PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION = 'PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION',
6161
PYTHON_LANGUAGE_SERVER_ENABLED = 'PYTHON_LANGUAGE_SERVER.ENABLED',
6262
PYTHON_LANGUAGE_SERVER_EXTRACTED = 'PYTHON_LANGUAGE_SERVER.EXTRACTED',
6363
PYTHON_LANGUAGE_SERVER_DOWNLOADED = 'PYTHON_LANGUAGE_SERVER.DOWNLOADED',

src/client/telemetry/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -964,9 +964,18 @@ export interface IEventNamePropertyMapping {
964964
selection: 'Reload' | undefined;
965965
};
966966
/**
967-
* Telemetry tracking switching between LS and Jedi
967+
* Telemetry sent with details about the current selection of language server
968968
*/
969-
[EventName.PYTHON_LANGUAGE_SERVER_SWITCHED]: { change: 'Switch to Jedi from LS' | 'Switch to LS from Jedi' };
969+
[EventName.PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION]: {
970+
/**
971+
* The startup value of the language server setting
972+
*/
973+
startup?: boolean;
974+
/**
975+
* Used to track switch between LS and Jedi. Carries the final state after the switch.
976+
*/
977+
switchTo?: boolean;
978+
};
970979
/**
971980
* Telemetry event sent with details after attempting to download LS
972981
*/

src/test/activation/activationService.unit.test.ts

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ suite('Activation - ActivationService', () => {
502502
});
503503
});
504504

505-
suite('Test trackLangaugeServerSwitch()', () => {
505+
suite('Test sendTelemetryForChosenLanguageServer()', () => {
506506
let serviceContainer: TypeMoq.IMock<IServiceContainer>;
507507
let pythonSettings: TypeMoq.IMock<IPythonSettings>;
508508
let appShell: TypeMoq.IMock<IApplicationShell>;
@@ -578,33 +578,63 @@ suite('Activation - ActivationService', () => {
578578

579579
test('Track current LS usage for first usage', async () => {
580580
state.reset();
581-
state.setup(s => s.value).returns(() => undefined).verifiable(TypeMoq.Times.once());
582-
state.setup(s => s.updateValue(TypeMoq.It.isValue(true))).returns(() => Promise.resolve()).verifiable(TypeMoq.Times.once());
581+
state.setup(s => s.value).returns(() => undefined)
582+
.verifiable(TypeMoq.Times.exactly(2));
583+
state.setup(s => s.updateValue(TypeMoq.It.isValue(true)))
584+
.returns(() => {
585+
state.setup(s => s.value).returns(() => true);
586+
return Promise.resolve();
587+
})
588+
.verifiable(TypeMoq.Times.once());
583589

584590
const activationService = new LanguageServerExtensionActivationService(serviceContainer.object, stateFactory.object, experiments.object);
585-
await activationService.trackLangaugeServerSwitch(true);
591+
await activationService.sendTelemetryForChosenLanguageServer(true);
586592

587593
state.verifyAll();
588594
});
589595
test('Track switch to LS', async () => {
590596
state.reset();
591-
state.setup(s => s.value).returns(() => true).verifiable(TypeMoq.Times.once());
592-
state.setup(s => s.updateValue(TypeMoq.It.isValue(false))).returns(() => Promise.resolve()).verifiable(TypeMoq.Times.once());
597+
state.setup(s => s.value)
598+
.returns(() => true)
599+
.verifiable(TypeMoq.Times.exactly(2));
600+
state.setup(s => s.updateValue(TypeMoq.It.isValue(false)))
601+
.returns(() => Promise.resolve())
602+
.verifiable(TypeMoq.Times.once());
593603

594604
const activationService = new LanguageServerExtensionActivationService(serviceContainer.object, stateFactory.object, experiments.object);
595-
await activationService.trackLangaugeServerSwitch(false);
605+
await activationService.sendTelemetryForChosenLanguageServer(false);
596606

597-
state.verify(s => s.updateValue(TypeMoq.It.isValue(false)), TypeMoq.Times.once());
607+
state.verifyAll();
598608
});
599609
test('Track switch to Jedi', async () => {
600610
state.reset();
601-
state.setup(s => s.value).returns(() => false).verifiable(TypeMoq.Times.once());
602-
state.setup(s => s.updateValue(TypeMoq.It.isValue(true))).returns(() => Promise.resolve()).verifiable(TypeMoq.Times.once());
611+
state.setup(s => s.value)
612+
.returns(() => false)
613+
.verifiable(TypeMoq.Times.exactly(2));
614+
state.setup(s => s.updateValue(TypeMoq.It.isValue(true)))
615+
.returns(() => Promise.resolve())
616+
.verifiable(TypeMoq.Times.once());
603617

604618
const activationService = new LanguageServerExtensionActivationService(serviceContainer.object, stateFactory.object, experiments.object);
605-
await activationService.trackLangaugeServerSwitch(true);
619+
await activationService.sendTelemetryForChosenLanguageServer(true);
606620

607-
state.verify(s => s.updateValue(TypeMoq.It.isValue(true)), TypeMoq.Times.once());
621+
state.verifyAll();
622+
});
623+
test('Track startup value', async () => {
624+
state.reset();
625+
state
626+
.setup(s => s.value)
627+
.returns(() => true)
628+
.verifiable(TypeMoq.Times.exactly(2));
629+
state
630+
.setup(s => s.updateValue(TypeMoq.It.isAny()))
631+
.returns(() => Promise.resolve())
632+
.verifiable(TypeMoq.Times.never());
633+
634+
const activationService = new LanguageServerExtensionActivationService(serviceContainer.object, stateFactory.object, experiments.object);
635+
await activationService.sendTelemetryForChosenLanguageServer(true);
636+
637+
state.verifyAll();
608638
});
609639
});
610640

0 commit comments

Comments
 (0)