提交 a678fe0b 编写于 作者: S Sofian Hnaide

fix #2311

上级 03df65d8
...@@ -7,7 +7,7 @@ import getmac = require('getmac'); ...@@ -7,7 +7,7 @@ import getmac = require('getmac');
import crypto = require('crypto'); import crypto = require('crypto');
import {MainTelemetryService, TelemetryServiceConfig} from 'vs/platform/telemetry/browser/mainTelemetryService'; import {MainTelemetryService, TelemetryServiceConfig} from 'vs/platform/telemetry/browser/mainTelemetryService';
import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry'; import {ITelemetryService, ITelemetryInfo} from 'vs/platform/telemetry/common/telemetry';
import {IStorageService, StorageScope} from 'vs/platform/storage/common/storage'; import {IStorageService, StorageScope} from 'vs/platform/storage/common/storage';
import errors = require('vs/base/common/errors'); import errors = require('vs/base/common/errors');
import uuid = require('vs/base/common/uuid'); import uuid = require('vs/base/common/uuid');
...@@ -19,30 +19,51 @@ class StorageKeys { ...@@ -19,30 +19,51 @@ class StorageKeys {
export class ElectronTelemetryService extends MainTelemetryService implements ITelemetryService { export class ElectronTelemetryService extends MainTelemetryService implements ITelemetryService {
private _setupIds: Promise<ITelemetryInfo>;
constructor(@IStorageService private storageService: IStorageService, config?:TelemetryServiceConfig) { constructor(@IStorageService private storageService: IStorageService, config?:TelemetryServiceConfig) {
super(config); super(config);
this.setupInstanceId(); this._setupIds = this.setupIds();
this.setupMachineId(); }
/**
* override the base getTelemetryInfo to make sure this information is not retrieved before it's ready
*/
public getTelemetryInfo(): Promise<ITelemetryInfo> {
return this._setupIds;
} }
private setupInstanceId(){ private setupIds(): Promise<ITelemetryInfo> {
return Promise.all([this.setupInstanceId(), this.setupMachineId()]).then(()=> {
return {
machineId: this.machineId,
instanceId: this.instanceId,
sessionId: this.sessionId
}
});
}
private setupInstanceId(): Promise<string> {
var instanceId = this.storageService.get(StorageKeys.InstanceId); var instanceId = this.storageService.get(StorageKeys.InstanceId);
if(!instanceId) { if(!instanceId) {
instanceId = uuid.generateUuid(); instanceId = uuid.generateUuid();
this.storageService.store(StorageKeys.InstanceId, instanceId); this.storageService.store(StorageKeys.InstanceId, instanceId);
} }
this.instanceId = instanceId; this.instanceId = instanceId;
return Promise.resolve(this.instanceId);
} }
private setupMachineId(){ private setupMachineId(): Promise<string> {
var machineId = this.storageService.get(StorageKeys.MachineId); var machineId = this.storageService.get(StorageKeys.MachineId);
if (machineId) { if (machineId) {
this.machineId = machineId; this.machineId = machineId;
return Promise.resolve(this.machineId);
} else { } else {
return new Promise((resolve, reject) => {
try { try {
// add a unique machine id as a hash of the macAddress // add a unique machine id as a hash of the macAddress
getmac.getMac( (error, macAddress) => { getmac.getMac((error, macAddress) => {
if (!error) { if (!error) {
// crypt machine id // crypt machine id
machineId = crypto.createHash('sha256').update(macAddress, 'utf8').digest('hex'); machineId = crypto.createHash('sha256').update(macAddress, 'utf8').digest('hex');
...@@ -53,6 +74,7 @@ export class ElectronTelemetryService extends MainTelemetryService implements IT ...@@ -53,6 +74,7 @@ export class ElectronTelemetryService extends MainTelemetryService implements IT
this.machineId = machineId; this.machineId = machineId;
this.storageService.store(StorageKeys.MachineId, machineId); this.storageService.store(StorageKeys.MachineId, machineId);
resolve(this.machineId);
}); });
} catch (err) { } catch (err) {
errors.onUnexpectedError(err); errors.onUnexpectedError(err);
...@@ -61,7 +83,10 @@ export class ElectronTelemetryService extends MainTelemetryService implements IT ...@@ -61,7 +83,10 @@ export class ElectronTelemetryService extends MainTelemetryService implements IT
machineId = uuid.generateUuid(); machineId = uuid.generateUuid();
this.machineId = machineId; this.machineId = machineId;
this.storageService.store(StorageKeys.MachineId, machineId); this.storageService.store(StorageKeys.MachineId, machineId);
resolve(this.machineId);
} }
});
} }
} }
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册