Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLogan Ramos <lramos15@gmail.com>2022-11-11 00:55:09 +0300
committerGitHub <noreply@github.com>2022-11-11 00:55:09 +0300
commiteccee071eb1a36c76fb5b7aa882640ce2b0da59a (patch)
tree30bf37ad3ce2a32619b7c111f11c86353fdf6df8
parent96bf637c101b8832e44a97a27a26305d8c2cf22e (diff)
Enable telemetry logging only in OSS (#166032)
* Enable telemetry logging only in OSS * Remove unnecessary comment * Update comment
-rw-r--r--src/vs/platform/telemetry/common/telemetryUtils.ts28
-rw-r--r--src/vs/workbench/api/browser/mainThreadTelemetry.ts6
-rw-r--r--src/vs/workbench/api/common/extHost.protocol.ts2
-rw-r--r--src/vs/workbench/api/common/extHostTelemetry.ts23
-rw-r--r--src/vs/workbench/api/test/browser/extHostTelemetry.test.ts10
-rw-r--r--src/vs/workbench/contrib/logs/common/logs.contribution.ts9
6 files changed, 61 insertions, 17 deletions
diff --git a/src/vs/platform/telemetry/common/telemetryUtils.ts b/src/vs/platform/telemetry/common/telemetryUtils.ts
index c20977f9e25..1b02638b6a5 100644
--- a/src/vs/platform/telemetry/common/telemetryUtils.ts
+++ b/src/vs/platform/telemetry/common/telemetryUtils.ts
@@ -113,10 +113,38 @@ export function configurationTelemetry(telemetryService: ITelemetryService, conf
* @returns false - telemetry is completely disabled, true - telemetry is logged locally, but may not be sent
*/
export function supportsTelemetry(productService: IProductService, environmentService: IEnvironmentService): boolean {
+ // If it's OSS and telemetry isn't disabled via the CLI we will allow it for logging only purposes
+ if (!environmentService.isBuilt && !environmentService.disableTelemetry) {
+ return true;
+ }
return !(environmentService.disableTelemetry || !productService.enableTelemetry || environmentService.extensionTestsLocationURI);
}
/**
+ * Checks to see if we're in logging only mode to debug telemetry.
+ * This is if telemetry is enabled and we're in OSS, but no telemetry key is provided so it's not being sent just logged.
+ * @param productService
+ * @param environmentService
+ * @returns True if telemetry is actually disabled and we're only logging for debug purposes
+ */
+export function isLoggingOnly(productService: IProductService, environmentService: IEnvironmentService): boolean {
+ // Logging only mode is only for OSS
+ if (environmentService.isBuilt) {
+ return false;
+ }
+
+ if (environmentService.disableTelemetry) {
+ return false;
+ }
+
+ if (productService.enableTelemetry && productService.aiConfig?.ariaKey) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
* Determines how telemetry is handled based on the user's configuration.
*
* @param configurationService
diff --git a/src/vs/workbench/api/browser/mainThreadTelemetry.ts b/src/vs/workbench/api/browser/mainThreadTelemetry.ts
index 1d5ba159d83..a7e1155da0d 100644
--- a/src/vs/workbench/api/browser/mainThreadTelemetry.ts
+++ b/src/vs/workbench/api/browser/mainThreadTelemetry.ts
@@ -8,7 +8,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
import { IProductService } from 'vs/platform/product/common/productService';
import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings';
import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
-import { supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
+import { isLoggingOnly, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers';
import { ExtHostContext, ExtHostTelemetryShape, MainContext, MainThreadTelemetryShape } from '../common/extHost.protocol';
@@ -33,8 +33,8 @@ export class MainThreadTelemetry extends Disposable implements MainThreadTelemet
this._proxy.$onDidChangeTelemetryLevel(level);
}));
}
-
- this._proxy.$initializeTelemetryLevel(this.telemetryLevel, this._productService.enabledTelemetryLevels);
+ const loggingOnly = isLoggingOnly(this._productService, this._environmentService);
+ this._proxy.$initializeTelemetryLevel(this.telemetryLevel, loggingOnly, this._productService.enabledTelemetryLevels);
}
private get telemetryLevel(): TelemetryLevel {
diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts
index 8ebcb32fb66..d2619e0c342 100644
--- a/src/vs/workbench/api/common/extHost.protocol.ts
+++ b/src/vs/workbench/api/common/extHost.protocol.ts
@@ -1790,7 +1790,7 @@ export interface ExtHostQuickOpenShape {
}
export interface ExtHostTelemetryShape {
- $initializeTelemetryLevel(level: TelemetryLevel, productConfig?: { usage: boolean; error: boolean }): void;
+ $initializeTelemetryLevel(level: TelemetryLevel, debugLoggingOnly: boolean, productConfig?: { usage: boolean; error: boolean }): void;
$onDidChangeTelemetryLevel(level: TelemetryLevel): void;
}
diff --git a/src/vs/workbench/api/common/extHostTelemetry.ts b/src/vs/workbench/api/common/extHostTelemetry.ts
index 08e1df2e991..2db079c8be6 100644
--- a/src/vs/workbench/api/common/extHostTelemetry.ts
+++ b/src/vs/workbench/api/common/extHostTelemetry.ts
@@ -27,6 +27,7 @@ export class ExtHostTelemetry implements ExtHostTelemetryShape {
private _productConfig: { usage: boolean; error: boolean } = { usage: true, error: true };
private _level: TelemetryLevel = TelemetryLevel.NONE;
private _oldTelemetryEnablement: boolean | undefined;
+ private _inLoggingOnlyMode: boolean = false;
private readonly _outputLogger: ILogger;
private readonly _telemetryLoggers = new Map<string, ExtHostTelemetryLogger>();
@@ -53,14 +54,22 @@ export class ExtHostTelemetry implements ExtHostTelemetryShape {
instantiateLogger(extension: IExtensionDescription, appender: vscode.TelemetryAppender) {
const telemetryDetails = this.getTelemetryDetails();
- const logger = new ExtHostTelemetryLogger(appender, extension, this._outputLogger, this.getBuiltInCommonProperties(extension), { isUsageEnabled: telemetryDetails.isUsageEnabled, isErrorsEnabled: telemetryDetails.isErrorsEnabled });
+ const logger = new ExtHostTelemetryLogger(
+ appender,
+ extension,
+ this._outputLogger,
+ this._inLoggingOnlyMode,
+ this.getBuiltInCommonProperties(extension),
+ { isUsageEnabled: telemetryDetails.isUsageEnabled, isErrorsEnabled: telemetryDetails.isErrorsEnabled }
+ );
this._telemetryLoggers.set(extension.identifier.value, logger);
return logger.apiTelemetryLogger;
}
- $initializeTelemetryLevel(level: TelemetryLevel, productConfig?: { usage: boolean; error: boolean }): void {
+ $initializeTelemetryLevel(level: TelemetryLevel, loggingOnlyMode: boolean, productConfig?: { usage: boolean; error: boolean }): void {
this._level = level;
- this._productConfig = productConfig || { usage: true, error: true };
+ this._inLoggingOnlyMode = loggingOnlyMode;
+ this._productConfig = productConfig ?? { usage: true, error: true };
}
getBuiltInCommonProperties(extension: IExtensionDescription): Record<string, string | boolean | number | undefined> {
@@ -126,8 +135,10 @@ export class ExtHostTelemetryLogger {
appender: vscode.TelemetryAppender,
private readonly _extension: IExtensionDescription,
private readonly _logger: ILogger,
+ private readonly _inLoggingOnlyMode: boolean,
private readonly _commonProperties: Record<string, any>,
- telemetryEnablements: { isUsageEnabled: boolean; isErrorsEnabled: boolean }) {
+ telemetryEnablements: { isUsageEnabled: boolean; isErrorsEnabled: boolean }
+ ) {
this._appender = appender;
this._telemetryEnablements = { isUsageEnabled: telemetryEnablements.isUsageEnabled, isErrorsEnabled: telemetryEnablements.isErrorsEnabled };
}
@@ -173,7 +184,9 @@ export class ExtHostTelemetryLogger {
eventName = this._extension.identifier.value + '/' + eventName;
}
data = this.mixInCommonPropsAndCleanData(data || {});
- this._appender.logEvent(eventName, data);
+ if (!this._inLoggingOnlyMode) {
+ this._appender.logEvent(eventName, data);
+ }
this._logger.trace(eventName, data);
}
diff --git a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts
index b002ce85d40..0fd8f9f75d5 100644
--- a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts
+++ b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts
@@ -68,7 +68,7 @@ suite('ExtHostTelemetry', function () {
override telemetryInfo: ITelemetryInfo = mockTelemetryInfo;
override remote = mockRemote;
}, new TestTelemetryLoggerService(DEFAULT_LOG_LEVEL));
- extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.USAGE, { usage: true, error: true });
+ extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.USAGE, false, { usage: true, error: true });
return extensionTelemetry;
};
@@ -100,19 +100,19 @@ suite('ExtHostTelemetry', function () {
assert.strictEqual(config.isErrorsEnabled, true);
// Initialize would never be called twice, but this is just for testing
- extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.ERROR, { usage: true, error: true });
+ extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.ERROR, false, { usage: true, error: true });
config = extensionTelemetry.getTelemetryDetails();
assert.strictEqual(config.isCrashEnabled, true);
assert.strictEqual(config.isUsageEnabled, false);
assert.strictEqual(config.isErrorsEnabled, true);
- extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.CRASH, { usage: true, error: true });
+ extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.CRASH, false, { usage: true, error: true });
config = extensionTelemetry.getTelemetryDetails();
assert.strictEqual(config.isCrashEnabled, true);
assert.strictEqual(config.isUsageEnabled, false);
assert.strictEqual(config.isErrorsEnabled, false);
- extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.USAGE, { usage: false, error: true });
+ extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.USAGE, false, { usage: false, error: true });
config = extensionTelemetry.getTelemetryDetails();
assert.strictEqual(config.isCrashEnabled, true);
assert.strictEqual(config.isUsageEnabled, false);
@@ -181,7 +181,7 @@ suite('ExtHostTelemetry', function () {
override telemetryInfo: ITelemetryInfo = mockTelemetryInfo;
override remote = mockRemote;
}, loggerService);
- extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.USAGE, { usage: true, error: true });
+ extensionTelemetry.$initializeTelemetryLevel(TelemetryLevel.USAGE, false, { usage: true, error: true });
const functionSpy: TelemetryLoggerSpy = { dataArr: [], exceptionArr: [], flushCalled: false };
diff --git a/src/vs/workbench/contrib/logs/common/logs.contribution.ts b/src/vs/workbench/contrib/logs/common/logs.contribution.ts
index e5348d71050..e57f3c9401a 100644
--- a/src/vs/workbench/contrib/logs/common/logs.contribution.ts
+++ b/src/vs/workbench/contrib/logs/common/logs.contribution.ts
@@ -17,7 +17,7 @@ import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
import { ILogService, LogLevel } from 'vs/platform/log/common/log';
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
-import { supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
+import { isLoggingOnly, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils';
import { IProductService } from 'vs/platform/product/common/productService';
import { URI } from 'vs/base/common/uri';
@@ -55,8 +55,11 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution {
const registerTelemetryChannel = () => {
if (supportsTelemetry(this.productService, this.environmentService) && this.logService.getLevel() === LogLevel.Trace) {
- this.registerLogChannel(Constants.telemetryLogChannelId, nls.localize('telemetryLog', "Telemetry"), this.environmentService.telemetryLogResource);
- this.registerLogChannel(Constants.extensionTelemetryLogChannelId, nls.localize('extensionTelemetryLog', "Extension Telemetry"), this.environmentService.extHostTelemetryLogFile);
+ // Not a perfect check, but a nice way to indicate if we only have logging enabled for debug purposes and nothing is actually being sent
+ const justLoggingAndNotSending = isLoggingOnly(this.productService, this.environmentService);
+ const logSuffix = justLoggingAndNotSending ? ' (Logging Only)' : '';
+ this.registerLogChannel(Constants.telemetryLogChannelId, nls.localize('telemetryLog', "Telemetry{0}", logSuffix), this.environmentService.telemetryLogResource);
+ this.registerLogChannel(Constants.extensionTelemetryLogChannelId, nls.localize('extensionTelemetryLog', "Extension Telemetry{0}", logSuffix), this.environmentService.extHostTelemetryLogFile);
return true;
}
return false;