add telemetry appender that writes to log (#53603)

* add log-telemetry-appender and wire it up in the shell

* enable log-only-telemetry in scripts/code.[sh|bat]

* Reduce noise, separate log file for telemetry

* Print telemetry events from shared process to corresponding log channel

* Telemetry events for cli go to the log file for cli

* Merge cli telemetry with all data with cli log

* Use LogAppender when running from source

* Skip check on isBuilt as the same is done in the shared process

* Telemetry events from main process go to corresponding log file

* Telemetry events from issue reporter go to corresponding log file

* Cleanup to reduce diff amount as I have OCD

* More cleanup

* Open telemetry log file via the Open Log File command

* Use regex to strip out common data

* Tests
This commit is contained in:
Johannes Rieken
2018-07-11 21:21:40 +02:00
committed by Ramya Rao
parent ab4338f19d
commit 19f25e4801
10 changed files with 132 additions and 35 deletions

View File

@@ -23,7 +23,7 @@ import { getDelayedChannel } from 'vs/base/parts/ipc/common/ipc';
import { connect as connectNet } from 'vs/base/parts/ipc/node/ipc.net';
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
import { IWindowConfiguration, IWindowsService } from 'vs/platform/windows/common/windows';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
import { NullTelemetryService, combinedAppender, LogAppender } from 'vs/platform/telemetry/common/telemetryUtils';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
import { ITelemetryAppenderChannel, TelemetryAppenderClient } from 'vs/platform/telemetry/common/telemetryIpc';
@@ -287,9 +287,9 @@ export class IssueReporter extends Disposable {
.then(() => connectNet(this.environmentService.sharedIPCHandle, `window:${configuration.windowId}`));
const instantiationService = new InstantiationService(serviceCollection, true);
if (this.environmentService.isBuilt && !this.environmentService.isExtensionDevelopment && !this.environmentService.args['disable-telemetry'] && !!product.enableTelemetry) {
if (!this.environmentService.isExtensionDevelopment && !this.environmentService.args['disable-telemetry'] && !!product.enableTelemetry) {
const channel = getDelayedChannel<ITelemetryAppenderChannel>(sharedProcess.then(c => c.getChannel('telemetryAppender')));
const appender = new TelemetryAppenderClient(channel);
const appender = combinedAppender(new TelemetryAppenderClient(channel), new LogAppender(logService));
const commonProperties = resolveCommonProperties(product.commit, pkg.version, configuration.machineId, this.environmentService.installSourcePath);
const piiPaths = [this.environmentService.appRoot, this.environmentService.extensionsPath];
const config: ITelemetryServiceConfig = { appender, commonProperties, piiPaths };