|
|
|
|
@@ -10,9 +10,9 @@ import { serve, Server, connect } from 'vs/base/parts/ipc/node/ipc.net';
|
|
|
|
|
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
|
|
|
|
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
|
|
|
|
|
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
|
|
|
|
|
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
|
|
|
|
|
import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment';
|
|
|
|
|
import { NativeParsedArgs } from 'vs/platform/environment/common/argv';
|
|
|
|
|
import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
|
|
|
|
|
import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService';
|
|
|
|
|
import { ExtensionManagementChannel, ExtensionTipsChannel } from 'vs/platform/extensionManagement/common/extensionManagementIpc';
|
|
|
|
|
import { IExtensionManagementService, IExtensionGalleryService, IGlobalExtensionEnablementService, IExtensionTipsService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
|
|
|
|
import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService';
|
|
|
|
|
@@ -22,7 +22,7 @@ import { ConfigurationService } from 'vs/platform/configuration/common/configura
|
|
|
|
|
import { IRequestService } from 'vs/platform/request/common/request';
|
|
|
|
|
import { RequestService } from 'vs/platform/request/browser/requestService';
|
|
|
|
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
|
|
|
|
import { combinedAppender, NullTelemetryService, ITelemetryAppender, NullAppender, LogAppender } from 'vs/platform/telemetry/common/telemetryUtils';
|
|
|
|
|
import { combinedAppender, NullTelemetryService, ITelemetryAppender, NullAppender } from 'vs/platform/telemetry/common/telemetryUtils';
|
|
|
|
|
import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties';
|
|
|
|
|
import { TelemetryAppenderChannel } from 'vs/platform/telemetry/node/telemetryIpc';
|
|
|
|
|
import { TelemetryService, ITelemetryServiceConfig } from 'vs/platform/telemetry/common/telemetryService';
|
|
|
|
|
@@ -43,22 +43,19 @@ import { LogsDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/
|
|
|
|
|
import { IMainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService';
|
|
|
|
|
import { SpdLogService } from 'vs/platform/log/node/spdlogService';
|
|
|
|
|
import { DiagnosticsService, IDiagnosticsService } from 'vs/platform/diagnostics/node/diagnosticsService';
|
|
|
|
|
import { DiagnosticsChannel } from 'vs/platform/diagnostics/node/diagnosticsIpc';
|
|
|
|
|
import { FileService } from 'vs/platform/files/common/fileService';
|
|
|
|
|
import { IFileService } from 'vs/platform/files/common/files';
|
|
|
|
|
import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider';
|
|
|
|
|
import { Schemas } from 'vs/base/common/network';
|
|
|
|
|
import { IProductService } from 'vs/platform/product/common/productService';
|
|
|
|
|
import { IUserDataSyncService, IUserDataSyncStoreService, registerConfiguration, IUserDataSyncLogService, IUserDataSyncUtilService, IUserDataSyncResourceEnablementService, IUserDataSyncBackupStoreService, IUserDataSyncStoreManagementService } from 'vs/platform/userDataSync/common/userDataSync';
|
|
|
|
|
import { IUserDataSyncService, IUserDataSyncStoreService, registerConfiguration, IUserDataSyncLogService, IUserDataSyncUtilService, IUserDataSyncResourceEnablementService, IUserDataSyncBackupStoreService, IUserDataSyncStoreManagementService, IUserDataAutoSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSync';
|
|
|
|
|
import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyncService';
|
|
|
|
|
import { UserDataSyncStoreService, UserDataSyncStoreManagementService } from 'vs/platform/userDataSync/common/userDataSyncStoreService';
|
|
|
|
|
import { UserDataSyncChannel, UserDataSyncUtilServiceClient, UserDataAutoSyncChannel, StorageKeysSyncRegistryChannelClient, UserDataSyncMachinesServiceChannel, UserDataSyncAccountServiceChannel, UserDataSyncStoreManagementServiceChannel } from 'vs/platform/userDataSync/common/userDataSyncIpc';
|
|
|
|
|
import { IElectronService } from 'vs/platform/electron/electron-sandbox/electron';
|
|
|
|
|
import { UserDataSyncChannel, UserDataSyncUtilServiceClient, UserDataAutoSyncChannel, UserDataSyncMachinesServiceChannel, UserDataSyncAccountServiceChannel, UserDataSyncStoreManagementServiceChannel } from 'vs/platform/userDataSync/common/userDataSyncIpc';
|
|
|
|
|
import { INativeHostService } from 'vs/platform/native/electron-sandbox/native';
|
|
|
|
|
import { LoggerService } from 'vs/platform/log/node/loggerService';
|
|
|
|
|
import { UserDataSyncLogService } from 'vs/platform/userDataSync/common/userDataSyncLog';
|
|
|
|
|
import { ICredentialsService } from 'vs/platform/credentials/common/credentials';
|
|
|
|
|
import { KeytarCredentialsService } from 'vs/platform/credentials/node/credentialsService';
|
|
|
|
|
import { UserDataAutoSyncService } from 'vs/platform/userDataSync/electron-browser/userDataAutoSyncService';
|
|
|
|
|
import { UserDataAutoSyncService } from 'vs/platform/userDataSync/electron-sandbox/userDataAutoSyncService';
|
|
|
|
|
import { NativeStorageService } from 'vs/platform/storage/node/storageService';
|
|
|
|
|
import { GlobalStorageDatabaseChannelClient } from 'vs/platform/storage/node/storageIpc';
|
|
|
|
|
import { IStorageService } from 'vs/platform/storage/common/storage';
|
|
|
|
|
@@ -66,9 +63,15 @@ import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagemen
|
|
|
|
|
import { UserDataSyncResourceEnablementService } from 'vs/platform/userDataSync/common/userDataSyncResourceEnablementService';
|
|
|
|
|
import { IUserDataSyncAccountService, UserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount';
|
|
|
|
|
import { UserDataSyncBackupStoreService } from 'vs/platform/userDataSync/common/userDataSyncBackupStoreService';
|
|
|
|
|
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
|
|
|
|
|
import { ExtensionTipsService } from 'vs/platform/extensionManagement/node/extensionTipsService';
|
|
|
|
|
import { ExtensionTipsService } from 'vs/platform/extensionManagement/electron-sandbox/extensionTipsService';
|
|
|
|
|
import { UserDataSyncMachinesService, IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines';
|
|
|
|
|
import { IExtensionRecommendationNotificationService } from 'vs/platform/extensionRecommendations/common/extensionRecommendations';
|
|
|
|
|
import { ExtensionRecommendationNotificationServiceChannelClient } from 'vs/platform/extensionRecommendations/electron-sandbox/extensionRecommendationsIpc';
|
|
|
|
|
import { ActiveWindowManager } from 'vs/platform/windows/common/windowTracker';
|
|
|
|
|
import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender';
|
|
|
|
|
import { UserDataAutoSyncEnablementService } from 'vs/platform/userDataSync/common/userDataAutoSyncService';
|
|
|
|
|
import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions';
|
|
|
|
|
import { ExtensionsStorageSyncService, IExtensionsStorageSyncService } from 'vs/platform/userDataSync/common/extensionsStorageSync';
|
|
|
|
|
|
|
|
|
|
export interface ISharedProcessConfiguration {
|
|
|
|
|
readonly machineId: string;
|
|
|
|
|
@@ -83,6 +86,8 @@ interface ISharedProcessInitData {
|
|
|
|
|
sharedIPCHandle: string;
|
|
|
|
|
args: NativeParsedArgs;
|
|
|
|
|
logLevel: LogLevel;
|
|
|
|
|
nodeCachedDataDir?: string;
|
|
|
|
|
backupWorkspacesPath: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const eventPrefix = 'adsworkbench'; // {{ SQL CARBON EDIT }}
|
|
|
|
|
@@ -116,7 +121,7 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
|
|
|
|
|
|
|
|
|
|
disposables.add(server);
|
|
|
|
|
|
|
|
|
|
const environmentService = new EnvironmentService(initData.args);
|
|
|
|
|
const environmentService = new NativeEnvironmentService(initData.args);
|
|
|
|
|
|
|
|
|
|
const mainRouter = new StaticRouter(ctx => ctx === 'main');
|
|
|
|
|
const loggerClient = new LoggerChannelClient(server.getChannel('logger', mainRouter));
|
|
|
|
|
@@ -146,19 +151,22 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
|
|
|
|
|
services.set(IStorageService, storageService);
|
|
|
|
|
disposables.add(toDisposable(() => storageService.flush()));
|
|
|
|
|
|
|
|
|
|
services.set(IStorageKeysSyncRegistryService, new StorageKeysSyncRegistryChannelClient(mainProcessService.getChannel('storageKeysSyncRegistryService')));
|
|
|
|
|
|
|
|
|
|
services.set(IEnvironmentService, environmentService);
|
|
|
|
|
services.set(INativeEnvironmentService, environmentService);
|
|
|
|
|
|
|
|
|
|
services.set(IProductService, { _serviceBrand: undefined, ...product });
|
|
|
|
|
services.set(ILogService, logService);
|
|
|
|
|
services.set(IConfigurationService, configurationService);
|
|
|
|
|
services.set(IRequestService, new SyncDescriptor(RequestService));
|
|
|
|
|
services.set(ILoggerService, new SyncDescriptor(LoggerService));
|
|
|
|
|
|
|
|
|
|
const electronService = createChannelSender<IElectronService>(mainProcessService.getChannel('electron'), { context: configuration.windowId });
|
|
|
|
|
services.set(IElectronService, electronService);
|
|
|
|
|
const nativeHostService = createChannelSender<INativeHostService>(mainProcessService.getChannel('nativeHost'), { context: configuration.windowId });
|
|
|
|
|
services.set(INativeHostService, nativeHostService);
|
|
|
|
|
const activeWindowManager = new ActiveWindowManager(nativeHostService);
|
|
|
|
|
const activeWindowRouter = new StaticRouter(ctx => activeWindowManager.getActiveClientId().then(id => ctx === id));
|
|
|
|
|
|
|
|
|
|
services.set(IDownloadService, new SyncDescriptor(DownloadService));
|
|
|
|
|
services.set(IExtensionRecommendationNotificationService, new ExtensionRecommendationNotificationServiceChannelClient(server.getChannel('IExtensionRecommendationNotificationService', activeWindowRouter)));
|
|
|
|
|
|
|
|
|
|
const instantiationService = new InstantiationService(services);
|
|
|
|
|
|
|
|
|
|
@@ -166,21 +174,20 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
|
|
|
|
|
instantiationService.invokeFunction(accessor => {
|
|
|
|
|
const services = new ServiceCollection();
|
|
|
|
|
const { appRoot, extensionsPath, extensionDevelopmentLocationURI, isBuilt, installSourcePath } = environmentService;
|
|
|
|
|
const telemetryLogService = new FollowerLogService(loggerClient, new SpdLogService('telemetry', environmentService.logsPath, initData.logLevel));
|
|
|
|
|
telemetryLogService.info('The below are logs for every telemetry event sent from VS Code once the log level is set to trace.');
|
|
|
|
|
telemetryLogService.info('===========================================================');
|
|
|
|
|
|
|
|
|
|
let appInsightsAppender: ITelemetryAppender | null = NullAppender;
|
|
|
|
|
let telemetryAppender: ITelemetryAppender = NullAppender;
|
|
|
|
|
if (!extensionDevelopmentLocationURI && !environmentService.disableTelemetry && product.enableTelemetry) {
|
|
|
|
|
telemetryAppender = new TelemetryLogAppender(accessor.get(ILoggerService), environmentService);
|
|
|
|
|
if (product.aiConfig && product.aiConfig.asimovKey && isBuilt) {
|
|
|
|
|
appInsightsAppender = new AppInsightsAppender(eventPrefix, null, product.aiConfig.asimovKey, telemetryLogService);
|
|
|
|
|
const appInsightsAppender = new AppInsightsAppender(eventPrefix, null, product.aiConfig.asimovKey);
|
|
|
|
|
disposables.add(toDisposable(() => appInsightsAppender!.flush())); // Ensure the AI appender is disposed so that it flushes remaining data
|
|
|
|
|
telemetryAppender = combinedAppender(appInsightsAppender, telemetryAppender);
|
|
|
|
|
}
|
|
|
|
|
const config: ITelemetryServiceConfig = {
|
|
|
|
|
appender: combinedAppender(appInsightsAppender, new LogAppender(logService)),
|
|
|
|
|
appender: telemetryAppender,
|
|
|
|
|
commonProperties: resolveCommonProperties(product.commit, product.version, configuration.machineId, product.msftInternalDomains, installSourcePath),
|
|
|
|
|
sendErrorTelemetry: true,
|
|
|
|
|
piiPaths: extensionsPath ? [appRoot, extensionsPath] : [appRoot]
|
|
|
|
|
piiPaths: [appRoot, extensionsPath]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
telemetryService = new TelemetryService(config, configurationService);
|
|
|
|
|
@@ -189,7 +196,7 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
|
|
|
|
|
telemetryService = NullTelemetryService;
|
|
|
|
|
services.set(ITelemetryService, NullTelemetryService);
|
|
|
|
|
}
|
|
|
|
|
server.registerChannel('telemetryAppender', new TelemetryAppenderChannel(appInsightsAppender));
|
|
|
|
|
server.registerChannel('telemetryAppender', new TelemetryAppenderChannel(telemetryAppender));
|
|
|
|
|
|
|
|
|
|
services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService));
|
|
|
|
|
services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService));
|
|
|
|
|
@@ -197,15 +204,17 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
|
|
|
|
|
services.set(IDiagnosticsService, new SyncDescriptor(DiagnosticsService));
|
|
|
|
|
services.set(IExtensionTipsService, new SyncDescriptor(ExtensionTipsService));
|
|
|
|
|
|
|
|
|
|
services.set(ICredentialsService, new SyncDescriptor(KeytarCredentialsService));
|
|
|
|
|
services.set(IUserDataSyncAccountService, new SyncDescriptor(UserDataSyncAccountService));
|
|
|
|
|
services.set(IUserDataSyncLogService, new SyncDescriptor(UserDataSyncLogService));
|
|
|
|
|
services.set(IUserDataSyncUtilService, new UserDataSyncUtilServiceClient(server.getChannel('userDataSyncUtil', client => client.ctx !== 'main')));
|
|
|
|
|
services.set(IGlobalExtensionEnablementService, new SyncDescriptor(GlobalExtensionEnablementService));
|
|
|
|
|
services.set(IIgnoredExtensionsManagementService, new SyncDescriptor(IgnoredExtensionsManagementService));
|
|
|
|
|
services.set(IExtensionsStorageSyncService, new SyncDescriptor(ExtensionsStorageSyncService));
|
|
|
|
|
services.set(IUserDataSyncStoreManagementService, new SyncDescriptor(UserDataSyncStoreManagementService));
|
|
|
|
|
services.set(IUserDataSyncStoreService, new SyncDescriptor(UserDataSyncStoreService));
|
|
|
|
|
services.set(IUserDataSyncMachinesService, new SyncDescriptor(UserDataSyncMachinesService));
|
|
|
|
|
services.set(IUserDataSyncBackupStoreService, new SyncDescriptor(UserDataSyncBackupStoreService));
|
|
|
|
|
services.set(IUserDataAutoSyncEnablementService, new SyncDescriptor(UserDataAutoSyncEnablementService));
|
|
|
|
|
services.set(IUserDataSyncResourceEnablementService, new SyncDescriptor(UserDataSyncResourceEnablementService));
|
|
|
|
|
services.set(IUserDataSyncService, new SyncDescriptor(UserDataSyncService));
|
|
|
|
|
registerConfiguration();
|
|
|
|
|
@@ -223,7 +232,7 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
|
|
|
|
|
server.registerChannel('localizations', localizationsChannel);
|
|
|
|
|
|
|
|
|
|
const diagnosticsService = accessor.get(IDiagnosticsService);
|
|
|
|
|
const diagnosticsChannel = new DiagnosticsChannel(diagnosticsService);
|
|
|
|
|
const diagnosticsChannel = createChannelReceiver(diagnosticsService);
|
|
|
|
|
server.registerChannel('diagnostics', diagnosticsChannel);
|
|
|
|
|
|
|
|
|
|
const extensionTipsService = accessor.get(IExtensionTipsService);
|
|
|
|
|
@@ -256,9 +265,9 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
|
|
|
|
|
(localizationsService as LocalizationsService).update();
|
|
|
|
|
// cache clean ups
|
|
|
|
|
disposables.add(combinedDisposable(
|
|
|
|
|
instantiationService2.createInstance(NodeCachedDataCleaner),
|
|
|
|
|
new NodeCachedDataCleaner(initData.nodeCachedDataDir),
|
|
|
|
|
instantiationService2.createInstance(LanguagePackCachedDataCleaner),
|
|
|
|
|
instantiationService2.createInstance(StorageDataCleaner),
|
|
|
|
|
instantiationService2.createInstance(StorageDataCleaner, initData.backupWorkspacesPath),
|
|
|
|
|
instantiationService2.createInstance(LogsDataCleaner),
|
|
|
|
|
userDataAutoSync
|
|
|
|
|
));
|
|
|
|
|
|