diff options
Diffstat (limited to 'src/lib/statsig')
-rw-r--r-- | src/lib/statsig/events.ts | 30 | ||||
-rw-r--r-- | src/lib/statsig/statsig.tsx | 42 |
2 files changed, 18 insertions, 54 deletions
diff --git a/src/lib/statsig/events.ts b/src/lib/statsig/events.ts index 8f8504021..f8c6d181c 100644 --- a/src/lib/statsig/events.ts +++ b/src/lib/statsig/events.ts @@ -21,11 +21,11 @@ export type LogEvents = { context: 'StartOnboarding' | 'AfterOnboarding' | 'Login' | 'Home' status: 'granted' | 'denied' | 'undetermined' } - 'state:background:sampled': { + 'state:background': { secondsActive: number } - 'state:foreground:sampled': {} - 'router:navigate:notifications:sampled': {} + 'state:foreground': {} + 'router:navigate:notifications': {} 'deepLink:referrerReceived': { to: string referrer: string @@ -76,7 +76,7 @@ export type LogEvents = { 'onboarding:finished:avatarResult': { avatarResult: 'default' | 'created' | 'uploaded' } - 'home:feedDisplayed:sampled': { + 'home:feedDisplayed': { feedUrl: string feedType: string index: number @@ -87,12 +87,12 @@ export type LogEvents = { | 'desktop-sidebar-click' | 'starter-pack-initial-feed' } - 'feed:endReached:sampled': { + 'feed:endReached': { feedUrl: string feedType: string itemCount: number } - 'feed:refresh:sampled': { + 'feed:refresh': { feedUrl: string feedType: string reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest' @@ -103,13 +103,13 @@ export type LogEvents = { 'discover:showLess': { feedContext: string } - 'discover:clickthrough:sampled': { + 'discover:clickthrough': { count: number } - 'discover:engaged:sampled': { + 'discover:engaged': { count: number } - 'discover:seen:sampled': { + 'discover:seen': { count: number } @@ -132,27 +132,27 @@ export type LogEvents = { postCount: number isReply: boolean } - 'post:like:sampled': { + 'post:like': { doesLikerFollowPoster: boolean | undefined doesPosterFollowLiker: boolean | undefined likerClout: number | undefined postClout: number | undefined logContext: 'FeedItem' | 'PostThreadItem' | 'Post' } - 'post:repost:sampled': { + 'post:repost': { logContext: 'FeedItem' | 'PostThreadItem' | 'Post' } - 'post:unlike:sampled': { + 'post:unlike': { logContext: 'FeedItem' | 'PostThreadItem' | 'Post' } - 'post:unrepost:sampled': { + 'post:unrepost': { logContext: 'FeedItem' | 'PostThreadItem' | 'Post' } 'post:mute': {} 'post:unmute': {} 'post:pin': {} 'post:unpin': {} - 'profile:follow:sampled': { + 'profile:follow': { didBecomeMutual: boolean | undefined followeeClout: number | undefined followerClout: number | undefined @@ -169,7 +169,7 @@ export type LogEvents = { | 'FeedInterstitial' | 'ProfileHeaderSuggestedFollows' } - 'profile:unfollow:sampled': { + 'profile:unfollow': { logContext: | 'RecommendedFollowsItem' | 'PostThreadItem' diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx index 36bd54e2a..51d7eb98e 100644 --- a/src/lib/statsig/statsig.tsx +++ b/src/lib/statsig/statsig.tsx @@ -59,6 +59,7 @@ function createStatsigOptions(prefetchUsers: StatsigUser[]) { initTimeoutMs: 1, // Get fresh flags for other accounts as well, if any. prefetchUsers, + api: 'https://events.bsky.app/v2', } } @@ -89,51 +90,14 @@ export function toClout(n: number | null | undefined): number | undefined { } } -const DOWNSAMPLE_RATE = 0.99 // 99% likely -const DOWNSAMPLED_EVENTS: Set<keyof LogEvents> = new Set([ - 'router:navigate:notifications:sampled', - 'state:background:sampled', - 'state:foreground:sampled', - 'home:feedDisplayed:sampled', - 'feed:endReached:sampled', - 'feed:refresh:sampled', - 'discover:clickthrough:sampled', - 'discover:engaged:sampled', - 'discover:seen:sampled', - 'post:like:sampled', - 'post:unlike:sampled', - 'post:repost:sampled', - 'post:unrepost:sampled', - 'profile:follow:sampled', - 'profile:unfollow:sampled', -]) -const isDownsampledSession = Math.random() < DOWNSAMPLE_RATE - export function logEvent<E extends keyof LogEvents>( eventName: E & string, rawMetadata: LogEvents[E] & FlatJSONRecord, ) { try { - if ( - process.env.NODE_ENV === 'development' && - eventName.endsWith(':sampled') && - !DOWNSAMPLED_EVENTS.has(eventName) - ) { - logger.error( - 'Did you forget to add ' + eventName + ' to DOWNSAMPLED_EVENTS?', - ) - } - - const isDownsampledEvent = DOWNSAMPLED_EVENTS.has(eventName) - if (isDownsampledSession && isDownsampledEvent) { - return - } const fullMetadata = { ...rawMetadata, } as Record<string, string> // Statsig typings are unnecessarily strict here. - if (isDownsampledEvent) { - fullMetadata.downsampleRate = DOWNSAMPLE_RATE.toString() - } fullMetadata.routeName = getCurrentRouteName() ?? '(Uninitialized)' if (Statsig.initializeCalled()) { Statsig.logEvent(eventName, null, fullMetadata) @@ -232,13 +196,13 @@ AppState.addEventListener('change', (state: AppStateStatus) => { lastState = state if (state === 'active') { lastActive = performance.now() - logEvent('state:foreground:sampled', {}) + logEvent('state:foreground', {}) } else { let secondsActive = 0 if (lastActive != null) { secondsActive = Math.round((performance.now() - lastActive) / 1e3) lastActive = null - logEvent('state:background:sampled', { + logEvent('state:background', { secondsActive, }) } |