From 5424aa3391a7baebc6d8b9236f36fd39d2f5528d Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Wed, 19 Jun 2019 15:35:55 -0700 Subject: [PATCH 1/9] Added telemetry command --- resources/completions/zsh/_code | 1 + src/vs/code/node/cli.ts | 3 +- src/vs/code/node/cliProcessMain.ts | 3 ++ .../environment/common/environment.ts | 1 + src/vs/platform/environment/node/argv.ts | 33 ++++++++++++++++++- 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/resources/completions/zsh/_code b/resources/completions/zsh/_code index 9579cffb2f64c..b6951c4813e3a 100644 --- a/resources/completions/zsh/_code +++ b/resources/completions/zsh/_code @@ -14,6 +14,7 @@ arguments=( '--user-data-dir[specify the directory that user data is kept in]:directory:_directories' '(- *)'{-v,--version}'[print version]' '(- *)'{-h,--help}'[print usage]' + '(- *)'{--telemetry}'[Shows all telemetry events which VS code collects.]' '--extensions-dir[set the root path for extensions]:root path:_directories' '--list-extensions[list the installed extensions]' '--show-versions[show versions of installed extensions, when using --list-extension]' diff --git a/src/vs/code/node/cli.ts b/src/vs/code/node/cli.ts index e434b71a863a2..fc6b766080e78 100644 --- a/src/vs/code/node/cli.ts +++ b/src/vs/code/node/cli.ts @@ -25,7 +25,8 @@ function shouldSpawnCliProcess(argv: ParsedArgs): boolean { || !!argv['list-extensions'] || !!argv['install-extension'] || !!argv['uninstall-extension'] - || !!argv['locate-extension']; + || !!argv['locate-extension'] + || !!argv['telemetry']; } interface IMainCli { diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index dafebd1c91f64..f8720053e24c4 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -41,6 +41,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { LocalizationsService } from 'vs/platform/localizations/node/localizations'; import { Schemas } from 'vs/base/common/network'; import { SpdLogService } from 'vs/platform/log/node/spdlogService'; +import { buildTelemetryMessage } from 'vs/platform/environment/node/argv'; const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id); const notInstalled = (id: string) => localize('notInstalled', "Extension '{0}' is not installed.", id); @@ -94,6 +95,8 @@ export class Main { const arg = argv['locate-extension']; const ids: string[] = typeof arg === 'string' ? [arg] : arg; await this.locateExtension(ids); + } else if (argv['telemetry']) { + console.log(buildTelemetryMessage(this.environmentService.extensionsPath)); } } diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts index ce9606af5236b..28c4b6d8770ed 100644 --- a/src/vs/platform/environment/common/environment.ts +++ b/src/vs/platform/environment/common/environment.ts @@ -13,6 +13,7 @@ export interface ParsedArgs { _urls?: string[]; help?: boolean; version?: boolean; + telemetry?: boolean; status?: boolean; wait?: boolean; waitMarkerFilePath?: string; diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index b3e99e2b808d3..79fd1a38dc7d1 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -8,7 +8,8 @@ import * as os from 'os'; import { localize } from 'vs/nls'; import { ParsedArgs } from 'vs/platform/environment/common/environment'; import { join } from 'vs/base/common/path'; -import { writeFileSync } from 'vs/base/node/pfs'; +import { statSync, readFileSync } from 'fs'; +import { writeFileSync, readdirSync } from 'vs/base/node/pfs'; /** * This code is also used by standalone cli's. Avoid adding any other dependencies. @@ -41,6 +42,7 @@ export const options: Option[] = [ { id: 'user-data-dir', type: 'string', cat: 'o', args: 'dir', description: localize('userDataDir', "Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code.") }, { id: 'version', type: 'boolean', cat: 'o', alias: 'v', description: localize('version', "Print version.") }, { id: 'help', type: 'boolean', cat: 'o', alias: 'h', description: localize('help', "Print usage.") }, + { id: 'telemetry', type: 'boolean', cat: 'o', description: localize('telemetry', "Shows all telemetry events which VS code collects.") }, { id: 'folder-uri', type: 'string', cat: 'o', args: 'uri', description: localize('folderUri', "Opens a window with given folder uri(s)") }, { id: 'file-uri', type: 'string', cat: 'o', args: 'uri', description: localize('fileUri', "Opens a window with given file uri(s)") }, @@ -218,6 +220,35 @@ export function buildVersionMessage(version: string | undefined, commit: string return `${version || localize('unknownVersion', "Unknown version")}\n${commit || localize('unknownCommit', "Unknown commit")}\n${process.arch}`; } +export function buildTelemetryMessage(extensionsPath: string): string { + // const contents = readFileSync('./telemetry.json'); + // Gets all the directories inside the extension directory + const dirs = readdirSync(extensionsPath).filter(files => statSync(join(extensionsPath, files)).isDirectory()); + const telemetryJsonFolders: string[] = []; + dirs.forEach((dir) => { + const files = readdirSync(join(extensionsPath, dir)).filter(file => file === 'telemetry.json'); + // We know it contains a telemetry.json file so we add it to the list of folders which have one + if (files.length === 1) { + telemetryJsonFolders.push(dir); + } + }); + const mergedTelemetry = Object.create(null); + // Simple function to merge the telemetry into one json object + const mergeTelemetry = (contents: string, dirName: string) => { + const telemetryData = JSON.parse(contents); + mergedTelemetry[dirName] = telemetryData; + }; + telemetryJsonFolders.forEach((folder) => { + const contents = readFileSync(join(extensionsPath, folder, 'telemetry.json')).toString(); + mergeTelemetry(contents, folder); + }); + let contents = readFileSync('./telemetry-core.json').toString(); + mergeTelemetry(contents, 'vscode-core'); + contents = readFileSync('./telemetry-extensions.json').toString(); + mergeTelemetry(contents, 'vscode-extensions'); + return JSON.stringify(mergedTelemetry, null, 4); +} + /** * Converts an argument into an array * @param arg a argument value. Can be undefined, an entry or an array From 1d1d0f17a6727bf493cc242a219db84c88206f1f Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Thu, 20 Jun 2019 16:04:52 -0700 Subject: [PATCH 2/9] Initial Build support --- .../darwin/product-build-darwin.yml | 13 +++++++++++++ build/gulpfile.vscode.js | 4 +++- src/vs/code/node/cliProcessMain.ts | 2 +- src/vs/platform/environment/node/argv.ts | 17 +++++++++++------ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index f136f2b449613..28883b921754e 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -39,6 +39,19 @@ steps: node build/lib/builtInExtensions.js displayName: Prepare build +- script: | + set -e + cd .. + git clone https://github.com/microsoft/vscode-telemetry-extractor.git + cd vscode-telemetry-extractor + npm install + ./node_modules/typescript/bin/tsc + npm run setup-repos && npm run extract-all + mv declarations-resolved.json ../s/src/telemetry-core.json + mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json + echo 'Moved Files' + displayName: Extract Telemetry + - script: | set -e VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 9c32df0bf81e1..4fc0a7ff41469 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -62,6 +62,8 @@ const vscodeResources = [ 'out-build/bootstrap-amd.js', 'out-build/bootstrap-window.js', 'out-build/paths.js', + 'out-build/telemetry-core.json', + 'out-build/telemetry-extensions.json', 'out-build/vs/**/*.{svg,png,cur,html}', '!out-build/vs/code/browser/**/*.html', 'out-build/vs/base/common/performance.js', @@ -327,7 +329,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op .pipe(createAsar(path.join(process.cwd(), 'node_modules'), ['**/*.node', '**/vscode-ripgrep/bin/*', '**/node-pty/build/Release/*'], 'app/node_modules.asar')); let all = es.merge( - packageJsonStream, + packageJsonStream, productJsonStream, license, api, diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index f8720053e24c4..5caccaf03b9d2 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -96,7 +96,7 @@ export class Main { const ids: string[] = typeof arg === 'string' ? [arg] : arg; await this.locateExtension(ids); } else if (argv['telemetry']) { - console.log(buildTelemetryMessage(this.environmentService.extensionsPath)); + console.log(buildTelemetryMessage(this.environmentService.appRoot, this.environmentService.extensionsPath)); } } diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index 79fd1a38dc7d1..d952edeb31a26 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -5,6 +5,7 @@ import * as minimist from 'minimist'; import * as os from 'os'; +import * as path from 'path'; import { localize } from 'vs/nls'; import { ParsedArgs } from 'vs/platform/environment/common/environment'; import { join } from 'vs/base/common/path'; @@ -220,7 +221,7 @@ export function buildVersionMessage(version: string | undefined, commit: string return `${version || localize('unknownVersion', "Unknown version")}\n${commit || localize('unknownCommit', "Unknown commit")}\n${process.arch}`; } -export function buildTelemetryMessage(extensionsPath: string): string { +export function buildTelemetryMessage(appRoot: string, extensionsPath: string): string { // const contents = readFileSync('./telemetry.json'); // Gets all the directories inside the extension directory const dirs = readdirSync(extensionsPath).filter(files => statSync(join(extensionsPath, files)).isDirectory()); @@ -242,11 +243,15 @@ export function buildTelemetryMessage(extensionsPath: string): string { const contents = readFileSync(join(extensionsPath, folder, 'telemetry.json')).toString(); mergeTelemetry(contents, folder); }); - let contents = readFileSync('./telemetry-core.json').toString(); - mergeTelemetry(contents, 'vscode-core'); - contents = readFileSync('./telemetry-extensions.json').toString(); - mergeTelemetry(contents, 'vscode-extensions'); - return JSON.stringify(mergedTelemetry, null, 4); + try { + let contents = readFileSync(path.join(appRoot, 'out/', 'telemetry-core.json')).toString(); + mergeTelemetry(contents, 'vscode-core'); + contents = readFileSync(path.join(appRoot, 'out/', 'telemetry-extensions.json')).toString(); + mergeTelemetry(contents, 'vscode-extensions'); + return JSON.stringify(mergedTelemetry, null, 4); + } catch (err) { + return 'Unable to read VS Code telemetry events!'; + } } /** From 947ff834876ba147a8bdf0ead3dc3e8e6907c247 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Fri, 21 Jun 2019 11:14:53 -0700 Subject: [PATCH 3/9] Added build logic for telemetry --- build/azure-pipelines/darwin/product-build-darwin.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index 28883b921754e..b41f678f9758b 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -46,7 +46,9 @@ steps: cd vscode-telemetry-extractor npm install ./node_modules/typescript/bin/tsc - npm run setup-repos && npm run extract-all + npm run setup-extension-repos + node ./out/cli-extract.js --sourceDir ../s --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents + node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources/ --outputDir . --applyEndpoints --includeIsMeasurement mv declarations-resolved.json ../s/src/telemetry-core.json mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json echo 'Moved Files' From f25400c21d181cf721c3af7eab7b9097c0b04208 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Mon, 24 Jun 2019 09:43:18 -0700 Subject: [PATCH 4/9] Linux Builds --- .../linux/product-build-linux-alpine.yml | 15 +++++++++++++++ .../linux/product-build-linux-arm.yml | 15 +++++++++++++++ .../azure-pipelines/linux/product-build-linux.yml | 15 +++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/build/azure-pipelines/linux/product-build-linux-alpine.yml b/build/azure-pipelines/linux/product-build-linux-alpine.yml index 107f7fa0cec73..f0d3d8e1f4373 100644 --- a/build/azure-pipelines/linux/product-build-linux-alpine.yml +++ b/build/azure-pipelines/linux/product-build-linux-alpine.yml @@ -66,6 +66,21 @@ steps: ./build/azure-pipelines/linux/prebuild-alpine.sh displayName: Prepare build +- script: | + set -e + cd .. + git clone https://github.com/microsoft/vscode-telemetry-extractor.git + cd vscode-telemetry-extractor + npm install + ./node_modules/typescript/bin/tsc + npm run setup-extension-repos + node ./out/cli-extract.js --sourceDir ../s --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents + node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources/ --outputDir . --applyEndpoints --includeIsMeasurement + mv declarations-resolved.json ../s/src/telemetry-core.json + mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json + echo 'Moved Files' + displayName: Extract Telemetry + - script: | set -e ./build/azure-pipelines/linux/build-alpine.sh diff --git a/build/azure-pipelines/linux/product-build-linux-arm.yml b/build/azure-pipelines/linux/product-build-linux-arm.yml index ffa6d18f68e9d..4b78baf7206b1 100644 --- a/build/azure-pipelines/linux/product-build-linux-arm.yml +++ b/build/azure-pipelines/linux/product-build-linux-arm.yml @@ -66,6 +66,21 @@ steps: ./build/azure-pipelines/linux/prebuild-arm.sh displayName: Prebuild +- script: | + set -e + cd .. + git clone https://github.com/microsoft/vscode-telemetry-extractor.git + cd vscode-telemetry-extractor + npm install + ./node_modules/typescript/bin/tsc + npm run setup-extension-repos + node ./out/cli-extract.js --sourceDir ../s --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents + node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources/ --outputDir . --applyEndpoints --includeIsMeasurement + mv declarations-resolved.json ../s/src/telemetry-core.json + mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json + echo 'Moved Files' + displayName: Extract Telemetry + - script: | set -e ./build/azure-pipelines/linux/build-arm.sh diff --git a/build/azure-pipelines/linux/product-build-linux.yml b/build/azure-pipelines/linux/product-build-linux.yml index fa26c26dd1c63..210798a47761c 100644 --- a/build/azure-pipelines/linux/product-build-linux.yml +++ b/build/azure-pipelines/linux/product-build-linux.yml @@ -60,6 +60,21 @@ steps: node build/lib/builtInExtensions.js displayName: Install distro dependencies and extensions +- script: | + set -e + cd .. + git clone https://github.com/microsoft/vscode-telemetry-extractor.git + cd vscode-telemetry-extractor + npm install + ./node_modules/typescript/bin/tsc + npm run setup-extension-repos + node ./out/cli-extract.js --sourceDir ../s --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents + node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources/ --outputDir . --applyEndpoints --includeIsMeasurement + mv declarations-resolved.json ../s/src/telemetry-core.json + mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json + echo 'Moved Files' + displayName: Extract Telemetry + - script: | set -e VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ From d5598a92d6805cb8e0002dc8562bdda68bbc068a Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Mon, 24 Jun 2019 11:14:50 -0700 Subject: [PATCH 5/9] Windows builds sort of work --- .../win32/product-build-win32.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml index 3fe19e4b847b0..31ff866b76ac4 100644 --- a/build/azure-pipelines/win32/product-build-win32.yml +++ b/build/azure-pipelines/win32/product-build-win32.yml @@ -65,6 +65,23 @@ steps: exec { node build/lib/builtInExtensions.js } displayName: Install distro dependencies and extensions +- powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + cd .. + git clone https://github.com/microsoft/vscode-telemetry-extractor.git + cd vscode-telemetry-extractor + npm install + npm install -g typescript + tsc + npm run setup-extension-repos + node ./out/cli-extract.js --sourceDir ../s --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents + node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources/ --outputDir . --applyEndpoints --includeIsMeasurement + mv declarations-resolved.json ../s/src/telemetry-core.json + mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json + echo 'Moved Files' + displayName: Extract Telemetry + - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" From 9d2e9d65246d9879e63d732756e7d94e53ea6ce1 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Mon, 24 Jun 2019 13:31:01 -0700 Subject: [PATCH 6/9] Remove arm telemetry extraction --- .../linux/product-build-linux-arm.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/build/azure-pipelines/linux/product-build-linux-arm.yml b/build/azure-pipelines/linux/product-build-linux-arm.yml index 4b78baf7206b1..ffa6d18f68e9d 100644 --- a/build/azure-pipelines/linux/product-build-linux-arm.yml +++ b/build/azure-pipelines/linux/product-build-linux-arm.yml @@ -66,21 +66,6 @@ steps: ./build/azure-pipelines/linux/prebuild-arm.sh displayName: Prebuild -- script: | - set -e - cd .. - git clone https://github.com/microsoft/vscode-telemetry-extractor.git - cd vscode-telemetry-extractor - npm install - ./node_modules/typescript/bin/tsc - npm run setup-extension-repos - node ./out/cli-extract.js --sourceDir ../s --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents - node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources/ --outputDir . --applyEndpoints --includeIsMeasurement - mv declarations-resolved.json ../s/src/telemetry-core.json - mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json - echo 'Moved Files' - displayName: Extract Telemetry - - script: | set -e ./build/azure-pipelines/linux/build-arm.sh From 136e1bba111023bf834513da426f522c5e3778d7 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Mon, 24 Jun 2019 13:36:09 -0700 Subject: [PATCH 7/9] Remove alpine telemetry extraction --- .../linux/product-build-linux-alpine.yml | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/build/azure-pipelines/linux/product-build-linux-alpine.yml b/build/azure-pipelines/linux/product-build-linux-alpine.yml index f0d3d8e1f4373..3bf1271c9c67b 100644 --- a/build/azure-pipelines/linux/product-build-linux-alpine.yml +++ b/build/azure-pipelines/linux/product-build-linux-alpine.yml @@ -64,22 +64,7 @@ steps: - script: | set -e ./build/azure-pipelines/linux/prebuild-alpine.sh - displayName: Prepare build - -- script: | - set -e - cd .. - git clone https://github.com/microsoft/vscode-telemetry-extractor.git - cd vscode-telemetry-extractor - npm install - ./node_modules/typescript/bin/tsc - npm run setup-extension-repos - node ./out/cli-extract.js --sourceDir ../s --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents - node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources/ --outputDir . --applyEndpoints --includeIsMeasurement - mv declarations-resolved.json ../s/src/telemetry-core.json - mv declarations-extensions-resolved.json ../s/src/telemetry-extensions.json - echo 'Moved Files' - displayName: Extract Telemetry + displayName: Prepare builds - script: | set -e From c1159dc8781cce2023d2f0d65b7fb033401a24e0 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Mon, 24 Jun 2019 15:12:24 -0700 Subject: [PATCH 8/9] Remove accidental s --- build/azure-pipelines/linux/product-build-linux-alpine.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/azure-pipelines/linux/product-build-linux-alpine.yml b/build/azure-pipelines/linux/product-build-linux-alpine.yml index 3bf1271c9c67b..107f7fa0cec73 100644 --- a/build/azure-pipelines/linux/product-build-linux-alpine.yml +++ b/build/azure-pipelines/linux/product-build-linux-alpine.yml @@ -64,7 +64,7 @@ steps: - script: | set -e ./build/azure-pipelines/linux/prebuild-alpine.sh - displayName: Prepare builds + displayName: Prepare build - script: | set -e From 976e22700f76a4aa7eafa67a7914a1985237ea8d Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Mon, 24 Jun 2019 15:31:16 -0700 Subject: [PATCH 9/9] More try catch --- src/vs/platform/environment/node/argv.ts | 46 ++++++++++++------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index f45b79173aada..a8715ddccae98 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -5,7 +5,6 @@ import * as minimist from 'minimist'; import * as os from 'os'; -import * as path from 'path'; import { localize } from 'vs/nls'; import { ParsedArgs } from 'vs/platform/environment/common/environment'; import { join } from 'vs/base/common/path'; @@ -221,31 +220,30 @@ export function buildVersionMessage(version: string | undefined, commit: string } export function buildTelemetryMessage(appRoot: string, extensionsPath: string): string { - // const contents = readFileSync('./telemetry.json'); - // Gets all the directories inside the extension directory - const dirs = readdirSync(extensionsPath).filter(files => statSync(join(extensionsPath, files)).isDirectory()); - const telemetryJsonFolders: string[] = []; - dirs.forEach((dir) => { - const files = readdirSync(join(extensionsPath, dir)).filter(file => file === 'telemetry.json'); - // We know it contains a telemetry.json file so we add it to the list of folders which have one - if (files.length === 1) { - telemetryJsonFolders.push(dir); - } - }); - const mergedTelemetry = Object.create(null); - // Simple function to merge the telemetry into one json object - const mergeTelemetry = (contents: string, dirName: string) => { - const telemetryData = JSON.parse(contents); - mergedTelemetry[dirName] = telemetryData; - }; - telemetryJsonFolders.forEach((folder) => { - const contents = readFileSync(join(extensionsPath, folder, 'telemetry.json')).toString(); - mergeTelemetry(contents, folder); - }); try { - let contents = readFileSync(path.join(appRoot, 'out/', 'telemetry-core.json')).toString(); + // Gets all the directories inside the extension directory + const dirs = readdirSync(extensionsPath).filter(files => statSync(join(extensionsPath, files)).isDirectory()); + const telemetryJsonFolders: string[] = []; + dirs.forEach((dir) => { + const files = readdirSync(join(extensionsPath, dir)).filter(file => file === 'telemetry.json'); + // We know it contains a telemetry.json file so we add it to the list of folders which have one + if (files.length === 1) { + telemetryJsonFolders.push(dir); + } + }); + const mergedTelemetry = Object.create(null); + // Simple function to merge the telemetry into one json object + const mergeTelemetry = (contents: string, dirName: string) => { + const telemetryData = JSON.parse(contents); + mergedTelemetry[dirName] = telemetryData; + }; + telemetryJsonFolders.forEach((folder) => { + const contents = readFileSync(join(extensionsPath, folder, 'telemetry.json')).toString(); + mergeTelemetry(contents, folder); + }); + let contents = readFileSync(join(appRoot, 'out/', 'telemetry-core.json')).toString(); mergeTelemetry(contents, 'vscode-core'); - contents = readFileSync(path.join(appRoot, 'out/', 'telemetry-extensions.json')).toString(); + contents = readFileSync(join(appRoot, 'out/', 'telemetry-extensions.json')).toString(); mergeTelemetry(contents, 'vscode-extensions'); return JSON.stringify(mergedTelemetry, null, 4); } catch (err) {