Intial work to add error to telemetry setting (#132996)

* Intial work to add error to telemetry setting

* deprecate and centralize the telemetry setting

* Fix compilation

Co-authored-by: SteVen Batten <stbatt@microsoft.com>
This commit is contained in:
Logan Ramos
2021-09-14 10:50:25 -04:00
committed by GitHub
parent fca3c5e9bd
commit 9407123681
17 changed files with 136 additions and 53 deletions

View File

@@ -61,11 +61,11 @@ import { ISharedProcessConfiguration } from 'vs/platform/sharedProcess/node/shar
import { IStorageService } from 'vs/platform/storage/common/storage';
import { NativeStorageService } from 'vs/platform/storage/electron-sandbox/storageService';
import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties';
import { ICustomEndpointTelemetryService, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { ICustomEndpointTelemetryService, ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetryIpc';
import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender';
import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
import { combinedAppender, getTelemetryLevel, ITelemetryAppender, NullAppender, NullTelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { combinedAppender, getTelemetryLevel, ITelemetryAppender, NullAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
import { CustomEndpointTelemetryService } from 'vs/platform/telemetry/node/customEndpointTelemetryService';
import { LocalReconnectConstants, TerminalIpcChannels, TerminalSettingId } from 'vs/platform/terminal/common/terminal';

View File

@@ -65,10 +65,10 @@ import { IStateMainService } from 'vs/platform/state/electron-main/state';
import { StorageDatabaseChannel } from 'vs/platform/storage/electron-main/storageIpc';
import { IStorageMainService, StorageMainService } from 'vs/platform/storage/electron-main/storageMainService';
import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties';
import { ITelemetryService, machineIdKey } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryService, machineIdKey, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
import { TelemetryAppenderClient } from 'vs/platform/telemetry/common/telemetryIpc';
import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
import { NullTelemetryService, getTelemetryLevel, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { NullTelemetryService, getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { IUpdateService } from 'vs/platform/update/common/update';
import { UpdateChannel } from 'vs/platform/update/common/updateIpc';
import { DarwinUpdateService } from 'vs/platform/update/electron-main/updateService.darwin';

View File

@@ -43,9 +43,9 @@ import { IProductService } from 'vs/platform/product/common/productService';
import { IRequestService } from 'vs/platform/request/common/request';
import { RequestService } from 'vs/platform/request/node/requestService';
import { resolveCommonProperties } from 'vs/platform/telemetry/common/commonProperties';
import { ITelemetryService, machineIdKey } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryService, machineIdKey, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
import { combinedAppender, getTelemetryLevel, NullTelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { combinedAppender, getTelemetryLevel, NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
import { buildTelemetryMessage } from 'vs/platform/telemetry/node/telemetry';

View File

@@ -24,8 +24,8 @@ import { IProductService } from 'vs/platform/product/common/productService';
import { asJson, asText, IRequestService, isSuccess } from 'vs/platform/request/common/request';
import { getServiceMachineId } from 'vs/platform/serviceMachineId/common/serviceMachineId';
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { getTelemetryLevel, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { ITelemetryService, TelemetryConfiguration, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
import { getTelemetryConfiguration, getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
const CURRENT_TARGET_PLATFORM = isWeb ? TargetPlatform.WEB : getTargetPlatform(platform, arch);
@@ -933,7 +933,7 @@ export async function resolveMarketplaceHeaders(version: string, productService:
'User-Agent': `VSCode ${version}`
};
const uuid = await getServiceMachineId(environmentService, fileService, storageService);
if (getTelemetryLevel(productService, environmentService) >= TelemetryLevel.USER && configurationService.getValue('telemetry.enableTelemetry') === true) {
if (getTelemetryLevel(productService, environmentService) >= TelemetryLevel.USER && getTelemetryConfiguration(configurationService) === TelemetryConfiguration.ON) {
headers['X-Market-User-Id'] = uuid;
}
return headers;

View File

@@ -20,6 +20,7 @@ import { NullLogService } from 'vs/platform/log/common/log';
import product from 'vs/platform/product/common/product';
import { IProductService } from 'vs/platform/product/common/productService';
import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/common/storage';
import { TelemetryConfiguration, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry';
class EnvironmentServiceMock extends mock<IEnvironmentService>() {
override readonly serviceMachineIdResource: URI;
@@ -41,8 +42,8 @@ suite('Extension Gallery Service', () => {
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(serviceMachineIdResource.scheme, fileSystemProvider);
storageService = new InMemoryStorageService();
configurationService = new TestConfigurationService({ 'telemetry.enableTelemetry': true });
configurationService.updateValue('telemetry.enableTelemetry', true);
configurationService = new TestConfigurationService({ [TELEMETRY_SETTING_ID]: TelemetryConfiguration.ON });
configurationService.updateValue(TELEMETRY_SETTING_ID, TelemetryConfiguration.ON);
productService = { _serviceBrand: undefined, ...product, enableTelemetry: true };
});

View File

@@ -73,3 +73,20 @@ export const currentSessionDateStorageKey = 'telemetry.currentSessionDate';
export const firstSessionDateStorageKey = 'telemetry.firstSessionDate';
export const lastSessionDateStorageKey = 'telemetry.lastSessionDate';
export const machineIdKey = 'telemetry.machineId';
// Configuration Keys
export const TELEMETRY_SECTION_ID = 'telemetry';
export const TELEMETRY_SETTING_ID = 'telemetry.telemetryLevel';
export const TELEMETRY_OLD_SETTING_ID = 'telemetry.enableTelemetry';
export const enum TelemetryLevel {
NONE = 0,
LOG = 1,
USER = 2
}
export const enum TelemetryConfiguration {
OFF = 'off',
ERROR = 'error',
ON = 'on'
}

View File

@@ -12,8 +12,8 @@ import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platf
import product from 'vs/platform/product/common/product';
import { Registry } from 'vs/platform/registry/common/platform';
import { ClassifiedEvent, GDPRClassification, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings';
import { ITelemetryData, ITelemetryInfo, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils';
import { ITelemetryData, ITelemetryInfo, ITelemetryService, TelemetryConfiguration, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SECTION_ID, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry';
import { getTelemetryConfiguration, ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils';
export interface ITelemetryServiceConfig {
appender: ITelemetryAppender;
@@ -34,6 +34,7 @@ export class TelemetryService implements ITelemetryService {
private _experimentProperties: { [name: string]: string } = {};
private _piiPaths: string[];
private _userOptIn: boolean;
private _errorOptIn: boolean;
private _enabled: boolean;
public readonly sendErrorTelemetry: boolean;
@@ -48,6 +49,7 @@ export class TelemetryService implements ITelemetryService {
this._commonProperties = config.commonProperties || Promise.resolve({});
this._piiPaths = config.piiPaths || [];
this._userOptIn = true;
this._errorOptIn = true;
this._enabled = true;
this.sendErrorTelemetry = !!config.sendErrorTelemetry;
@@ -77,6 +79,15 @@ export class TelemetryService implements ITelemetryService {
};
this.publicLog2<{ usingFallbackGuid: boolean }, MachineIdFallbackClassification>('machineIdFallback', { usingFallbackGuid: !isHashedId });
});
// TODO @sbatten @lramos15 bring this code in after one iteration
// Once the service initializes we update the telemetry value to the new format
// this._convertOldTelemetrySettingToNew();
// this._configurationService.onDidChangeConfiguration(e => {
// if (e.affectsConfiguration(TELEMETRY_OLD_SETTING_ID)) {
// this._convertOldTelemetrySettingToNew();
// }
// }, this);
}
setExperimentProperty(name: string, value: string): void {
@@ -87,9 +98,18 @@ export class TelemetryService implements ITelemetryService {
this._enabled = value;
}
// TODO: @sbatten @lramos15 bring this code in after one iteration
// private _convertOldTelemetrySettingToNew(): void {
// const telemetryValue = this._configurationService.getValue(TELEMETRY_OLD_SETTING_ID);
// if (typeof telemetryValue === 'boolean') {
// this._configurationService.updateValue(TELEMETRY_SETTING_ID, telemetryValue ? 'true' : 'false');
// }
// }
private _updateUserOptIn(): void {
const config = this._configurationService?.getValue<any>(TELEMETRY_SECTION_ID);
this._userOptIn = config ? config.enableTelemetry : this._userOptIn;
const telemetryConfig = getTelemetryConfiguration(this._configurationService);
this._errorOptIn = telemetryConfig !== TelemetryConfiguration.OFF;
this._userOptIn = telemetryConfig === TelemetryConfiguration.ON;
}
get isOptedIn(): boolean {
@@ -148,7 +168,7 @@ export class TelemetryService implements ITelemetryService {
}
publicLogError(errorEventName: string, data?: ITelemetryData): Promise<any> {
if (!this.sendErrorTelemetry) {
if (!this.sendErrorTelemetry || !this._errorOptIn) {
return Promise.resolve(undefined);
}
@@ -240,17 +260,40 @@ export class TelemetryService implements ITelemetryService {
}
}
const TELEMETRY_SECTION_ID = 'telemetry';
Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfiguration({
'id': TELEMETRY_SECTION_ID,
'order': 110,
'type': 'object',
'title': localize('telemetryConfigurationTitle', "Telemetry"),
'properties': {
'telemetry.enableTelemetry': {
[TELEMETRY_SETTING_ID]: {
'type': 'string',
'enum': [TelemetryConfiguration.ON, TelemetryConfiguration.ERROR, TelemetryConfiguration.OFF],
'enumDescriptions': [
localize('telemetry.enableTelemetry.default', "Enables all telemetry data to be collected."),
localize('telemetry.enableTelemetry.error', "Enables only error telemetry data and not general usage data."),
localize('telemetry.enableTelemetry.false', "Disables all product telemetry.")
],
'markdownDescription':
!product.privacyStatementUrl ?
localize('telemetry.enableTelemetry', "Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made.", product.nameLong) :
localize('telemetry.enableTelemetryMd', "Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made. [Read more]({1}) about what we collect and our privacy statement.", product.nameLong, product.privacyStatementUrl),
'default': TelemetryConfiguration.ON,
'restricted': true,
'scope': ConfigurationScope.APPLICATION,
'tags': ['usesOnlineServices', 'telemetry']
}
}
});
// Deprecated telemetry setting
Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfiguration({
'id': TELEMETRY_SECTION_ID,
'order': 110,
'type': 'object',
'title': localize('telemetryConfigurationTitle', "Telemetry"),
'properties': {
[TELEMETRY_OLD_SETTING_ID]: {
'type': 'boolean',
'markdownDescription':
!product.privacyStatementUrl ?
@@ -258,8 +301,10 @@ Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfigurat
localize('telemetry.enableTelemetryMd', "Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made. [Read more]({1}) about what we collect and our privacy statement.", product.nameLong, product.privacyStatementUrl),
'default': true,
'restricted': true,
'markdownDeprecationMessage': localize('enableTelemetryDeprecated', "Deprecated in favor of the {0} setting.", `\`#${TELEMETRY_SETTING_ID}#\``),
'scope': ConfigurationScope.APPLICATION,
'tags': ['usesOnlineServices', 'telemetry']
}
}
});

View File

@@ -11,7 +11,7 @@ import { ConfigurationTarget, ConfigurationTargetToString, IConfigurationService
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { IProductService } from 'vs/platform/product/common/productService';
import { ClassifiedEvent, GDPRClassification, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings';
import { ICustomEndpointTelemetryService, ITelemetryData, ITelemetryEndpoint, ITelemetryInfo, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { ICustomEndpointTelemetryService, ITelemetryData, ITelemetryEndpoint, ITelemetryInfo, ITelemetryService, TelemetryConfiguration, TelemetryLevel, TELEMETRY_OLD_SETTING_ID, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry';
export const NullTelemetryService = new class implements ITelemetryService {
declare readonly _serviceBrand: undefined;
@@ -104,12 +104,6 @@ export function configurationTelemetry(telemetryService: ITelemetryService, conf
});
}
export const enum TelemetryLevel {
NONE = 0,
LOG = 1,
USER = 2
}
/**
* Determines how telemetry is handled based on the current running configuration.
* To log telemetry locally, the client must not disable telemetry via the CLI
@@ -132,6 +126,27 @@ export function getTelemetryLevel(productService: IProductService, environmentSe
return TelemetryLevel.USER;
}
/**
* Determines how telemetry is handled based on the current running configuration.
* To log telemetry locally, the client must not disable telemetry via the CLI
* If client is a built product and telemetry is enabled via the product.json, defer to user setting
* Note that when running from sources, we log telemetry locally but do not send it
*
* @param configurationService
* @returns OFF, ERROR, ON
*/
export function getTelemetryConfiguration(configurationService: IConfigurationService): TelemetryConfiguration {
const newConfig = configurationService.getValue<TelemetryConfiguration>(TELEMETRY_SETTING_ID);
const oldConfig = configurationService.getValue(TELEMETRY_OLD_SETTING_ID);
// Check old config for disablement
if (oldConfig !== undefined && oldConfig === false) {
return TelemetryConfiguration.OFF;
}
return newConfig ?? TelemetryConfiguration.ON;
}
export interface Properties {
[key: string]: string;
}

View File

@@ -9,7 +9,7 @@ import * as Errors from 'vs/base/common/errors';
import { Emitter } from 'vs/base/common/event';
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
import ErrorTelemetry from 'vs/platform/telemetry/browser/errorTelemetry';
import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryData, TelemetryConfiguration } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
import { ITelemetryAppender, NullAppender } from 'vs/platform/telemetry/common/telemetryUtils';
@@ -198,7 +198,7 @@ suite('TelemetryService', () => {
});
});
test('enableTelemetry on by default', sinonTestFn(function () {
test('telemetry on by default', sinonTestFn(function () {
let testAppender = new TestTelemetryAppender();
let service = new TelemetryService({ appender: testAppender }, new TestConfigurationService());
@@ -766,7 +766,7 @@ suite('TelemetryService', () => {
}
}));
test('Telemetry Service sends events when enableTelemetry is on', sinonTestFn(function () {
test('Telemetry Service sends events when telemetry is on', sinonTestFn(function () {
let testAppender = new TestTelemetryAppender();
let service = new TelemetryService({ appender: testAppender }, new TestConfigurationService());
@@ -778,7 +778,7 @@ suite('TelemetryService', () => {
test('Telemetry Service checks with config service', function () {
let enableTelemetry = false;
let telemetryLevel = TelemetryConfiguration.OFF;
let emitter = new Emitter<any>();
let testAppender = new TestTelemetryAppender();
@@ -787,19 +787,17 @@ suite('TelemetryService', () => {
}, new class extends TestConfigurationService {
override onDidChangeConfiguration = emitter.event;
override getValue() {
return {
enableTelemetry: enableTelemetry
} as any;
return telemetryLevel as any;
}
}());
assert.strictEqual(service.isOptedIn, false);
enableTelemetry = true;
telemetryLevel = TelemetryConfiguration.ON;
emitter.fire({});
assert.strictEqual(service.isOptedIn, true);
enableTelemetry = false;
telemetryLevel = TelemetryConfiguration.ERROR;
emitter.fire({});
assert.strictEqual(service.isOptedIn, false);

View File

@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryService, TelemetryConfiguration, TelemetryLevel, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry';
import { MainThreadTelemetryShape, MainContext, IExtHostContext, ExtHostTelemetryShape, ExtHostContext } from '../common/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { ClassifiedEvent, StrictPropertyCheck, GDPRClassification } from 'vs/platform/telemetry/common/gdprTypings';
@@ -11,7 +11,7 @@ import { Disposable } from 'vs/base/common/lifecycle';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { IProductService } from 'vs/platform/product/common/productService';
import { getTelemetryLevel, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { getTelemetryConfiguration, getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
@extHostNamedCustomer(MainContext.MainThreadTelemetry)
export class MainThreadTelemetry extends Disposable implements MainThreadTelemetryShape {
@@ -32,7 +32,7 @@ export class MainThreadTelemetry extends Disposable implements MainThreadTelemet
if (getTelemetryLevel(this._productService, this._environmenService) >= TelemetryLevel.LOG) {
this._register(this._configurationService.onDidChangeConfiguration(e => {
if (e.affectedKeys.includes('telemetry.enableTelemetry')) {
if (e.affectedKeys.includes(TELEMETRY_SETTING_ID)) {
this._proxy.$onDidChangeTelemetryEnabled(this.telemetryEnabled);
}
}));
@@ -46,7 +46,7 @@ export class MainThreadTelemetry extends Disposable implements MainThreadTelemet
return false;
}
return !!this._configurationService.getValue('telemetry.enableTelemetry');
return getTelemetryConfiguration(this._configurationService) === TelemetryConfiguration.ON;
}
$publicLog(eventName: string, data: any = Object.create(null)): void {

View File

@@ -22,10 +22,11 @@ import { isWeb } from 'vs/base/common/platform';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { LogsDataCleaner } from 'vs/workbench/contrib/logs/common/logsDataCleaner';
import { IOutputService } from 'vs/workbench/contrib/output/common/output';
import { getTelemetryLevel, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { IProductService } from 'vs/platform/product/common/productService';
import { timeout } from 'vs/base/common/async';
import { getErrorMessage } from 'vs/base/common/errors';
import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
const workbenchActionsRegistry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionExtensions.WorkbenchActions);
workbenchActionsRegistry.registerWorkbenchAction(SyncActionDescriptor.from(SetLogLevelAction), 'Developer: Set Log Level...', CATEGORIES.Developer.value);

View File

@@ -29,6 +29,8 @@ import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remot
import { IDownloadService } from 'vs/platform/download/common/download';
import { OpenLocalFileFolderCommand, OpenLocalFileCommand, OpenLocalFolderCommand, SaveLocalFileCommand, RemoteFileDialogContext } from 'vs/workbench/services/dialogs/browser/simpleFileDialog';
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
import { TelemetryConfiguration, TELEMETRY_SETTING_ID } from 'vs/platform/telemetry/common/telemetry';
import { getTelemetryConfiguration } from 'vs/platform/telemetry/common/telemetryUtils';
class RemoteChannelsContribution implements IWorkbenchContribution {
@@ -104,14 +106,14 @@ class RemoteTelemetryEnablementUpdater extends Disposable implements IWorkbenchC
this.updateRemoteTelemetryEnablement();
this._register(configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('telemetry.enableTelemetry')) {
if (e.affectsConfiguration(TELEMETRY_SETTING_ID)) {
this.updateRemoteTelemetryEnablement();
}
}));
}
private updateRemoteTelemetryEnablement(): Promise<void> {
if (!this.configurationService.getValue('telemetry.enableTelemetry')) {
if (getTelemetryConfiguration(this.configurationService) === TelemetryConfiguration.OFF) {
return this.remoteAgentService.disableTelemetry();
}

View File

@@ -22,14 +22,14 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { IProductService } from 'vs/platform/product/common/productService';
import { asText, IRequestService } from 'vs/platform/request/common/request';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
import { DEFAULT_MARKDOWN_STYLES, renderMarkdownDocument } from 'vs/workbench/contrib/markdown/browser/markdownDocumentRenderer';
import { WebviewInput } from 'vs/workbench/contrib/webviewPanel/browser/webviewEditorInput';
import { IWebviewWorkbenchService } from 'vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService';
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
import { ACTIVE_GROUP, IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { getTelemetryLevel, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
export class ReleaseNotesManager {

View File

@@ -17,7 +17,7 @@ import { IThemeService, registerThemingParticipant, ThemeIcon } from 'vs/platfor
import { welcomePageBackground, welcomePageProgressBackground, welcomePageProgressForeground, welcomePageTileBackground, welcomePageTileHoverBackground, welcomePageTileShadow } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedColors';
import { activeContrastBorder, buttonBackground, buttonForeground, buttonHoverBackground, contrastBorder, descriptionForeground, focusBorder, foreground, textLinkActiveForeground, textLinkForeground } from 'vs/platform/theme/common/colorRegistry';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { firstSessionDateStorageKey, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { firstSessionDateStorageKey, ITelemetryService, TelemetryConfiguration } from 'vs/platform/telemetry/common/telemetry';
import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
import { gettingStartedCheckedCodicon, gettingStartedUncheckedCodicon } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedIcons';
import { IOpenerService, matchesScheme } from 'vs/platform/opener/common/opener';
@@ -67,6 +67,7 @@ import { GettingStartedIndexList } from './gettingStartedList';
import product from 'vs/platform/product/common/product';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { getTelemetryConfiguration } from 'vs/platform/telemetry/common/telemetryUtils';
const SLIDE_TRANSITION_TIME_MS = 250;
const configurationKey = 'workbench.startupEditor';
@@ -1393,7 +1394,7 @@ export class GettingStartedPage extends EditorPane {
const stepListComponent = this.detailsScrollbar.getDomNode();
const categoryFooter = $('.getting-started-footer');
if (this.editorInput.showTelemetryNotice && this.configurationService.getValue('telemetry.enableTelemetry') && product.enableTelemetry) {
if (this.editorInput.showTelemetryNotice && getTelemetryConfiguration(this.configurationService) !== TelemetryConfiguration.OFF && product.enableTelemetry) {
const mdRenderer = this._register(this.instantiationService.createInstance(MarkdownRenderer, {}));
const privacyStatementCopy = localize('privacy statement', "privacy statement");

View File

@@ -22,6 +22,8 @@ import { GettingStartedInput, gettingStartedInputTypeId } from 'vs/workbench/con
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
import product from 'vs/platform/product/common/product';
import { getTelemetryConfiguration } from 'vs/platform/telemetry/common/telemetryUtils';
import { TelemetryConfiguration } from 'vs/platform/telemetry/common/telemetry';
const configurationKey = 'workbench.startupEditor';
const oldConfigurationKey = 'workbench.welcome.enabled';
@@ -50,7 +52,7 @@ export class WelcomePageContribution implements IWorkbenchContribution {
// Always open Welcome page for first-launch, no matter what is open or which startupEditor is set.
if (
product.enableTelemetry
&& this.configurationService.getValue('telemetry.enableTelemetry')
&& getTelemetryConfiguration(this.configurationService) !== TelemetryConfiguration.OFF
&& !this.environmentService.skipWelcome
&& !this.storageService.get(telemetryOptOutStorageKey, StorageScope.GLOBAL)
) {

View File

@@ -14,8 +14,9 @@ import { getServiceMachineId } from 'vs/platform/serviceMachineId/common/service
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { isWeb } from 'vs/base/common/platform';
import { ILogService } from 'vs/platform/log/common/log';
import { getTelemetryLevel, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { getTelemetryConfiguration, getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { TelemetryConfiguration, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
class ExtensionResourceLoaderService implements IExtensionResourceLoaderService {
@@ -51,7 +52,7 @@ class ExtensionResourceLoaderService implements IExtensionResourceLoaderService
'X-Client-Name': `${this._productService.applicationName}${isWeb ? '-web' : ''}`,
'X-Client-Version': this._productService.version
};
if (getTelemetryLevel(this._productService, this._environmentService) >= TelemetryLevel.USER && this._configurationService.getValue('telemetry.enableTelemetry') === true) {
if (getTelemetryLevel(this._productService, this._environmentService) >= TelemetryLevel.USER && getTelemetryConfiguration(this._configurationService) === TelemetryConfiguration.ON) {
requestInit.headers['X-Machine-Id'] = machineId;
}
if (this._productService.commit) {

View File

@@ -3,8 +3,8 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { ITelemetryService, ITelemetryInfo, ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
import { getTelemetryLevel, NullTelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils';
import { ITelemetryService, ITelemetryInfo, ITelemetryData, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
import { getTelemetryLevel, NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { Disposable } from 'vs/base/common/lifecycle';
import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService';