More granular telemetry API (#141086)

* Initial implementation of proposed telemetry API

* TelemetryDetails -> TelemetryConfiguration + proposed guards
This commit is contained in:
Logan Ramos
2022-01-20 13:34:03 -05:00
committed by GitHub
parent f36b3e7025
commit 4475ae1240
6 changed files with 83 additions and 28 deletions

View File

@@ -6,24 +6,42 @@
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { Event, Emitter } from 'vs/base/common/event';
import { ExtHostTelemetryShape } from 'vs/workbench/api/common/extHost.protocol';
import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry';
import type { TelemetryConfiguration } from 'vscode';
export class ExtHostTelemetry implements ExtHostTelemetryShape {
private readonly _onDidChangeTelemetryEnabled = new Emitter<boolean>();
readonly onDidChangeTelemetryEnabled: Event<boolean> = this._onDidChangeTelemetryEnabled.event;
private _enabled: boolean = false;
private readonly _onDidChangeTelemetryConfiguration = new Emitter<TelemetryConfiguration>();
readonly onDidChangeTelemetryConfiguration: Event<TelemetryConfiguration> = this._onDidChangeTelemetryConfiguration.event;
getTelemetryEnabled(): boolean {
return this._enabled;
private _level: TelemetryLevel = TelemetryLevel.NONE;
private _oldTelemetryEnablement: boolean | undefined;
getTelemetryConfiguration(): boolean {
return this._level === TelemetryLevel.USAGE;
}
$initializeTelemetryEnabled(enabled: boolean): void {
this._enabled = enabled;
getTelemetryDetails(): TelemetryConfiguration {
return {
isCrashEnabled: this._level >= TelemetryLevel.CRASH,
isErrorsEnabled: this._level >= TelemetryLevel.ERROR,
isUsageEnabled: this._level >= TelemetryLevel.USAGE
};
}
$onDidChangeTelemetryEnabled(enabled: boolean): void {
this._enabled = enabled;
this._onDidChangeTelemetryEnabled.fire(enabled);
$initializeTelemetryLevel(level: TelemetryLevel): void {
this._level = level;
}
$onDidChangeTelemetryLevel(level: TelemetryLevel): void {
this._oldTelemetryEnablement = this.getTelemetryConfiguration();
this._level = level;
if (this._oldTelemetryEnablement !== this.getTelemetryConfiguration()) {
this._onDidChangeTelemetryEnabled.fire(this.getTelemetryConfiguration());
}
this._onDidChangeTelemetryConfiguration.fire(this.getTelemetryDetails());
}
}