From 734f1809378380c390d94fd429916d66dd4cbeb1 Mon Sep 17 00:00:00 2001 From: Christian Abella Date: Wed, 19 Feb 2025 10:01:02 -1000 Subject: [PATCH] [AXON-130] experiment auth UI flow analytics (#133) * AXON-130: refactor login action message flow to include better error handling and analytic posting * AXON-130: updated athenticated event to include if it is onboarding or not --- src/analytics.ts | 4 +-- src/atlclients/loginManager.ts | 13 +++++---- .../onboarding/onboardingWebviewController.ts | 28 +++++++++---------- src/vscAnalyticsApi.ts | 4 +-- .../onboarding/vscOnboardingActionApi.ts | 4 +-- 5 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/analytics.ts b/src/analytics.ts index 25273a83..071e77d6 100644 --- a/src/analytics.ts +++ b/src/analytics.ts @@ -61,9 +61,9 @@ export async function featureChangeEvent(featureId: string, enabled: boolean): P return trackEvent(action, 'feature', { actionSubjectId: featureId }); } -export async function authenticatedEvent(site: DetailedSiteInfo): Promise { +export async function authenticatedEvent(site: DetailedSiteInfo, isOnboarding?: boolean): Promise { return instanceTrackEvent(site, 'authenticated', 'atlascode', { - attributes: { machineId: Container.machineId, hostProduct: site.product.name }, + attributes: { machineId: Container.machineId, hostProduct: site.product.name, onboarding: isOnboarding }, }); } diff --git a/src/atlclients/loginManager.ts b/src/atlclients/loginManager.ts index 029027b4..60c76f03 100644 --- a/src/atlclients/loginManager.ts +++ b/src/atlclients/loginManager.ts @@ -44,16 +44,16 @@ export class LoginManager { } // this is *only* called when login buttons are clicked by the user - public async userInitiatedOAuthLogin(site: SiteInfo, callback: string): Promise { + public async userInitiatedOAuthLogin(site: SiteInfo, callback: string, isOnboarding?: boolean): Promise { const provider = oauthProviderForSite(site)!; if (!provider) { throw new Error(`No provider found for ${site.host}`); } const resp = await this._dancer.doDance(provider, site, callback); - this.saveDetails(provider, site, resp); + this.saveDetails(provider, site, resp, isOnboarding); } - private async saveDetails(provider: OAuthProvider, site: SiteInfo, resp: OAuthResponse) { + private async saveDetails(provider: OAuthProvider, site: SiteInfo, resp: OAuthResponse, isOnboarding?: boolean) { try { const oauthInfo: OAuthInfo = { access: resp.access, @@ -75,7 +75,7 @@ export class LoginManager { siteDetails.forEach(async (siteInfo) => { await this._credentialManager.saveAuthInfo(siteInfo, oauthInfo); this._siteManager.addSites([siteInfo]); - authenticatedEvent(siteInfo).then((e) => { + authenticatedEvent(siteInfo, isOnboarding).then((e) => { this._analyticsClient.sendTrackEvent(e); }); }); @@ -101,11 +101,12 @@ export class LoginManager { return []; } - public async userInitiatedServerLogin(site: SiteInfo, authInfo: AuthInfo): Promise { + public async userInitiatedServerLogin(site: SiteInfo, authInfo: AuthInfo, isOnboarding?: boolean): Promise { if (isBasicAuthInfo(authInfo) || isPATAuthInfo(authInfo)) { try { const siteDetails = await this.saveDetailsForServerSite(site, authInfo); - authenticatedEvent(siteDetails).then((e) => { + + authenticatedEvent(siteDetails, isOnboarding).then((e) => { this._analyticsClient.sendTrackEvent(e); }); } catch (err) { diff --git a/src/lib/webview/controller/onboarding/onboardingWebviewController.ts b/src/lib/webview/controller/onboarding/onboardingWebviewController.ts index 31cd5c26..cc084455 100644 --- a/src/lib/webview/controller/onboarding/onboardingWebviewController.ts +++ b/src/lib/webview/controller/onboarding/onboardingWebviewController.ts @@ -95,23 +95,23 @@ export class OnboardingWebviewController implements WebviewController { - return authenticatedEvent(site).then((e) => { + public async fireAuthenticatedEvent(site: DetailedSiteInfo, isOnboarding?: boolean): Promise { + return authenticatedEvent(site, isOnboarding).then((e) => { this._analyticsClient.sendTrackEvent(e); }); } diff --git a/src/webview/onboarding/vscOnboardingActionApi.ts b/src/webview/onboarding/vscOnboardingActionApi.ts index 63874b49..2bb5a7db 100644 --- a/src/webview/onboarding/vscOnboardingActionApi.ts +++ b/src/webview/onboarding/vscOnboardingActionApi.ts @@ -26,11 +26,11 @@ export class VSCOnboardingActionApi implements OnboardingActionApi { } public async authenticateServer(site: SiteInfo, authInfo: AuthInfo): Promise { - return await Container.loginManager.userInitiatedServerLogin(site, authInfo); + return await Container.loginManager.userInitiatedServerLogin(site, authInfo, true); } public async authenticateCloud(site: SiteInfo, callback: string): Promise { - return Container.loginManager.userInitiatedOAuthLogin(site, callback); + return Container.loginManager.userInitiatedOAuthLogin(site, callback, true); } public async clearAuth(site: DetailedSiteInfo): Promise {