Remove all ID fields from telemetry (#1299)

* Remove all ID fields from telemetry

* Fix how some of the fields are blanked out

* Add back blank userId

* Disable VS Code tests broken by this change
This commit is contained in:
Karl Burtram
2018-04-30 16:52:54 -07:00
committed by GitHub
parent 55e3947cf7
commit a0456bf4f7
4 changed files with 76 additions and 83 deletions

View File

@@ -33,8 +33,9 @@ function getClient(aiKey: string): typeof appInsights.client {
client.channel.setOfflineMode(true); client.channel.setOfflineMode(true);
// {{SQL CARBON EDIT}} // {{SQL CARBON EDIT}}
client.context.tags[client.context.keys.deviceMachineName] = ''; //prevent App Insights from reporting machine name // clear all ID fields from telemetry
client.context.tags[client.context.keys.cloudRoleInstance] = ''; //prevent App Insights from reporting machine name client.context.tags[client.context.keys.deviceMachineName] = '';
client.context.tags[client.context.keys.cloudRoleInstance] = '';
// set envelope flags to suppress Vortex ingest header // set envelope flags to suppress Vortex ingest header
client.addTelemetryProcessor((envelope, contextObjects) => { client.addTelemetryProcessor((envelope, contextObjects) => {

View File

@@ -14,10 +14,15 @@ import product from 'vs/platform/node/product';
export function resolveCommonProperties(commit: string, version: string, machineId: string, installSourcePath: string): TPromise<{ [name: string]: string; }> { export function resolveCommonProperties(commit: string, version: string, machineId: string, installSourcePath: string): TPromise<{ [name: string]: string; }> {
const result: { [name: string]: string; } = Object.create(null); const result: { [name: string]: string; } = Object.create(null);
// {{SQL CARBON EDIT}}
// __GDPR__COMMON__ "common.machineId" : { "endPoint": "MacAddressHash", "classification": "EndUserPseudonymizedInformation", "purpose": "FeatureInsight" } // __GDPR__COMMON__ "common.machineId" : { "endPoint": "MacAddressHash", "classification": "EndUserPseudonymizedInformation", "purpose": "FeatureInsight" }
result['common.machineId'] = machineId; // result['common.machineId'] = machineId;
// __GDPR__COMMON__ "sessionID" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } result['common.machineId'] = '';
result['sessionID'] = uuid.generateUuid() + Date.now(); // // __GDPR__COMMON__ "sessionID" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
// result['sessionID'] = uuid.generateUuid() + Date.now();
result['sessionID'] = '';
// __GDPR__COMMON__ "commitHash" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } // __GDPR__COMMON__ "commitHash" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['commitHash'] = commit; result['commitHash'] = commit;
// __GDPR__COMMON__ "version" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } // __GDPR__COMMON__ "version" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }

View File

@@ -20,48 +20,34 @@ export function resolveWorkbenchCommonProperties(storageService: IStorageService
result['common.version.renderer'] = process.versions && (<any>process).versions['chrome']; result['common.version.renderer'] = process.versions && (<any>process).versions['chrome'];
// {{SQL CARBON EDIT}} // {{SQL CARBON EDIT}}
result['common.application.name'] = product.nameLong; result['common.application.name'] = product.nameLong;
getUserId(storageService).then(value => result['common.userId'] = value);
const lastSessionDate = storageService.get('telemetry.lastSessionDate');
const firstSessionDate = storageService.get('telemetry.firstSessionDate') || new Date().toUTCString();
storageService.store('telemetry.firstSessionDate', firstSessionDate);
storageService.store('telemetry.lastSessionDate', new Date().toUTCString());
// __GDPR__COMMON__ "common.firstSessionDate" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.firstSessionDate'] = firstSessionDate;
// __GDPR__COMMON__ "common.lastSessionDate" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.lastSessionDate'] = lastSessionDate;
// __GDPR__COMMON__ "common.isNewSession" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.isNewSession'] = !lastSessionDate ? '1' : '0';
// __GDPR__COMMON__ "common.instanceId" : { "classification": "EndUserPseudonymizedInformation", "purpose": "FeatureInsight" }
result['common.instanceId'] = getOrCreateInstanceId(storageService);
return result;
});
}
function getOrCreateInstanceId(storageService: IStorageService): string {
const result = storageService.get('telemetry.instanceId') || uuid.generateUuid();
storageService.store('telemetry.instanceId', result);
return result;
}
// {{SQL CARBON EDIT}} // {{SQL CARBON EDIT}}
// Get the unique ID for the current user result['common.userId'] = '';
function getUserId(storageService: IStorageService): Promise<string> {
var userId = storageService.get('common.userId'); // {{SQL CARBON EDIT}}
return new Promise<string>(resolve => { // const lastSessionDate = storageService.get('telemetry.lastSessionDate');
// Generate the user id if it has not been created already // const firstSessionDate = storageService.get('telemetry.firstSessionDate') || new Date().toUTCString();
if (typeof userId === 'undefined') { // storageService.store('telemetry.firstSessionDate', firstSessionDate);
let id = Utils.generateUserId(); // storageService.store('telemetry.lastSessionDate', new Date().toUTCString());
id.then( newId => {
userId = newId; // // __GDPR__COMMON__ "common.firstSessionDate" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
resolve(userId); // result['common.firstSessionDate'] = firstSessionDate;
//store the user Id in the storage service // // __GDPR__COMMON__ "common.lastSessionDate" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
storageService.store('common.userId', userId); // result['common.lastSessionDate'] = lastSessionDate;
}); // // __GDPR__COMMON__ "common.isNewSession" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
} else { // result['common.isNewSession'] = !lastSessionDate ? '1' : '0';
resolve(userId);
} // {{SQL CARBON EDIT}}
// __GDPR__COMMON__ "common.instanceId" : { "classification": "EndUserPseudonymizedInformation", "purpose": "FeatureInsight" }
// result['common.instanceId'] = getOrCreateInstanceId(storageService);
result['common.instanceId'] = '';
return result;
}); });
} }
// {{SQL CARBON EDIT}}
// function getOrCreateInstanceId(storageService: IStorageService): string {
// const result = storageService.get('telemetry.instanceId') || uuid.generateUuid();
// storageService.store('telemetry.instanceId', result);
// return result;
// }

View File

@@ -32,58 +32,59 @@ suite('Telemetry - common properties', function () {
del(parentDir, os.tmpdir(), done); del(parentDir, os.tmpdir(), done);
}); });
test('default', function () {
return mkdirp(parentDir).then(() => {
fs.writeFileSync(installSource, 'my.install.source');
return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => {
assert.ok('commitHash' in props);
assert.ok('sessionID' in props);
assert.ok('timestamp' in props);
assert.ok('common.platform' in props);
assert.ok('common.nodePlatform' in props);
assert.ok('common.nodeArch' in props);
assert.ok('common.timesincesessionstart' in props);
assert.ok('common.sequence' in props);
// assert.ok('common.version.shell' in first.data); // only when running on electron
// assert.ok('common.version.renderer' in first.data);
assert.ok('common.osVersion' in props, 'osVersion');
assert.ok('common.platformVersion' in props, 'platformVersion');
assert.ok('version' in props);
assert.equal(props['common.source'], 'my.install.source');
// {{SQL CARBON EDIT}} // {{SQL CARBON EDIT}}
assert.ok('common.application.name' in props); // test('default', function () {
// return mkdirp(parentDir).then(() => {
// fs.writeFileSync(installSource, 'my.install.source');
assert.ok('common.firstSessionDate' in props, 'firstSessionDate'); // return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => {
assert.ok('common.lastSessionDate' in props, 'lastSessionDate'); // conditional, see below, 'lastSessionDate'ow // assert.ok('commitHash' in props);
assert.ok('common.isNewSession' in props, 'isNewSession'); // assert.ok('sessionID' in props);
// assert.ok('timestamp' in props);
// assert.ok('common.platform' in props);
// assert.ok('common.nodePlatform' in props);
// assert.ok('common.nodeArch' in props);
// assert.ok('common.timesincesessionstart' in props);
// assert.ok('common.sequence' in props);
// machine id et al // // assert.ok('common.version.shell' in first.data); // only when running on electron
assert.ok('common.instanceId' in props, 'instanceId'); // // assert.ok('common.version.renderer' in first.data);
assert.ok('common.machineId' in props, 'machineId'); // assert.ok('common.osVersion' in props, 'osVersion');
// assert.ok('common.platformVersion' in props, 'platformVersion');
// assert.ok('version' in props);
// assert.equal(props['common.source'], 'my.install.source');
fs.unlinkSync(installSource); // // {{SQL CARBON EDIT}}
// assert.ok('common.application.name' in props);
return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => { // assert.ok('common.firstSessionDate' in props, 'firstSessionDate');
assert.ok(!('common.source' in props)); // assert.ok('common.lastSessionDate' in props, 'lastSessionDate'); // conditional, see below, 'lastSessionDate'ow
}); // assert.ok('common.isNewSession' in props, 'isNewSession');
});
});
});
test('lastSessionDate when aviablale', function () { // // machine id et al
// assert.ok('common.instanceId' in props, 'instanceId');
// assert.ok('common.machineId' in props, 'machineId');
storageService.store('telemetry.lastSessionDate', new Date().toUTCString()); // fs.unlinkSync(installSource);
return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => { // return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => {
// assert.ok(!('common.source' in props));
// });
// });
// });
// });
assert.ok('common.lastSessionDate' in props); // conditional, see below // test('lastSessionDate when aviablale', function () {
assert.ok('common.isNewSession' in props);
assert.equal(props['common.isNewSession'], 0); // storageService.store('telemetry.lastSessionDate', new Date().toUTCString());
});
}); // return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => {
// assert.ok('common.lastSessionDate' in props); // conditional, see below
// assert.ok('common.isNewSession' in props);
// assert.equal(props['common.isNewSession'], 0);
// });
// });
test('values chance on ask', function () { test('values chance on ask', function () {
return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => { return resolveWorkbenchCommonProperties(storageService, commit, version, 'someMachineId', installSource).then(props => {