diff --git a/src/analytics/PosthogAnalytics.ts b/src/analytics/PosthogAnalytics.ts index 9ef2e70c..0ca23fb3 100644 --- a/src/analytics/PosthogAnalytics.ts +++ b/src/analytics/PosthogAnalytics.ts @@ -30,6 +30,7 @@ import { MuteMicrophoneTracker, UndecryptableToDeviceEventTracker, QualitySurveyEventTracker, + CallDisconnectedEventTracker, } from "./PosthogEvents"; import { Config } from "../config/Config"; import { getUrlParams } from "../UrlParams"; @@ -437,4 +438,5 @@ export class PosthogAnalytics { public eventMuteCamera = new MuteCameraTracker(); public eventUndecryptableToDevice = new UndecryptableToDeviceEventTracker(); public eventQualitySurvey = new QualitySurveyEventTracker(); + public eventCallDisconnected = new CallDisconnectedEventTracker(); } diff --git a/src/analytics/PosthogEvents.ts b/src/analytics/PosthogEvents.ts index f2fecb4e..97e25b6f 100644 --- a/src/analytics/PosthogEvents.ts +++ b/src/analytics/PosthogEvents.ts @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +import { DisconnectReason } from "livekit-client"; + import { IPosthogEvent, PosthogAnalytics, @@ -181,3 +183,17 @@ export class QualitySurveyEventTracker { }); } } + +interface CallDisconnectedEvent { + eventName: "CallDisconnected"; + reason?: DisconnectReason; +} + +export class CallDisconnectedEventTracker { + track(reason?: DisconnectReason) { + PosthogAnalytics.instance.trackEvent({ + eventName: "CallDisconnected", + reason, + }); + } +} diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 30458599..604a5d95 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -191,6 +191,7 @@ export function InCallView({ const onDisconnected = useCallback( (reason?: DisconnectReason) => { + PosthogAnalytics.instance.eventCallDisconnected.track(reason); logger.info("Disconnected from livekit call with reason ", reason); onLeave( new Error("Disconnected from LiveKit call with reason " + reason)