Skip to content

Commit

Permalink
add userId as common property (#76)
Browse files Browse the repository at this point in the history
  • Loading branch information
928PJY authored Mar 2, 2020
1 parent f6db88b commit a5bcfa5
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 5 deletions.
1 change: 1 addition & 0 deletions src/credential/credentialController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ export class CredentialController {
const query = parseQuery(uri);

resolve({
userId: query.id,
userName: query.name,
userEmail: query.email,
userToken: query['X-OP-BuildUserToken'],
Expand Down
8 changes: 6 additions & 2 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,13 @@ export async function activate(context: vscode.ExtensionContext): Promise<Extens
};
}

function getTelemetryReporter(context: ExtensionContext, environmentController: EnvironmentController) {
function getTelemetryReporter(context: ExtensionContext, environmentController: EnvironmentController): TelemetryReporter {
let key = config.AIKey[environmentController.env];
return new TelemetryReporter(EXTENSION_ID, context.extensionVersion, key);
let telemetryReporter = new TelemetryReporter(EXTENSION_ID, context.extensionVersion, key);
telemetryReporter.setCommonProperty({
'common.docsUserId': undefined
});
return telemetryReporter;
}

function createQuickPickMenu(correlationId: string, eventStream: EventStream, credentialController: CredentialController, buildController: BuildController) {
Expand Down
20 changes: 19 additions & 1 deletion src/observers/telemetryObserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export class TelemetryObserver {

public eventHandler = (event: BaseEvent) => {
switch (event.type) {
// Sign
case EventType.UserSignInTriggered:
this.handleUserSignInTriggered(<UserSignInTriggered>event);
break;
Expand All @@ -23,6 +24,10 @@ export class TelemetryObserver {
case EventType.UserSignOutCompleted:
this.handleUserSignOutCompleted(<UserSignOutCompleted>event);
break;
case EventType.CredentialReset:
this.handleCredentialReset();
break;
// Build
case EventType.BuildTriggered:
this.handleBuildTriggered(<BuildTriggered>event);
break;
Expand Down Expand Up @@ -60,14 +65,21 @@ export class TelemetryObserver {
private handleUserSignInTriggered(event: UserSignInTriggered) {
this.reporter.sendTelemetryEvent(
'SignIn.Triggered',

{
CorrelationId: event.correlationId
}
);
}

private handleUserSignInCompleted(event: UserSignInCompleted) {
// Set telemetry common property
if (event.succeeded) {
this.reporter.setCommonProperty({
'common.docsUserId': (<UserSignInSucceeded>event).credential.userInfo.userId
});
}

// Send telemetry
let signInType: DocsSignInType;
let userName: string;
let userEmail: string;
Expand All @@ -94,6 +106,12 @@ export class TelemetryObserver {
);
}

private handleCredentialReset() {
this.reporter.setCommonProperty({
'common.docsUserId': undefined
});
}

private handleUserSignOutTriggered(event: UserSignOutTriggered) {
this.reporter.sendTelemetryEvent(
'SignOut.Triggered',
Expand Down
1 change: 1 addition & 0 deletions src/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export type DocsSignInType = 'GitHub' | 'Azure DevOps';

export interface UserInfo {
readonly signType: DocsSignInType;
readonly userId: string;
readonly userName: string;
readonly userEmail: string;
readonly userToken: string;
Expand Down
3 changes: 2 additions & 1 deletion test/unitTests/credential/credentialController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { TimeOutError } from '../../../src/error/timeOutError';
const fakedGitHubCallbackURL = <vscode.Uri>{
authority: 'ceapex.docs-build',
path: '/github-authenticate',
query: 'name=Fake-User&[email protected]&X-OP-BuildUserToken=fake-token'
query: 'id=faked-id&name=Fake-User&[email protected]&X-OP-BuildUserToken=fake-token'
};

describe('CredentialController', () => {
Expand Down Expand Up @@ -170,6 +170,7 @@ describe('CredentialController', () => {
let credential = credentialController.credential;
let expectedUserInfo = <UserInfo>{
signType: 'GitHub',
userId: 'faked-id',
userEmail: '[email protected]',
userName: 'Fake-User',
userToken: 'fake-token'
Expand Down
25 changes: 24 additions & 1 deletion test/unitTests/observers/telemetryObserver.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import assert from 'assert';
import { UserSignInTriggered, UserSignInSucceeded, UserSignInFailed, UserSignOutTriggered, UserSignOutSucceeded, UserSignOutFailed, BuildCanceled, BuildFailed, BuildTriggered, BuildSucceeded, LearnMoreClicked, QuickPickTriggered, QuickPickCommandSelected, DependencyInstallStarted, DependencyInstallCompleted, PackageInstallCompleted, BuildCacheSizeCalculated, PackageInstallAttemptFailed, } from '../../../src/common/loggingEvents';
import { UserSignInTriggered, UserSignInSucceeded, UserSignInFailed, UserSignOutTriggered, UserSignOutSucceeded, UserSignOutFailed, BuildCanceled, BuildFailed, BuildTriggered, BuildSucceeded, LearnMoreClicked, QuickPickTriggered, QuickPickCommandSelected, DependencyInstallStarted, DependencyInstallCompleted, PackageInstallCompleted, BuildCacheSizeCalculated, PackageInstallAttemptFailed, CredentialReset, } from '../../../src/common/loggingEvents';
import { TelemetryObserver } from '../../../src/observers/telemetryObserver';
import { DocsError } from '../../../src/error/docsError';
import { ErrorCode } from '../../../src/error/errorCode';
Expand All @@ -17,8 +17,12 @@ describe('TelemetryObserver', () => {
let sentEventName: string;
let sentEventProperties: any;
let sentEventMeasurements: any;
let commonProperty: { [key: string]: string };

let telemetryReporter = <TelemetryReporter>{
setCommonProperty(properties: { [key: string]: string }): void {
commonProperty = properties;
},
sendTelemetryEvent(eventName: string, properties?: {
[key: string]: string;
}, measurements?: {
Expand Down Expand Up @@ -50,6 +54,8 @@ describe('TelemetryObserver', () => {
sentEventName = undefined;
sentEventProperties = undefined;
sentEventMeasurements = undefined;

commonProperty = {};
});

// Sign
Expand All @@ -76,6 +82,9 @@ describe('TelemetryObserver', () => {
UserEmail: '[email protected]',
ErrorCode: undefined,
});
assert.deepStrictEqual(commonProperty, {
'common.docsUserId': 'faked-id'
});
});

it('UserSignInFailed', () => {
Expand Down Expand Up @@ -106,6 +115,20 @@ describe('TelemetryObserver', () => {
UserEmail: '[email protected]',
ErrorCode: undefined
});
assert.deepStrictEqual(commonProperty, {
'common.docsUserId': 'faked-id'
});
});
});

it(`UserSignOutTriggered: 'SignOut.Triggered' event should be sent`, () => {
let event = new CredentialReset();
commonProperty = {
'common.docsUserId': 'faked-id'
};
observer.eventHandler(event);
assert.deepStrictEqual(commonProperty, {
'common.docsUserId': undefined
});
});

Expand Down
1 change: 1 addition & 0 deletions test/utils/faker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export const fakedCredential = <Credential>{
signInStatus: 'SignedIn',
userInfo: {
signType: 'GitHub',
userId: 'faked-id',
userEmail: '[email protected]',
userName: 'Faked User',
userToken: 'faked-token'
Expand Down

0 comments on commit a5bcfa5

Please sign in to comment.