Skip to content

Commit c41087a

Browse files
chore(web): PostHog telemetry improvements (#672)
1 parent 095474a commit c41087a

File tree

17 files changed

+101
-184
lines changed

17 files changed

+101
-184
lines changed

packages/web/src/app/[domain]/components/navigationMenu/trialIndicator.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const TrialIndicator = ({ subscription }: Props) => {
1919

2020
if (isServiceError(subscription)) {
2121
captureEvent('wa_trial_nav_subscription_fetch_fail', {
22-
error: subscription.errorCode,
22+
errorCode: subscription.errorCode,
2323
});
2424
return null;
2525
}

packages/web/src/app/[domain]/settings/(general)/components/changeOrgDomainCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function ChangeOrgDomainCard({ orgDomain, currentUserRole, rootDomain }:
5050
description: `❌ Failed to update organization url. Reason: ${result.message}`,
5151
})
5252
captureEvent('wa_org_domain_updated_fail', {
53-
error: result.errorCode,
53+
errorCode: result.errorCode,
5454
});
5555
} else {
5656
toast({

packages/web/src/app/[domain]/settings/(general)/components/changeOrgNameCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export function ChangeOrgNameCard({ orgName, currentUserRole }: ChangeOrgNameCar
4848
description: `❌ Failed to update organization name. Reason: ${result.message}`,
4949
})
5050
captureEvent('wa_org_name_updated_fail', {
51-
error: result.errorCode,
51+
errorCode: result.errorCode,
5252
});
5353
} else {
5454
toast({

packages/web/src/app/[domain]/settings/members/components/inviteMemberCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export const InviteMemberCard = ({ currentUserRole, isBillingEnabled, seatsAvail
6262
description: `❌ Failed to invite members. Reason: ${res.message}`
6363
});
6464
captureEvent('wa_invite_member_card_invite_fail', {
65-
error: res.errorCode,
65+
errorCode: res.errorCode,
6666
num_emails: data.emails.length,
6767
});
6868
} else {

packages/web/src/app/[domain]/settings/members/components/invitesList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export const InvitesList = ({ invites, currentUserRole }: InviteListProps) => {
6060
description: `❌ Failed to cancel invite. Reason: ${response.message}`
6161
})
6262
captureEvent('wa_invites_list_cancel_invite_fail', {
63-
error: response.errorCode,
63+
errorCode: response.errorCode,
6464
})
6565
} else {
6666
toast({

packages/web/src/app/[domain]/settings/members/components/membersList.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export const MembersList = ({ members, currentUserId, currentUserRole, orgName }
7171
description: `❌ Failed to remove member. Reason: ${response.message}`
7272
})
7373
captureEvent('wa_members_list_remove_member_fail', {
74-
error: response.errorCode,
74+
errorCode: response.errorCode,
7575
})
7676
} else {
7777
toast({
@@ -91,7 +91,7 @@ export const MembersList = ({ members, currentUserId, currentUserRole, orgName }
9191
description: `❌ Failed to transfer ownership. Reason: ${response.message}`
9292
})
9393
captureEvent('wa_members_list_transfer_ownership_fail', {
94-
error: response.errorCode,
94+
errorCode: response.errorCode,
9595
})
9696
} else {
9797
toast({
@@ -111,7 +111,7 @@ export const MembersList = ({ members, currentUserId, currentUserRole, orgName }
111111
description: `❌ Failed to leave organization. Reason: ${response.message}`
112112
})
113113
captureEvent('wa_members_list_leave_org_fail', {
114-
error: response.errorCode,
114+
errorCode: response.errorCode,
115115
})
116116
} else {
117117
toast({

packages/web/src/app/[domain]/settings/members/components/requestsList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export const RequestsList = ({ requests, currentUserRole }: RequestsListProps) =
6363
description: `❌ Failed to approve request. Reason: ${response.message}`
6464
})
6565
captureEvent('wa_requests_list_approve_request_fail', {
66-
error: response.errorCode,
66+
errorCode: response.errorCode,
6767
})
6868
} else {
6969
toast({
@@ -83,7 +83,7 @@ export const RequestsList = ({ requests, currentUserRole }: RequestsListProps) =
8383
description: `❌ Failed to reject request.`
8484
})
8585
captureEvent('wa_requests_list_reject_request_fail', {
86-
error: response.errorCode,
86+
errorCode: response.errorCode,
8787
})
8888
} else {
8989
toast({

packages/web/src/app/layout.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Toaster } from "@/components/ui/toaster";
77
import { TooltipProvider } from "@/components/ui/tooltip";
88
import { SessionProvider } from "next-auth/react";
99
import { env } from "@sourcebot/shared";
10+
import { env as clientEnv } from "@sourcebot/shared/client";
1011
import { PlanProvider } from "@/features/entitlements/planProvider";
1112
import { getEntitlements } from "@sourcebot/shared";
1213

@@ -42,6 +43,8 @@ export default function RootLayout({
4243
// @note: the posthog api key doesn't need to be kept secret,
4344
// so we are safe to send it to the client.
4445
posthogApiKey={env.POSTHOG_PAPIK}
46+
sourcebotVersion={clientEnv.NEXT_PUBLIC_SOURCEBOT_VERSION}
47+
sourcebotInstallId={env.SOURCEBOT_INSTALL_ID}
4548
>
4649
<ThemeProvider
4750
attribute="class"

packages/web/src/app/posthogProvider.tsx

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,17 @@ interface PostHogProviderProps {
3434
children: React.ReactNode
3535
isDisabled: boolean
3636
posthogApiKey: string
37+
sourcebotVersion: string
38+
sourcebotInstallId: string
3739
}
3840

39-
export function PostHogProvider({ children, isDisabled, posthogApiKey }: PostHogProviderProps) {
41+
export function PostHogProvider({
42+
children,
43+
isDisabled,
44+
posthogApiKey,
45+
sourcebotVersion,
46+
sourcebotInstallId,
47+
}: PostHogProviderProps) {
4048
const { data: session } = useSession();
4149

4250
useEffect(() => {
@@ -61,27 +69,33 @@ export function PostHogProvider({ children, isDisabled, posthogApiKey }: PostHog
6169
'$referrer',
6270
'$referring_domain',
6371
'$ip',
64-
] : []
72+
] : [],
73+
loaded: (posthog) => {
74+
// Include install id & version in all events.
75+
posthog.register({
76+
sourcebot_version: sourcebotVersion,
77+
install_id: sourcebotInstallId,
78+
});
79+
}
6580
});
6681
} else {
6782
console.debug("PostHog telemetry disabled");
6883
}
69-
}, [isDisabled, posthogApiKey]);
84+
}, [isDisabled, posthogApiKey, sourcebotInstallId, sourcebotVersion]);
7085

7186
useEffect(() => {
7287
if (!session) {
7388
return;
7489
}
7590

76-
// Only identify the user if we are running in a cloud environment.
77-
if (env.NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT !== undefined) {
78-
posthog.identify(session.user.id, {
91+
posthog.identify(
92+
session.user.id,
93+
// Only include email & name when running in a cloud environment.
94+
env.NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT !== undefined ? {
7995
email: session.user.email,
8096
name: session.user.name,
81-
});
82-
} else {
83-
console.debug("PostHog identify skipped");
84-
}
97+
} : undefined
98+
);
8599
}, [session]);
86100

87101
return (

packages/web/src/ee/features/billing/components/changeBillingEmailCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export function ChangeBillingEmailCard({ currentUserRole, billingEmail }: Change
5555
description: "❌ Failed to update billing email. Please try again.",
5656
})
5757
captureEvent('wa_billing_email_updated_fail', {
58-
error: result.message,
58+
errorCode: result.errorCode,
5959
})
6060
}
6161
setIsLoading(false)

0 commit comments

Comments
 (0)