From d6625c29d17b8c614b20378c2681b4774d7dd71f Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 21 May 2024 04:28:12 +0100 Subject: [PATCH] [Statsig] Sample router events (#4143) --- src/Navigation.tsx | 4 ++-- src/lib/statsig/events.ts | 2 +- src/lib/statsig/statsig.tsx | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 7abfaec08e..23cf5f59dd 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -611,7 +611,7 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) { linking={LINKING} theme={theme} onStateChange={() => { - logEvent('router:navigate', { + logEvent('router:navigate:sampled', { from: prevLoggedRouteName.current, }) prevLoggedRouteName.current = getCurrentRouteName() @@ -620,7 +620,7 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) { attachRouteToLogEvents(getCurrentRouteName) logModuleInitTime() onReady() - logEvent('router:navigate', {}) + logEvent('router:navigate:sampled', {}) }}> {children} diff --git a/src/lib/statsig/events.ts b/src/lib/statsig/events.ts index fe4c9e65ab..68de52e14e 100644 --- a/src/lib/statsig/events.ts +++ b/src/lib/statsig/events.ts @@ -24,7 +24,7 @@ export type LogEvents = { secondsActive: number } 'state:foreground': {} - 'router:navigate': {} + 'router:navigate:sampled': {} // Screen events 'splash:signInPressed': {} diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx index 005027820d..b7299be8c8 100644 --- a/src/lib/statsig/statsig.tsx +++ b/src/lib/statsig/statsig.tsx @@ -85,11 +85,17 @@ export function toClout(n: number | null | undefined): number | undefined { } } +const DOWNSAMPLED_EVENTS = new Set(['router:navigate:sampled']) +const isDownsampledSession = Math.random() < 0.9 // 90% likely + export function logEvent( eventName: E & string, rawMetadata: LogEvents[E] & FlatJSONRecord, ) { try { + if (isDownsampledSession && DOWNSAMPLED_EVENTS.has(eventName)) { + return + } const fullMetadata = { ...rawMetadata, } as Record // Statsig typings are unnecessarily strict here.