diff --git a/src/vs/platform/diagnostics/common/diagnostics.ts b/src/vs/platform/diagnostics/common/diagnostics.ts index 9adfc578f64..31a4ee17474 100644 --- a/src/vs/platform/diagnostics/common/diagnostics.ts +++ b/src/vs/platform/diagnostics/common/diagnostics.ts @@ -63,6 +63,7 @@ export interface PerformanceInfo { export interface IWorkspaceInformation extends IWorkspace { telemetryId: string | undefined; + rendererSessionId: string; } export function isRemoteDiagnosticError(x: any): x is IRemoteDiagnosticError { diff --git a/src/vs/platform/diagnostics/node/diagnosticsService.ts b/src/vs/platform/diagnostics/node/diagnosticsService.ts index 43dd25b6a5f..ebc6892cbc9 100644 --- a/src/vs/platform/diagnostics/node/diagnosticsService.ts +++ b/src/vs/platform/diagnostics/node/diagnosticsService.ts @@ -539,22 +539,39 @@ export class DiagnosticsService implements IDiagnosticsService { collectWorkspaceStats(folder, ['node_modules', '.git']).then(stats => { type WorkspaceStatsClassification = { 'workspace.id': { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; - fileTypes: { classification: 'SystemMetaData', purpose: 'FeatureInsight', isMeasurement: true }; + rendererSessionId: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; configTypes: { classification: 'SystemMetaData', purpose: 'FeatureInsight', isMeasurement: true }; launchConfigs: { classification: 'SystemMetaData', purpose: 'FeatureInsight', isMeasurement: true }; }; type WorkspaceStatsEvent = { 'workspace.id': string | undefined; - fileTypes: WorkspaceStatItem[]; + rendererSessionId: string; configTypes: WorkspaceStatItem[]; launchConfigs: WorkspaceStatItem[]; }; this.telemetryService.publicLog2('workspace.stats', { 'workspace.id': workspace.telemetryId, - fileTypes: stats.fileTypes, + rendererSessionId: workspace.rendererSessionId, configTypes: stats.configFiles, launchConfigs: stats.launchConfigFiles }); + stats.fileTypes.forEach(e => { + type WorkspaceStatsFileClassification = { + rendererSessionId: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; + fileType: { classification: 'SystemMetaData', purpose: 'FeatureInsight', isMeasurement: true }; + fileCount: { classification: 'SystemMetaData', purpose: 'FeatureInsight', isMeasurement: true }; + }; + type WorkspaceStatsFileEvent = { + rendererSessionId: string; + fileType: string; + fileCount: number; + }; + this.telemetryService.publicLog2('workspace.stats.file', { + rendererSessionId: workspace.rendererSessionId, + fileType: e.name, + fileCount: e.count + }); + }); }).catch(_ => { // Report nothing if collecting metadata fails. }); diff --git a/src/vs/workbench/contrib/stats/electron-browser/workspaceStats.ts b/src/vs/workbench/contrib/stats/electron-browser/workspaceStats.ts index f4f8c3bc578..91dbe7c6d76 100644 --- a/src/vs/workbench/contrib/stats/electron-browser/workspaceStats.ts +++ b/src/vs/workbench/contrib/stats/electron-browser/workspaceStats.ts @@ -164,16 +164,18 @@ export class WorkspaceStats implements IWorkbenchContribution { this.reportProxyStats(); const diagnosticsChannel = this.sharedProcessService.getChannel('diagnostics'); - diagnosticsChannel.call('reportWorkspaceStats', this.getWorkspaceInformation()); + this.getWorkspaceInformation().then(stats => diagnosticsChannel.call('reportWorkspaceStats', stats)); } - private getWorkspaceInformation(): IWorkspaceInformation { + private async getWorkspaceInformation(): Promise { const workspace = this.contextService.getWorkspace(); const state = this.contextService.getWorkbenchState(); - const id = this.workspaceStatsService.getTelemetryWorkspaceId(workspace, state); + const telemetryId = this.workspaceStatsService.getTelemetryWorkspaceId(workspace, state); + const rendererSessionId = (await this.telemetryService.getTelemetryInfo()).sessionId; return { id: workspace.id, - telemetryId: id, + telemetryId, + rendererSessionId, folders: workspace.folders, configuration: workspace.configuration };