more GDPR classification

This commit is contained in:
kieferrm
2017-09-25 18:36:43 -07:00
committed by Kai Maetzel
parent b9488b7278
commit ff3c64855c
34 changed files with 441 additions and 1 deletions
@@ -140,6 +140,11 @@ export class MainThreadEditors implements MainThreadEditorsShape {
$tryShowEditor(id: string, position: EditorPosition): TPromise<void> {
// check how often this is used
/* __GDPR__
"api.deprecated" : {
"function" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this._telemetryService.publicLog('api.deprecated', { function: 'TextEditor.show' });
let mainThreadEditor = this._documentsAndEditors.getEditor(id);
@@ -155,6 +160,11 @@ export class MainThreadEditors implements MainThreadEditorsShape {
$tryHideEditor(id: string): TPromise<void> {
// check how often this is used
/* __GDPR__
"api.deprecated" : {
"function" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this._telemetryService.publicLog('api.deprecated', { function: 'TextEditor.hide' });
let mainThreadEditor = this._documentsAndEditors.getEditor(id);
@@ -266,6 +266,11 @@ export class SaveParticipant implements ISaveParticipant {
});
return sequence(promiseFactory).then(() => {
/* __GDPR__
"saveParticipantStats" : {
}
*/
// TODO: We need to move off dynamic property names as we can't declare them statically in the registry.
this._telemetryService.publicLog('saveParticipantStats', stats);
});
}
+11
View File
@@ -108,6 +108,11 @@ export abstract class Composite extends Component implements IComposite {
// Only submit telemetry data when not running from an integration test
if (this._telemetryService && this._telemetryService.publicLog) {
const eventName: string = 'compositeOpen';
/* __GDPR__
"compositeOpen" : {
"composite" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this._telemetryService.publicLog(eventName, { composite: this.getId() });
}
}
@@ -121,6 +126,12 @@ export abstract class Composite extends Component implements IComposite {
if (this._telemetryService && this._telemetryService.publicLog) {
const eventName: string = 'compositeShown';
this._telemetryData.composite = this.getId();
/* __GDPR__
"compositeShown" : {
"timeSpent" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"composite": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this._telemetryService.publicLog(eventName, this._telemetryData);
}
}
@@ -309,6 +309,12 @@ export abstract class CompositePart<T extends Composite> extends Part {
// Log in telemetry
if (this.telemetryService) {
/* __GDPR__
"workbenchActionExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('workbenchActionExecuted', { id: e.action.id, from: this.nameForTelemetry });
}
});
@@ -443,6 +443,9 @@ export class EditorGroupsControl extends Themable implements IEditorGroupsContro
// Log this fact in telemetry
if (this.telemetryService) {
/* __GDPR__
"workbenchEditorMaximized" : {}
*/
this.telemetryService.publicLog('workbenchEditorMaximized');
}
@@ -166,6 +166,13 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService
this.revealIfOpen = editorConfig.revealIfOpen;
/* __GDPR__
"workbenchEditorConfiguration" : {
"${include}": [
"${IWorkbenchEditorConfiguration}"
]
}
*/
this.telemetryService.publicLog('workbenchEditorConfiguration', editorConfig);
} else {
this.tabOptions = {
@@ -248,10 +255,24 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService
}
private onEditorOpened(identifier: EditorIdentifier): void {
/* __GDPR__
"editorOpened" : {
"${include}": [
"${EditorTelemetryDescriptor}"
]
}
*/
this.telemetryService.publicLog('editorOpened', identifier.editor.getTelemetryDescriptor());
}
private onEditorClosed(event: EditorCloseEvent): void {
/* __GDPR__
"editorClosed" : {
"${include}": [
"${EditorTelemetryDescriptor}"
]
}
*/
this.telemetryService.publicLog('editorClosed', event.editor.getTelemetryDescriptor());
}
@@ -259,6 +259,12 @@ export abstract class TitleControl extends Themable implements ITitleAreaControl
// Log in telemetry
if (this.telemetryService) {
/* __GDPR__
"workbenchActionExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('workbenchActionExecuted', { id: e.action.id, from: 'editorPart' });
}
}));
@@ -552,6 +552,12 @@ export class QuickOpenController extends Component implements IQuickOpenService
const registry = Registry.as<IQuickOpenRegistry>(Extensions.Quickopen);
const handlerDescriptor = registry.getQuickOpenHandler(prefix) || registry.getDefaultQuickOpenHandler();
/* __GDPR__
"quickOpenWidgetShown" : {
"mode" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"quickNavigate": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('quickOpenWidgetShown', { mode: handlerDescriptor.getId(), quickNavigate: quickNavigateConfiguration });
// Trigger onOpen
@@ -293,6 +293,12 @@ class StatusBarEntryItem implements IStatusbarItem {
const action = this.instantiationService.createInstance(builtInActionDescriptor.syncDescriptor);
if (action.enabled) {
/* __GDPR__
"workbenchActionExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('workbenchActionExecuted', { id: action.id, from: 'status bar' });
(action.run() || TPromise.as(null)).done(() => {
action.dispose();
+6
View File
@@ -170,6 +170,12 @@ function triggerAndDisposeAction(instantitationService: IInstantiationService, t
const from = args && args.from || 'keybinding';
if (telemetryService) {
/* __GDPR__
"workbenchActionExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
telemetryService.publicLog('workbenchActionExecuted', { id: actionInstance.id, from });
}
+18
View File
@@ -203,6 +203,11 @@ export abstract class EditorInput implements IEditorInput {
* Subclasses should extend if they can contribute.
*/
public getTelemetryDescriptor(): object {
/* __GDPR__FRAGMENT__
"EditorTelemetryDescriptor" : {
"typeId" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
return { typeId: this.getTypeId() };
}
@@ -792,6 +797,19 @@ export const EditorOpenPositioning = {
};
export interface IWorkbenchEditorConfiguration {
/* __GDPR__FRAGMENT__
"IWorkbenchEditorConfiguration" : {
"showTabs" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"tabCloseButton": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"showIcons": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"enablePreview": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"enablePreviewFromQuickOpen": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"closeOnFileDelete": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"openPositioning": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"revealIfOpen": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"swipeToNavigate": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
workbench: {
editor: {
showTabs: boolean;
@@ -72,6 +72,11 @@ export class ResourceEditorInput extends EditorInput {
const descriptor = super.getTelemetryDescriptor();
descriptor['resource'] = telemetryURIDescriptor(this.resource);
/* __GDPR__FRAGMENT__
"EditorTelemetryDescriptor" : {
"resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
return descriptor;
}
@@ -254,6 +254,11 @@ export class UntitledEditorInput extends EditorInput implements IEncodingSupport
const descriptor = super.getTelemetryDescriptor();
descriptor['resource'] = telemetryURIDescriptor(this.getResource());
/* __GDPR__FRAGMENT__
"EditorTelemetryDescriptor" : {
"resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
return descriptor;
}
@@ -32,6 +32,12 @@ export class NodeCachedDataManager {
// log each failure separately
if (err) {
/* __GDPR__
"cachedDataError" : {
"errorCode" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"path": { "endPoint": "none", "classification": "CustomerContent", "purpose": "PerformanceAndHealth" }
}
*/
this._telemetryService.publicLog('cachedDataError', {
errorCode: err.errorCode,
path: basename(err.path)
@@ -40,6 +46,13 @@ export class NodeCachedDataManager {
}
// log summary
/* __GDPR__
"cachedDataInfo" : {
"didRequestCachedData" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"didRejectCachedData": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"didProduceCachedData": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
}
*/
this._telemetryService.publicLog('cachedDataInfo', {
didRequestCachedData: Boolean(global.require.getConfig().nodeCachedDataDir),
didRejectCachedData,
@@ -199,6 +199,25 @@ export class WorkbenchShell {
// Telemetry: workspace info
const { filesToOpen, filesToCreate, filesToDiff } = this.configuration;
/* __GDPR__
"workspaceLoad" : {
"userAgent" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"windowSize": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"emptyWorkbench": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"workbench.filesToOpen": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"workbench.filesToCreate": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"workbench.filesToDiff": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"customKeybindingsCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"theme": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"language": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "BusinessInsight" },
"experiments": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "BusinessInsight" },
"pinnedViewlets": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"restoredViewlet": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"restoredEditors": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"pinnedViewlets": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"startupKind": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
}
*/
this.telemetryService.publicLog('workspaceLoad', {
userAgent: navigator.userAgent,
windowSize: { innerHeight: window.innerHeight, innerWidth: window.innerWidth, outerHeight: window.outerHeight, outerWidth: window.outerWidth },
@@ -221,6 +240,13 @@ export class WorkbenchShell {
this.timerService.restoreEditorsDuration = info.restoreEditorsDuration;
this.timerService.restoreViewletDuration = info.restoreViewletDuration;
this.extensionService.onReady().done(() => {
/* __GDPR__
"startupTime" : {
"${include}": [
"${IStartupMetrics}"
]
}
*/
this.telemetryService.publicLog('startupTime', this.timerService.startupMetrics);
});
@@ -288,6 +314,12 @@ export class WorkbenchShell {
const idleMonitor = new IdleMonitor(2 * 60 * 1000); // 2 minutes
const listener = idleMonitor.onStatusChange(status =>
/* __GDPR__
"UserIdleStart" : {}
*/
/* __GDPR__
"UserIdleStop" : {}
*/
this.telemetryService.publicLog(status === UserStatus.Active
? TelemetryService.IDLE_STOP_EVENT_NAME
: TelemetryService.IDLE_START_EVENT_NAME
@@ -145,6 +145,12 @@ export class ElectronWindow extends Themable {
}
this.commandService.executeCommand(request.id, ...args).done(_ => {
/* __GDPR__
"commandExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('commandExecuted', { id: request.id, from: request.from });
}, err => {
this.messageService.show(Severity.Error, err);
@@ -102,6 +102,12 @@ export class DebugActionsWidget extends Themable implements IWorkbenchContributi
// log in telemetry
if (this.telemetryService) {
/* __GDPR__
"workbenchActionExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('workbenchActionExecuted', { id: e.action.id, from: 'debugActionsWidget' });
}
}));
@@ -141,6 +147,11 @@ export class DebugActionsWidget extends Themable implements IWorkbenchContributi
private storePosition(): void {
const position = parseFloat(this.$el.getComputedStyle().left) / window.innerWidth;
this.storageService.store(DEBUG_ACTIONS_WIDGET_POSITION_KEY, position, StorageScope.WORKSPACE);
/* __GDPR__
"debug.actionswidgetposition" : {
"position" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog(DEBUG_ACTIONS_WIDGET_POSITION_KEY, { position });
}
@@ -411,6 +411,9 @@ export class DebugEditorContribution implements IDebugEditorContribution {
}
public addLaunchConfiguration(): TPromise<any> {
/* __GDPR__
"debug/addLaunchConfiguration" : {}
*/
this.telemetryService.publicLog('debug/addLaunchConfiguration');
let configurationsArrayPosition: Position;
const model = this.editor.getModel();
@@ -341,6 +341,7 @@ export class DebugService implements debug.IDebugService {
// only log telemetry events from debug adapter if the adapter provided the telemetry key
// and the user opted in telemetry
if (session.customTelemetryService && this.telemetryService.isOptedIn) {
// TODO Need to move off dynamic event names or properties. They cannot be registered upfront.
session.customTelemetryService.publicLog(event.body.output, event.body.data);
}
@@ -607,6 +608,9 @@ export class DebugService implements debug.IDebugService {
}
public addReplExpression(name: string): TPromise<void> {
/* __GDPR__
"debugService/addReplExpression" : {}
*/
this.telemetryService.publicLog('debugService/addReplExpression');
return this.model.addReplExpression(this.viewModel.focusedProcess, this.viewModel.focusedStackFrame, name)
// Evaluate all watch expressions and fetch variables again since repl evaluation might have changed some.
@@ -909,6 +913,17 @@ export class DebugService implements debug.IDebugService {
}
this.updateStateAndEmit(session.getId(), debug.State.Running);
/* __GDPR__
"debugSessionStart" : {
"type" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"breakpointCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"exceptionBreakpoints": { "endPoint": "none", "classification": "CustomerContent", "purpose": "FeatureInsight" },
"watchExpressionsCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"extensionName": { "endPoint": "none", "classification": "PublicPersonalData", "purpose": "FeatureInsight" },
"isBuiltin": { "endPoint": "none", "classification": "SystemMetaData", "purpose": ",FeatureInsight" },
"launchJsonExists": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
return this.telemetryService.publicLog('debugSessionStart', {
type: configuration.type,
breakpointCount: this.model.getBreakpoints().length,
@@ -925,6 +940,12 @@ export class DebugService implements debug.IDebugService {
}
const errorMessage = error instanceof Error ? error.message : error;
/* __GDPR__
"debugMisconfiguration" : {
"type" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"error": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('debugMisconfiguration', { type: configuration ? configuration.type : undefined, error: errorMessage });
this.updateStateAndEmit(session.getId(), debug.State.Inactive);
if (!session.disconnected) {
@@ -1039,6 +1060,15 @@ export class DebugService implements debug.IDebugService {
private onSessionEnd(session: RawDebugSession): void {
const bpsExist = this.model.getBreakpoints().length > 0;
const process = this.model.getProcesses().filter(p => p.getId() === session.getId()).pop();
/* __GDPR__
"debugSessionStop" : {
"type" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"success": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"sessionLengthInSeconds": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"breakpointCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"watchExpressionsCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('debugSessionStop', {
type: process && process.configuration.type,
success: session.emittedStopped || !bpsExist,
@@ -164,8 +164,18 @@ export class RawDebugSession extends V8Protocol implements debug.ISession {
const errorMessage = errorResponse ? errorResponse.message : '';
const telemetryMessage = error ? debug.formatPII(error.format, true, error.variables) : errorMessage;
if (error && error.sendTelemetry) {
/* __GDPR__
"debugProtocolErrorResponse" : {
"error" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('debugProtocolErrorResponse', { error: telemetryMessage });
if (this.customTelemetryService) {
/* __GDPR__
"debugProtocolErrorResponse" : {
"error" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.customTelemetryService.publicLog('debugProtocolErrorResponse', { error: telemetryMessage });
}
}
@@ -265,6 +265,13 @@ export class ExtensionEditor extends BaseEditor {
this.transientDisposables = dispose(this.transientDisposables);
/* __GDPR__
"extensionGallery:openExtension" : {
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
this.telemetryService.publicLog('extensionGallery:openExtension', extension.telemetryData);
this.extensionReadme = new Cache(() => extension.getReadme());
@@ -114,6 +114,12 @@ export class ExtensionTipsService implements IExtensionTipsService {
const exeBased = distinct(this._exeBasedRecommendations);
/* __GDPR__
"extensionRecommendations:unfiltered" : {
"fileBased" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"exeBased": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionRecommendations:unfiltered', { fileBased, exeBased });
return distinct([...fileBased, ...exeBased]);
@@ -247,6 +253,12 @@ export class ExtensionTipsService implements IExtensionTipsService {
this.choiceService.choose(Severity.Info, message, options, 2).done(choice => {
switch (choice) {
case 0:
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'show', extensionId: name });
return recommendationsAction.run();
case 1: this.importantRecommendationsIgnoreList.push(id);
@@ -255,12 +267,30 @@ export class ExtensionTipsService implements IExtensionTipsService {
JSON.stringify(this.importantRecommendationsIgnoreList),
StorageScope.GLOBAL
);
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'neverShowAgain', extensionId: name });
return this.ignoreExtensionRecommendations();
case 2:
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'close', extensionId: name });
}
}, () => {
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'cancelled', extensionId: name });
});
});
@@ -305,15 +335,35 @@ export class ExtensionTipsService implements IExtensionTipsService {
this.choiceService.choose(Severity.Info, message, options, 2).done(choice => {
switch (choice) {
case 0:
this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'show' });
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'show' });
return action.run();
case 1:
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'neverShowAgain' });
return this.storageService.store(storageKey, true, StorageScope.WORKSPACE);
case 2:
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'close' });
}
}, () => {
/* __GDPR__
"extensionRecommendations:popup" : {
"userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'cancelled' });
});
});
@@ -72,6 +72,19 @@ export class KeymapExtensions implements IWorkbenchContribution {
newKeymap: newKeymap.identifier,
oldKeymaps: oldKeymaps.map(k => k.identifier)
};
/* __GDPR__FRAGMENT__
"KeyMapsData" : {
"newKeymap" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"oldKeymaps": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
/* __GDPR__
"disableOtherKeymapsConfirmation" : {
"${include}": [
"${KeyMapsData}"
]
}
*/
this.telemetryService.publicLog('disableOtherKeymapsConfirmation', telemetryData);
const message = localize('disableOtherKeymapsConfirmation', "Disable other keymaps ({0}) to avoid conflicts between keybindings?", oldKeymaps.map(k => `'${k.local.manifest.displayName}'`).join(', '));
const options = [
@@ -82,6 +95,14 @@ export class KeymapExtensions implements IWorkbenchContribution {
.then(value => {
const confirmed = value === 0;
telemetryData['confirmed'] = confirmed;
/* __GDPR__
"disableOtherKeymaps" : {
"confirmed" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"${include}": [
"${keyMapsData}"
]
}
*/
this.telemetryService.publicLog('disableOtherKeymaps', telemetryData);
if (confirmed) {
return TPromise.join(oldKeymaps.map(keymap => {
@@ -153,11 +174,19 @@ export class BetterMergeDisabled implements IWorkbenchContribution {
extensionService.onReady().then(() => {
if (storageService.getBoolean(BetterMergeDisabledNowKey, StorageScope.GLOBAL, false)) {
storageService.remove(BetterMergeDisabledNowKey, StorageScope.GLOBAL);
/* __GDPR__
"betterMergeDisabled" : {}
*/
telemetryService.publicLog('betterMergeDisabled');
messageService.show(Severity.Info, {
message: localize('betterMergeDisabled', "The Better Merge extension is now built-in, the installed extension was disabled and can be uninstalled."),
actions: [
new Action('uninstall', localize('uninstall', "Uninstall"), null, true, () => {
/* __GDPR__
"betterMergeUninstall" : {
"outcome" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
telemetryService.publicLog('betterMergeUninstall', {
outcome: 'uninstall',
});
@@ -167,6 +196,11 @@ export class BetterMergeDisabled implements IWorkbenchContribution {
});
}),
new Action('later', localize('later', "Later"), null, true, () => {
/* __GDPR__
"betterMergeUninstall" : {
"outcome" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
telemetryService.publicLog('betterMergeUninstall', {
outcome: 'later',
});
@@ -315,6 +315,11 @@ export class ExtensionsListView extends ViewsViewletPanel {
.filter(name => local.every(ext => `${ext.publisher}.${ext.name}` !== name))
.filter(name => name.toLowerCase().indexOf(value) > -1);
/* __GDPR__
"extensionRecommendations:open" : {
"count" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionRecommendations:open', { count: names.length });
if (!names.length) {
@@ -334,6 +339,11 @@ export class ExtensionsListView extends ViewsViewletPanel {
return this.tipsService.getWorkspaceRecommendations()
.then(recommendations => {
const names = recommendations.filter(name => name.toLowerCase().indexOf(value) > -1);
/* __GDPR__
"extensionWorkspaceRecommendations:open" : {
"count" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionWorkspaceRecommendations:open', { count: names.length });
if (!names.length) {
@@ -349,6 +359,11 @@ export class ExtensionsListView extends ViewsViewletPanel {
const value = query.value.replace(/@recommended:keymaps/g, '').trim().toLowerCase();
const names = this.tipsService.getKeymapRecommendations()
.filter(name => name.toLowerCase().indexOf(value) > -1);
/* __GDPR__
"extensionKeymapRecommendations:open" : {
"count" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('extensionKeymapRecommendations:open', { count: names.length });
if (!names.length) {
@@ -418,6 +418,13 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
}
open(extension: IExtension, sideByside: boolean = false): TPromise<any> {
/* __GDPR__
"extensionGallery:open" : {
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
this.telemetryService.publicLog('extensionGallery:open', extension.telemetryData);
return this.editorService.openEditor(this.instantiationService.createInstance(ExtensionsInput, extension), null, sideByside);
}
@@ -527,6 +534,20 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
}
return this.promptAndSetEnablement(extension, enable, workspace).then(reload => {
/* __GDPR__
"extension:enabled" : {
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
/* __GDPR__
"extension:disable" : {
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
this.telemetryService.publicLog(enable ? 'extension:enable' : 'extension:disable', extension.telemetryData);
});
}
@@ -794,6 +815,30 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
const duration = new Date().getTime() - active.start.getTime();
const eventName = toTelemetryEventName(active.operation);
/* __GDPR__
"extensionGallery:install" : {
"duration" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
/* __GDPR__
"extensionGallery:update" : {
"duration" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
/* __GDPR__
"extensionGallery:uninstall" : {
"duration" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
this.telemetryService.publicLog(eventName, assign(data, { success: !errorcode, duration, errorcode }));
}
@@ -537,6 +537,12 @@ export class FileController extends DefaultController {
public openEditor(stat: FileStat, options: { preserveFocus: boolean; sideBySide: boolean; pinned: boolean; }): void {
if (stat && !stat.isDirectory) {
/* __GDPR__
"workbenchActionExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('workbenchActionExecuted', { id: 'workbench.files.openFile', from: 'explorer' });
this.editorService.openEditor({ resource: stat.resource, options }, options.sideBySide).done(null, errors.onUnexpectedError);
@@ -273,6 +273,12 @@ export class Controller extends DefaultController {
public openEditor(element: OpenEditor, options: { preserveFocus: boolean; pinned: boolean; sideBySide: boolean; }): void {
if (element) {
/* __GDPR__
"workbenchActionExecuted" : {
"id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('workbenchActionExecuted', { id: 'workbench.files.openFile', from: 'openEditors' });
let position = this.model.positionOfGroup(element.editorGroup);
if (options.sideBySide && position !== Position.THREE) {
@@ -277,6 +277,11 @@ export class FileEditorInput extends EditorInput implements IFileEditorInput {
const descriptor = super.getTelemetryDescriptor();
descriptor['resource'] = telemetryURIDescriptor(this.getResource());
/* __GDPR__FRAGMENT__
"EditorTelemetryDescriptor" : {
"resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
return descriptor;
}
@@ -148,6 +148,11 @@ export class MarkersPanel extends Panel {
public openFileAtElement(element: any, preserveFocus: boolean, sideByside: boolean, pinned: boolean): boolean {
if (element instanceof Marker) {
const marker: Marker = element;
/* __GDPR__
"problems.marker.opened" : {
"source" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('problems.marker.opened', { source: marker.marker.source });
this.editorService.openEditor({
resource: marker.resource,
@@ -41,6 +41,9 @@ export class ToggleMarkersPanelAction extends TogglePanelAction {
public run(): TPromise<any> {
let promise = super.run();
if (this.isPanelFocused()) {
/* __GDPR__
"problems.used" : {}
*/
this.telemetryService.publicLog('problems.used');
}
return promise;
@@ -63,6 +66,9 @@ export class ToggleErrorsAndWarningsAction extends TogglePanelAction {
public run(): TPromise<any> {
let promise = super.run();
if (this.isPanelFocused()) {
/* __GDPR__
"problems.used" : {}
*/
this.telemetryService.publicLog('problems.used');
}
return promise;
@@ -77,6 +83,9 @@ export class CollapseAllAction extends TreeCollapseAction {
}
public run(context?: any): TPromise<any> {
/* __GDPR__
"problems.collapseAll.used" : {}
*/
this.telemetryService.publicLog('problems.collapseAll.used');
return super.run(context);
}
@@ -132,6 +141,13 @@ export class FilterInputBoxActionItem extends BaseActionItem {
data['errors'] = this.markersPanel.markersModel.filterOptions.filterErrors;
data['warnings'] = this.markersPanel.markersModel.filterOptions.filterWarnings;
data['infos'] = this.markersPanel.markersModel.filterOptions.filterInfos;
/* __GDPR__
"problems.filter" : {
"errors" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"warnings": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"infos": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('problems.filter', data);
}
@@ -521,6 +521,12 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
emptyFilters: this.getLatestEmptyFiltersForTelemetry()
};
this.latestEmptyFilters = [];
// TODO need to move off dynamic properties as they cannot be statically registered
/* __GDPR__
"keybindings.filter" : {
"emptyFilters" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('keybindings.filter', data);
}
}
@@ -535,6 +541,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
}
private reportKeybindingAction(action: string, command: string, keybinding: ResolvedKeybinding | string): void {
// TODO need to move off dynamic event names and properties as they cannot be registered statically
this.telemetryService.publicLog(action, { command, keybinding: keybinding ? (typeof keybinding === 'string' ? keybinding : keybinding.getUserSettingsLabel()) : '' });
}
@@ -323,6 +323,12 @@ export class PreferencesEditor extends BaseEditor {
emptyFilters: this.getLatestEmptyFiltersForTelemetry()
};
this.latestEmptyFilters = [];
// TODO need to move off dynamic properties as they cannot be statically be registered
/* __GDPR__
"defaultSettings.filter" : {
"emptyFilters" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.telemetryService.publicLog('defaultSettings.filter', data);
}
}
@@ -93,6 +93,12 @@ export class WalkThroughInput extends EditorInput {
const descriptor = super.getTelemetryDescriptor();
descriptor['target'] = this.getTelemetryFrom();
descriptor['resource'] = telemetryURIDescriptor(this.options.resource);
/* __GDPR__FRAGMENT__
"EditorTelemetryDescriptor" : {
"target" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
return descriptor;
}
@@ -15,6 +15,25 @@ export interface IMemoryInfo {
sharedBytes: number;
}
/* __GDPR__FRAGMENT__
"IStartupMetrics" : {
"version" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"ellapsed" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"timers" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"timers2" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"platform" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"release" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"arch" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"totalmem" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"meminfo" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"cpus" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"initialStartup" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"hasAccessibilitySupport" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"isVMLikelyhood" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"emptyWorkbench" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" },
"loadavg" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
}
*/
export interface IStartupMetrics {
version: number;
ellapsed: number;