Skip to content

Commit a3bde69

Browse files
authored
Allow machne id generation in main process (microsoft#167449)
1 parent 7894744 commit a3bde69

File tree

5 files changed

+46
-22
lines changed

5 files changed

+46
-22
lines changed

src/vs/code/electron-main/app.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { IProcessEnvironment, isLinux, isLinuxSnap, isMacintosh, isWindows, OS }
2020
import { assertType } from 'vs/base/common/types';
2121
import { URI } from 'vs/base/common/uri';
2222
import { generateUuid } from 'vs/base/common/uuid';
23-
import { getMachineId } from 'vs/base/node/id';
2423
import { registerContextMenuListener } from 'vs/base/parts/contextmenu/electron-main/contextmenu';
2524
import { getDelayedChannel, ProxyChannel, StaticRouter } from 'vs/base/parts/ipc/common/ipc';
2625
import { Server as ElectronIPCServer } from 'vs/base/parts/ipc/electron-main/ipc.electron';
@@ -71,7 +70,7 @@ import { IStateMainService } from 'vs/platform/state/electron-main/state';
7170
import { StorageDatabaseChannel } from 'vs/platform/storage/electron-main/storageIpc';
7271
import { ApplicationStorageMainService, IApplicationStorageMainService, IStorageMainService, StorageMainService } from 'vs/platform/storage/electron-main/storageMainService';
7372
import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties';
74-
import { ITelemetryService, machineIdKey, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
73+
import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
7574
import { TelemetryAppenderClient } from 'vs/platform/telemetry/common/telemetryIpc';
7675
import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
7776
import { getPiiPathsFromEnvironment, getTelemetryLevel, isInternalTelemetry, NullTelemetryService, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
@@ -109,6 +108,7 @@ import { ExtensionsScannerService } from 'vs/platform/extensionManagement/node/e
109108
import { UserDataTransientProfilesHandler } from 'vs/platform/userDataProfile/electron-main/userDataTransientProfilesHandler';
110109
import { ProfileStorageChangesListenerChannel } from 'vs/platform/userDataProfile/electron-main/userDataProfileStorageIpc';
111110
import { Promises, RunOnceScheduler, runWhenIdle } from 'vs/base/common/async';
111+
import { resolveMachineId } from 'vs/platform/telemetry/electron-main/telemetryUtils';
112112

113113
/**
114114
* The main VS Code application. There will only ever be one instance,
@@ -524,7 +524,7 @@ export class CodeApplication extends Disposable {
524524

525525
// Resolve unique machine ID
526526
this.logService.trace('Resolving machine identifier...');
527-
const machineId = await this.resolveMachineId();
527+
const machineId = await resolveMachineId(this.stateMainService);
528528
this.logService.trace(`Resolved machine identifier: ${machineId}`);
529529

530530
// Shared process
@@ -561,20 +561,6 @@ export class CodeApplication extends Disposable {
561561
this._register(instantiationService.createInstance(UserDataTransientProfilesHandler));
562562
}
563563

564-
private async resolveMachineId(): Promise<string> {
565-
566-
// We cache the machineId for faster lookups on startup
567-
// and resolve it only once initially if not cached or we need to replace the macOS iBridge device
568-
let machineId = this.stateMainService.getItem<string>(machineIdKey);
569-
if (!machineId || (isMacintosh && machineId === '6c9d2bc8f91b89624add29c0abeae7fb42bf539fa1cdb2e3e57cd668fa9bcead')) {
570-
machineId = await getMachineId();
571-
572-
this.stateMainService.setItem(machineIdKey, machineId);
573-
}
574-
575-
return machineId;
576-
}
577-
578564
private setupSharedProcess(machineId: string): { sharedProcess: SharedProcess; sharedProcessReady: Promise<MessagePortClient>; sharedProcessClient: Promise<MessagePortClient> } {
579565
const sharedProcess = this._register(this.mainInstantiationService.createInstance(SharedProcess, machineId, this.userEnv));
580566

src/vs/code/node/cliProcessMain.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ import { RequestService } from 'vs/platform/request/node/requestService';
5151
import { IStateService } from 'vs/platform/state/node/state';
5252
import { StateService } from 'vs/platform/state/node/stateService';
5353
import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties';
54-
import { ITelemetryService, machineIdKey } from 'vs/platform/telemetry/common/telemetry';
54+
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
5555
import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
5656
import { supportsTelemetry, NullTelemetryService, getPiiPathsFromEnvironment, isInternalTelemetry, ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils';
5757
import { OneDataSystemAppender } from 'vs/platform/telemetry/node/1dsAppender';
@@ -60,6 +60,7 @@ import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'
6060
import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService';
6161
import { IUserDataProfilesService, PROFILES_ENABLEMENT_CONFIG } from 'vs/platform/userDataProfile/common/userDataProfile';
6262
import { UserDataProfilesService } from 'vs/platform/userDataProfile/node/userDataProfile';
63+
import { resolveMachineId } from 'vs/platform/telemetry/node/telemetryUtils';
6364

6465
class CliMain extends Disposable {
6566

@@ -205,8 +206,7 @@ class CliMain extends Disposable {
205206
commonProperties: (async () => {
206207
let machineId: string | undefined = undefined;
207208
try {
208-
const storageContents = await Promises.readFile(environmentService.stateResource.fsPath);
209-
machineId = JSON.parse(storageContents.toString())[machineIdKey];
209+
machineId = await resolveMachineId(stateService);
210210
} catch (error) {
211211
if (error.code !== 'ENOENT') {
212212
logService.error(error);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { IStateMainService } from 'vs/platform/state/electron-main/state';
7+
import { machineIdKey } from 'vs/platform/telemetry/common/telemetry';
8+
import { resolveMachineId as resolveNodeMachineId } from 'vs/platform/telemetry/node/telemetryUtils';
9+
10+
export async function resolveMachineId(stateService: IStateMainService) {
11+
// Call the node layers implementation to avoid code duplication
12+
const machineId = resolveNodeMachineId(stateService);
13+
stateService.setItem(machineIdKey, machineId);
14+
return machineId;
15+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { isMacintosh } from 'vs/base/common/platform';
7+
import { getMachineId } from 'vs/base/node/id';
8+
import { IStateService } from 'vs/platform/state/node/state';
9+
import { machineIdKey } from 'vs/platform/telemetry/common/telemetry';
10+
11+
12+
export async function resolveMachineId(stateService: IStateService) {
13+
// We cache the machineId for faster lookups
14+
// and resolve it only once initially if not cached or we need to replace the macOS iBridge device
15+
let machineId = stateService.getItem<string>(machineIdKey);
16+
if (!machineId || (isMacintosh && machineId === '6c9d2bc8f91b89624add29c0abeae7fb42bf539fa1cdb2e3e57cd668fa9bcead')) {
17+
machineId = await getMachineId();
18+
}
19+
20+
return machineId;
21+
}

src/vs/platform/windows/electron-main/windowImpl.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { IProductService } from 'vs/platform/product/common/productService';
3030
import { IProtocolMainService } from 'vs/platform/protocol/electron-main/protocol';
3131
import { resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace';
3232
import { IApplicationStorageMainService, IStorageMainService } from 'vs/platform/storage/electron-main/storageMainService';
33-
import { ITelemetryService, machineIdKey } from 'vs/platform/telemetry/common/telemetry';
33+
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
3434
import { ThemeIcon } from 'vs/platform/theme/common/themeService';
3535
import { IThemeMainService } from 'vs/platform/theme/electron-main/themeMainService';
3636
import { getMenuBarVisibility, getTitleBarStyle, IFolderToOpen, INativeWindowConfiguration, IWindowSettings, IWorkspaceToOpen, MenuBarVisibility, useWindowControlsOverlay, WindowMinimumSize, zoomLevelToZoomFactor } from 'vs/platform/window/common/window';
@@ -49,6 +49,7 @@ import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry
4949
import { getPiiPathsFromEnvironment, isInternalTelemetry, ITelemetryAppender, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
5050
import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties';
5151
import { hostname, release } from 'os';
52+
import { resolveMachineId } from 'vs/platform/telemetry/electron-main/telemetryUtils';
5253

5354
export interface IWindowCreationOptions {
5455
state: IWindowState;
@@ -782,11 +783,12 @@ export class CodeWindow extends Disposable implements ICodeWindow {
782783
}
783784

784785
const { installSourcePath } = this.environmentMainService;
786+
const machineId = await resolveMachineId(this.stateMainService);
785787

786788
const config: ITelemetryServiceConfig = {
787789
appenders,
788790
sendErrorTelemetry: false,
789-
commonProperties: resolveCommonProperties(this.fileService, release(), hostname(), process.arch, this.productService.commit, this.productService.version, this.stateMainService.getItem<string>(machineIdKey), isInternal, installSourcePath),
791+
commonProperties: resolveCommonProperties(this.fileService, release(), hostname(), process.arch, this.productService.commit, this.productService.version, machineId, isInternal, installSourcePath),
790792
piiPaths: getPiiPathsFromEnvironment(this.environmentMainService)
791793
};
792794

0 commit comments

Comments
 (0)