mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-17 23:35:54 +01:00
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:
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 };
|
||||
});
|
||||
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
@@ -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']
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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)
|
||||
) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user