From a4889e61b149271dab195bd9b800850f4005d038 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Thu, 9 Sep 2021 08:59:40 +0200 Subject: [PATCH] Workspace trust - Add telemetry for workspace trust dialogs (#132530) --- .../browser/workspace.contribution.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts index d612780701d..9d608822088 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts @@ -95,6 +95,7 @@ export class WorkspaceTrustRequestHandler extends Disposable implements IWorkben constructor( @IDialogService private readonly dialogService: IDialogService, @ICommandService private readonly commandService: ICommandService, + @ITelemetryService private readonly telemetryService: ITelemetryService, @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, @IWorkspaceTrustManagementService private readonly workspaceTrustManagementService: IWorkspaceTrustManagementService, @IWorkspaceTrustRequestService private readonly workspaceTrustRequestService: IWorkspaceTrustRequestService) { @@ -121,6 +122,7 @@ export class WorkspaceTrustRequestHandler extends Disposable implements IWorkben ]; // Dialog + const startTime = Date.now(); const result = await this.dialogService.show( Severity.Info, localize('openLooseFileMesssage', "Do you trust the authors of these files?"), @@ -137,6 +139,9 @@ export class WorkspaceTrustRequestHandler extends Disposable implements IWorkben } }); + // Log dialog result + this.telemetryService.publicLog2('workspaceTrustOpenFileRequestDialogResult', { duration: Date.now() - startTime, ...result }); + switch (result.choice) { case 0: await this.workspaceTrustRequestService.completeOpenFilesTrustRequest(WorkspaceTrustUriResponse.Open, !!result.checkboxChecked); @@ -173,6 +178,7 @@ export class WorkspaceTrustRequestHandler extends Disposable implements IWorkben } // Dialog + const startTime = Date.now(); const result = await this.dialogService.show( Severity.Info, title, @@ -189,6 +195,9 @@ export class WorkspaceTrustRequestHandler extends Disposable implements IWorkben } ); + // Log dialog result + this.telemetryService.publicLog2('workspaceTrustRequestDialogResult', { duration: Date.now() - startTime, ...result }); + // Dialog result switch (buttons[result.choice].type) { case 'ContinueWithTrust': @@ -227,6 +236,7 @@ export class WorkspaceTrustUXHandler extends Disposable implements IWorkbenchCon @IConfigurationService private readonly configurationService: IConfigurationService, @IStatusbarService private readonly statusbarService: IStatusbarService, @IStorageService private readonly storageService: IStorageService, + @ITelemetryService private readonly telemetryService: ITelemetryService, @IWorkspaceTrustRequestService private readonly workspaceTrustRequestService: IWorkspaceTrustRequestService, @IBannerService private readonly bannerService: IBannerService, @ILabelService private readonly labelService: ILabelService, @@ -275,6 +285,7 @@ export class WorkspaceTrustUXHandler extends Disposable implements IWorkbenchCon const addedFoldersTrustInfo = await Promise.all(e.changes.added.map(folder => this.workspaceTrustManagementService.getUriTrustInfo(folder.uri))); if (!addedFoldersTrustInfo.map(info => info.trusted).every(trusted => trusted)) { + const startTime = Date.now(); const result = await this.dialogService.show( Severity.Info, localize('addWorkspaceFolderMessage', "Do you trust the authors of the files in this folder?"), @@ -286,6 +297,9 @@ export class WorkspaceTrustUXHandler extends Disposable implements IWorkbenchCon } ); + // Log dialog result + this.telemetryService.publicLog2('workspaceTrustAddWorkspaceFolderDialogResult', { duration: Date.now() - startTime, ...result }); + // Mark added/changed folders as trusted await this.workspaceTrustManagementService.setUrisTrust(addedFoldersTrustInfo.map(i => i.uri), result.choice === 0); @@ -319,6 +333,7 @@ export class WorkspaceTrustUXHandler extends Disposable implements IWorkbenchCon //#region Dialog private async doShowModal(question: string, trustedOption: { label: string, sublabel: string }, untrustedOption: { label: string, sublabel: string }, markdownStrings: string[], trustParentString?: string): Promise { + const startTime = Date.now(); const result = await this.dialogService.show( Severity.Info, question, @@ -342,6 +357,9 @@ export class WorkspaceTrustUXHandler extends Disposable implements IWorkbenchCon } ); + // Log dialog result + this.telemetryService.publicLog2('workspaceTrustStartupDialogResult', { duration: Date.now() - startTime, ...result }); + // Dialog result switch (result.choice) { case 0: @@ -753,6 +771,18 @@ Registry.as(ConfigurationExtensions.Configuration) /** * Telemetry */ +type WorkspaceTrustDialogResultEventClassification = { + duration: { classification: 'SystemMetaData', purpose: 'FeatureInsight', expiration: '1.64', isMeasurement: true }; + choice: { classification: 'SystemMetaData', purpose: 'FeatureInsight', expiration: '1.64', isMeasurement: true }; + checkboxChecked?: { classification: 'SystemMetaData', purpose: 'FeatureInsight', expiration: '1.64', isMeasurement: true }; +}; + +type WorkspaceTrustDialogResultEvent = { + duration: number; + choice: number; + checkboxChecked?: boolean; +}; + class WorkspaceTrustTelemetryContribution extends Disposable implements IWorkbenchContribution { constructor( @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, -- GitLab