diff --git a/src/Navigation.tsx b/src/Navigation.tsx index cf09406a69..1ca02f6372 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -729,16 +729,20 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) { linking={LINKING} theme={theme} onStateChange={() => { - logEvent('lake:router:navigate', { - from: prevLoggedRouteName.current, - }) + logEvent( + 'router:navigate', + { + from: prevLoggedRouteName.current, + }, + {lake: true}, + ) prevLoggedRouteName.current = getCurrentRouteName() }} onReady={() => { attachRouteToLogEvents(getCurrentRouteName) logModuleInitTime() onReady() - logEvent('lake:router:navigate', {}) + logEvent('router:navigate', {}, {lake: true}) }}> {children} diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx index a64c710ea6..a75709860d 100644 --- a/src/lib/statsig/statsig.tsx +++ b/src/lib/statsig/statsig.tsx @@ -5,12 +5,12 @@ import {Statsig, StatsigProvider} from 'statsig-react-native-expo' import {BUNDLE_DATE, BUNDLE_IDENTIFIER, IS_TESTFLIGHT} from '#/lib/app-info' import {logger} from '#/logger' +import {MetricEvents} from '#/logger/metrics' import {isWeb} from '#/platform/detection' import * as persisted from '#/state/persisted' import {useSession} from '../../state/session' import {timeout} from '../async/timeout' import {useNonReactiveCallback} from '../hooks/useNonReactiveCallback' -import {LogEvents} from './events' import {Gate} from './gates' const SDK_KEY = 'client-SXJakO39w9vIhl3D44u8UupyzFl4oZ2qPIkjwcvuPsV' @@ -42,7 +42,7 @@ if (isWeb && typeof window !== 'undefined') { refUrl = decodeURIComponent(params.get('ref_url') ?? '') } -export type {LogEvents} +export type {MetricEvents as LogEvents} function createStatsigOptions(prefetchUsers: StatsigUser[]) { return { @@ -91,15 +91,25 @@ export function toClout(n: number | null | undefined): number | undefined { } } -export function logEvent( +export function logEvent( eventName: E & string, - rawMetadata: LogEvents[E] & FlatJSONRecord, + rawMetadata: MetricEvents[E] & FlatJSONRecord, + options: { + /** + * Send to our data lake only, not to StatSig + */ + lake?: boolean + } = {lake: false}, ) { try { const fullMetadata = toStringRecord(rawMetadata) fullMetadata.routeName = getCurrentRouteName() ?? '(Uninitialized)' if (Statsig.initializeCalled()) { - Statsig.logEvent(eventName, null, fullMetadata) + let ev: string = eventName + if (options.lake) { + ev = `lake:${ev}` + } + Statsig.logEvent(ev, null, fullMetadata) } logger.info(eventName, fullMetadata) } catch (e) { @@ -108,8 +118,8 @@ export function logEvent( } } -function toStringRecord( - metadata: LogEvents[E] & FlatJSONRecord, +function toStringRecord( + metadata: MetricEvents[E] & FlatJSONRecord, ): Record { const record: Record = {} for (let key in metadata) { diff --git a/src/lib/statsig/events.ts b/src/logger/metrics.ts similarity index 99% rename from src/lib/statsig/events.ts rename to src/logger/metrics.ts index 519e3997e1..e3bd933144 100644 --- a/src/lib/statsig/events.ts +++ b/src/logger/metrics.ts @@ -1,4 +1,4 @@ -export type LogEvents = { +export type MetricEvents = { // App events init: { initMs: number @@ -30,7 +30,7 @@ export type LogEvents = { secondsActive: number } 'state:foreground': {} - 'lake:router:navigate': { + 'router:navigate': { from?: string } 'deepLink:referrerReceived': {