From e8b9c2e06d53577fb00bc061dc37f872ad1e6f77 Mon Sep 17 00:00:00 2001 From: Marcin Wojtczak Date: Tue, 5 Nov 2024 14:42:20 +0000 Subject: [PATCH] feat: added meetingJoinPhase to CA metrics --- .../call-diagnostic/call-diagnostic-metrics.ts | 18 ++++++++++++++++++ .../src/metrics.types.ts | 2 ++ .../call-diagnostic/call-diagnostic-metrics.ts | 16 ++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics.ts b/packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics.ts index 2a64fc5fe92..c0d68682892 100644 --- a/packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics.ts +++ b/packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics.ts @@ -40,6 +40,7 @@ import { ClientEventPayloadError, ClientSubServiceType, BrowserLaunchMethodType, + MeetingJoinPhase, } from '../metrics.types'; import CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher'; import PreLoginMetricsBatcher from '../prelogin-metrics-batcher'; @@ -95,6 +96,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin { private logger: any; // to avoid adding @ts-ignore everywhere private hasLoggedBrowserSerial: boolean; private device: any; + private joinMeetingPhase: MeetingJoinPhase = 'pre-join'; // the default validator before piping an event to the batcher // this function can be overridden by the user @@ -118,6 +120,22 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin { this.preLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: this.webex}); } + /** + * Getter - Returns current meetingJoinPhase value + * @returns {string} + */ + get meetingJoinPhase() { + return this.joinMeetingPhase; + } + + /** + * Setter - sets meetingJoinPhase value + * @param {string} correlationId + */ + set meetingJoinPhase(joinMeetingPhase: MeetingJoinPhase) { + this.joinMeetingPhase = joinMeetingPhase; + } + /** * Returns the login type of the current user * @returns one of 'login-ci','unverified-guest', null diff --git a/packages/@webex/internal-plugin-metrics/src/metrics.types.ts b/packages/@webex/internal-plugin-metrics/src/metrics.types.ts index 9130029d62b..365f4eec350 100644 --- a/packages/@webex/internal-plugin-metrics/src/metrics.types.ts +++ b/packages/@webex/internal-plugin-metrics/src/metrics.types.ts @@ -285,3 +285,5 @@ export interface IMetricsAttributes { meetingId?: string; callId?: string; } + +export type MeetingJoinPhase = RawEvent['event']['meetingJoinPhase']; diff --git a/packages/@webex/internal-plugin-metrics/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts b/packages/@webex/internal-plugin-metrics/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts index bbbe37ecbf9..2c261dfe035 100644 --- a/packages/@webex/internal-plugin-metrics/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +++ b/packages/@webex/internal-plugin-metrics/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts @@ -699,6 +699,22 @@ describe('internal-plugin-metrics', () => { }); }); + describe('#meetingJoinPhase', () => { + it('should have a default value', () => { + const res = cd.meetingJoinPhase; + + assert.equal(res, 'pre-join'); + }); + + it('should have a getter and setter', () => { + cd.meetingJoinPhase = 'join'; + assert.equal(cd.meetingJoinPhase, 'join'); + + cd.meetingJoinPhase = 'in-meeting'; + assert.equal(cd.meetingJoinPhase, 'in-meeting'); + }); + }); + it('should prepare diagnostic event successfully', () => { const options = {meetingId: fakeMeeting.id}; const getOriginStub = sinon.stub(cd, 'getOrigin').returns({origin: 'fake-origin'});