mirror of
https://github.com/suitenumerique/meet.git
synced 2026-08-24 17:27:02 +00:00
📈(frontend) snapshot media devices on the happy path
Also snapshot the state of media devices when the user successfully joins a meeting, not only when something goes wrong. This gives us the baseline needed to compute meaningful ratios — for example, the share of users who join a meeting without granting permissions, or without a microphone or camera available. Without a happy-path measurement, the current error-only data has no denominator to compare against.
This commit is contained in:
committed by
aleb_the_flash
parent
ab40ec365d
commit
c838229ec9
@@ -15,6 +15,7 @@ and this project adheres to
|
|||||||
- ✨(frontend) add a sound tester to the output select menu
|
- ✨(frontend) add a sound tester to the output select menu
|
||||||
- ✨(frontend) prompt for permissions when toggling a denied device
|
- ✨(frontend) prompt for permissions when toggling a denied device
|
||||||
- ⚗️(frontend) capture console.error in PostHog
|
- ⚗️(frontend) capture console.error in PostHog
|
||||||
|
- 📈(frontend) snapshot media devices on the happy path
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,9 @@ export const captureMediaEvent = async (
|
|||||||
| 'media-device-topology'
|
| 'media-device-topology'
|
||||||
| 'media-device-success'
|
| 'media-device-success'
|
||||||
| 'device-not-found'
|
| 'device-not-found'
|
||||||
| 'permissions-denied',
|
| 'permissions-denied'
|
||||||
|
| 'visit-room'
|
||||||
|
| 'connection-event',
|
||||||
props: Record<string, unknown>
|
props: Record<string, unknown>
|
||||||
) => {
|
) => {
|
||||||
captureEvent(event, { ...props, ...(await deviceSnapshot()) })
|
captureEvent(event, { ...props, ...(await deviceSnapshot()) })
|
||||||
|
|||||||
@@ -26,11 +26,7 @@ import { css } from '@/styled-system/css'
|
|||||||
import { BackgroundProcessorFactory } from '../livekit/components/blur'
|
import { BackgroundProcessorFactory } from '../livekit/components/blur'
|
||||||
import { LocalUserChoices } from '@/stores/userChoices'
|
import { LocalUserChoices } from '@/stores/userChoices'
|
||||||
import { MediaDeviceErrorAlert } from './MediaDeviceErrorAlert'
|
import { MediaDeviceErrorAlert } from './MediaDeviceErrorAlert'
|
||||||
import {
|
import { captureMediaEvent, reportError } from '@/features/analytics/telemetry'
|
||||||
captureEvent,
|
|
||||||
reportError,
|
|
||||||
captureMediaEvent,
|
|
||||||
} from '@/features/analytics/telemetry'
|
|
||||||
import { useConfig } from '@/api/useConfig'
|
import { useConfig } from '@/api/useConfig'
|
||||||
import { isFireFox } from '@/utils/livekit'
|
import { isFireFox } from '@/utils/livekit'
|
||||||
import { useIsMobile } from '@/utils/useIsMobile'
|
import { useIsMobile } from '@/utils/useIsMobile'
|
||||||
@@ -65,7 +61,7 @@ export const Conference = ({
|
|||||||
const { username } = useSnapshot(userStore)
|
const { username } = useSnapshot(userStore)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
captureEvent('visit-room', { slug: roomId })
|
void captureMediaEvent('visit-room', { slug: roomId })
|
||||||
}, [roomId])
|
}, [roomId])
|
||||||
const fetchKey = [keys.room, roomId]
|
const fetchKey = [keys.room, roomId]
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { connectionObserverStore } from '@/stores/connectionObserver'
|
|||||||
import { useFeatureFlagEnabled } from 'posthog-js/react'
|
import { useFeatureFlagEnabled } from 'posthog-js/react'
|
||||||
import { isMobileBrowser } from '@livekit/components-core'
|
import { isMobileBrowser } from '@livekit/components-core'
|
||||||
import { FeatureFlags } from '@/features/analytics/enums'
|
import { FeatureFlags } from '@/features/analytics/enums'
|
||||||
import { captureEvent } from '@/features/analytics/telemetry'
|
import { captureEvent, captureMediaEvent } from '@/features/analytics/telemetry'
|
||||||
|
|
||||||
const CANDIDATE_POLL_INTERVAL_MS = 5000
|
const CANDIDATE_POLL_INTERVAL_MS = 5000
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@ export const ConnectionObserver = () => {
|
|||||||
// total session duration from first connect to final disconnect.
|
// total session duration from first connect to final disconnect.
|
||||||
if (connectionStartTimeRef.current != null) return
|
if (connectionStartTimeRef.current != null) return
|
||||||
connectionStartTimeRef.current = Date.now()
|
connectionStartTimeRef.current = Date.now()
|
||||||
captureEvent('connection-event')
|
void captureMediaEvent('connection-event', {})
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleReconnect = () => {
|
const handleReconnect = () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user