Skip to content

Commit

Permalink
feat(plugin-meetings): add meetingUserCount mqe (#4060)
Browse files Browse the repository at this point in the history
Co-authored-by: evujici <[email protected]>
  • Loading branch information
edvujic and evujici authored Jan 20, 2025
1 parent 4ab218b commit c9b4544
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 0 deletions.
9 changes: 9 additions & 0 deletions packages/@webex/plugin-meetings/src/meeting/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ import PermissionError from '../common/errors/permission';
import {LocusMediaRequest} from './locusMediaRequest';
import {ConnectionStateHandler, ConnectionStateEvent} from './connectionStateHandler';
import JoinWebinarError from '../common/errors/join-webinar-error';
import Member from '../member';

// default callback so we don't call an undefined function, but in practice it should never be used
const DEFAULT_ICE_PHASE_CALLBACK = () => 'JOIN_MEETING_FINAL';
Expand Down Expand Up @@ -6472,6 +6473,14 @@ export default class Meeting extends StatelessWebexPlugin {
this.webex.meetings.geoHintInfo?.clientAddress ||
options.data.intervalMetadata.peerReflexiveIP ||
MQA_STATS.DEFAULT_IP;

const {members} = this.getMembers().membersCollection;

// Count members that are in the meeting
options.data.intervalMetadata.meetingUserCount = Object.values(members).filter(
(member: Member) => member.isInMeeting
).length;

// @ts-ignore
this.webex.internal.newMetrics.submitMQE({
name: 'client.mediaquality.event',
Expand Down
45 changes: 45 additions & 0 deletions packages/@webex/plugin-meetings/test/unit/spec/meeting/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3479,6 +3479,51 @@ describe('plugin-meetings', () => {
});
});

it('counts the number of members that are in the meeting for MEDIA_QUALITY event', async () => {
let fakeMembersCollection = {
members: {
member1: { isInMeeting: true },
member2: { isInMeeting: true },
member3: { isInMeeting: false },
},
};
sinon.stub(meeting, 'getMembers').returns({ membersCollection: fakeMembersCollection });
const fakeData = { intervalMetadata: {}, networkType: 'wifi' };

statsAnalyzerStub.emit(
{ file: 'test', function: 'test' },
StatsAnalyzerEventNames.MEDIA_QUALITY,
{ data: fakeData }
);

assert.calledWithMatch(webex.internal.newMetrics.submitMQE, {
name: 'client.mediaquality.event',
options: {
meetingId: meeting.id,
},
payload: {
intervals: [sinon.match.has('intervalMetadata', sinon.match.has('meetingUserCount', 2))],
},
});
fakeMembersCollection.members.member2.isInMeeting = false;

statsAnalyzerStub.emit(
{ file: 'test', function: 'test' },
StatsAnalyzerEventNames.MEDIA_QUALITY,
{ data: fakeData }
);

assert.calledWithMatch(webex.internal.newMetrics.submitMQE, {
name: 'client.mediaquality.event',
options: {
meetingId: meeting.id,
},
payload: {
intervals: [sinon.match.has('intervalMetadata', sinon.match.has('meetingUserCount', 1))],
},
});
});

it('calls submitMQE correctly', async () => {
const fakeData = {intervalMetadata: {bla: 'bla'}, networkType: 'wifi'};

Expand Down

0 comments on commit c9b4544

Please sign in to comment.