Adjust datalake abstraction

(cherry picked from commit 8ba6a8d45b1bd5698afbd06d9e858a91789f0ea6)
This commit is contained in:
Eric Bailey
2025-02-28 11:38:17 -06:00
parent 36a7a8d8c6
commit e43b74d34d
3 changed files with 27 additions and 13 deletions
+8 -4
View File
@@ -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}
</NavigationContainer>
+17 -7
View File
@@ -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<E extends keyof LogEvents>(
export function logEvent<E extends keyof MetricEvents>(
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<E extends keyof LogEvents>(
}
}
function toStringRecord<E extends keyof LogEvents>(
metadata: LogEvents[E] & FlatJSONRecord,
function toStringRecord<E extends keyof MetricEvents>(
metadata: MetricEvents[E] & FlatJSONRecord,
): Record<string, string> {
const record: Record<string, string> = {}
for (let key in metadata) {
@@ -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': {