diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 4cba8e9a4ba..b83586378fb 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -340,9 +340,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I get isNewAppInstall() { return isNewAppInstall(initData.telemetryInfo.firstSessionDate); }, - createTelemetryLogger(sender: vscode.TelemetrySender): vscode.TelemetryLogger { + createTelemetryLogger(sender: vscode.TelemetrySender, options?: vscode.TelemetryLoggerOptions): vscode.TelemetryLogger { ExtHostTelemetryLogger.validateSender(sender); - return extHostTelemetry.instantiateLogger(extension, sender); + return extHostTelemetry.instantiateLogger(extension, sender, options); }, openExternal(uri: URI, options?: { allowContributedOpeners?: boolean | string }) { return extHostWindow.openUri(uri, { diff --git a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts index 88b91728f6b..92e0cc82c83 100644 --- a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts @@ -13,7 +13,7 @@ import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitData import { ExtHostTelemetry, ExtHostTelemetryLogger } from 'vs/workbench/api/common/extHostTelemetry'; import { IEnvironment } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; import { mock } from 'vs/workbench/test/common/workbenchTestServices'; -import type { TelemetrySender } from 'vscode'; +import type { TelemetryLoggerOptions, TelemetrySender } from 'vscode'; interface TelemetryLoggerSpy { dataArr: any[]; @@ -73,7 +73,7 @@ suite('ExtHostTelemetry', function () { return extensionTelemetry; }; - const createLogger = (functionSpy: TelemetryLoggerSpy, extHostTelemetry?: ExtHostTelemetry) => { + const createLogger = (functionSpy: TelemetryLoggerSpy, extHostTelemetry?: ExtHostTelemetry, options?: TelemetryLoggerOptions) => { const extensionTelemetry = extHostTelemetry ?? createExtHostTelemetry(); // This is the appender which the extension would contribute const appender: TelemetrySender = { @@ -88,7 +88,7 @@ suite('ExtHostTelemetry', function () { } }; - const logger = extensionTelemetry.instantiateLogger(mockExtensionIdentifier, appender); + const logger = extensionTelemetry.instantiateLogger(mockExtensionIdentifier, appender, options); return logger; }; @@ -174,6 +174,38 @@ suite('ExtHostTelemetry', function () { }); + test('Simple log event to TelemetryLogger with options', function () { + const functionSpy: TelemetryLoggerSpy = { dataArr: [], exceptionArr: [], flushCalled: false }; + + const logger = createLogger(functionSpy, undefined, { additionalCommonProperties: { 'common.foo': 'bar' } }); + + logger.logUsage('test-event', { 'test-data': 'test-data' }); + assert.strictEqual(functionSpy.dataArr.length, 1); + assert.strictEqual(functionSpy.dataArr[0].eventName, `${mockExtensionIdentifier.name}/test-event`); + assert.strictEqual(functionSpy.dataArr[0].data['test-data'], 'test-data'); + assert.strictEqual(functionSpy.dataArr[0].data['common.foo'], 'bar'); + + logger.logUsage('test-event', { 'test-data': 'test-data' }); + assert.strictEqual(functionSpy.dataArr.length, 2); + + logger.logError('test-event', { 'test-data': 'test-data' }); + assert.strictEqual(functionSpy.dataArr.length, 3); + + logger.logError(new Error('test-error'), { 'test-data': 'test-data' }); + assert.strictEqual(functionSpy.dataArr.length, 3); + assert.strictEqual(functionSpy.exceptionArr.length, 1); + + + // Assert not flushed + assert.strictEqual(functionSpy.flushCalled, false); + + // Call flush and assert that flush occurs + logger.dispose(); + assert.strictEqual(functionSpy.flushCalled, true); + + }); + + test('Ensure logger properly cleans PII', function () { const functionSpy: TelemetryLoggerSpy = { dataArr: [], exceptionArr: [], flushCalled: false };