@webex/plugin-meetings 2.19.1 → 2.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -300
- package/dist/constants.js +3 -206
- package/dist/constants.js.map +1 -1
- package/dist/meeting/index.js +352 -489
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +4 -213
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +0 -28
- package/dist/meetings/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +145 -86
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/package.json +5 -7
- package/src/constants.ts +1 -214
- package/src/meeting/index.js +110 -208
- package/src/meeting/util.js +4 -252
- package/src/meetings/index.js +0 -22
- package/src/statsAnalyzer/index.js +164 -99
- package/test/integration/spec/journey.js +2 -67
- package/test/unit/spec/meeting/index.js +88 -29
- package/test/unit/spec/meeting/utils.js +0 -2
- package/test/unit/spec/stats-analyzer/index.js +209 -1
- package/dist/analyzer/analyzer.js +0 -113
- package/dist/analyzer/analyzer.js.map +0 -1
- package/dist/analyzer/calculator.js +0 -87
- package/dist/analyzer/calculator.js.map +0 -1
- package/dist/metrics/mqa-processor.js +0 -170
- package/dist/metrics/mqa-processor.js.map +0 -1
- package/dist/stats/data.js +0 -93
- package/dist/stats/data.js.map +0 -1
- package/dist/stats/events.js +0 -222
- package/dist/stats/events.js.map +0 -1
- package/dist/stats/filter.js +0 -84
- package/dist/stats/filter.js.map +0 -1
- package/dist/stats/history.js +0 -147
- package/dist/stats/history.js.map +0 -1
- package/dist/stats/index.js +0 -425
- package/dist/stats/index.js.map +0 -1
- package/dist/stats/metrics.js +0 -112
- package/dist/stats/metrics.js.map +0 -1
- package/dist/stats/stats.js +0 -592
- package/dist/stats/stats.js.map +0 -1
- package/dist/stats/stream.js +0 -156
- package/dist/stats/stream.js.map +0 -1
- package/dist/stats/transformer.js +0 -126
- package/dist/stats/transformer.js.map +0 -1
- package/dist/stats/util.js +0 -64
- package/dist/stats/util.js.map +0 -1
- package/src/analyzer/analyzer.js +0 -78
- package/src/analyzer/calculator.js +0 -77
- package/src/metrics/mqa-processor.js +0 -118
- package/src/stats/data.js +0 -56
- package/src/stats/events.js +0 -185
- package/src/stats/filter.js +0 -40
- package/src/stats/history.js +0 -107
- package/src/stats/index.js +0 -320
- package/src/stats/metrics.js +0 -95
- package/src/stats/stats.js +0 -477
- package/src/stats/stream.js +0 -108
- package/src/stats/transformer.js +0 -109
- package/src/stats/util.js +0 -44
package/src/meeting/util.js
CHANGED
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
import {isEmpty} from 'lodash';
|
|
2
2
|
|
|
3
3
|
import {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';
|
|
4
|
-
import StatsUtil from '../stats/util';
|
|
5
4
|
import Metrics from '../metrics';
|
|
6
|
-
import {eventType, trigger
|
|
5
|
+
import {eventType, trigger} from '../metrics/config';
|
|
7
6
|
import Media from '../media';
|
|
8
7
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
9
|
-
import WebRTCStats from '../stats/index';
|
|
10
8
|
import {INTENT_TO_JOIN,
|
|
11
9
|
_LEFT_,
|
|
12
10
|
_IDLE_,
|
|
13
11
|
_JOINED_,
|
|
14
|
-
STATS,
|
|
15
|
-
EVENT_TRIGGERS,
|
|
16
12
|
PASSWORD_STATUS,
|
|
17
13
|
DISPLAY_HINTS,
|
|
18
14
|
FULL_STATE} from '../constants';
|
|
19
|
-
import Trigger from '../common/events/trigger-proxy';
|
|
20
15
|
import IntentToJoinError from '../common/errors/intent-to-join';
|
|
21
16
|
import JoinMeetingError from '../common/errors/join-meeting';
|
|
22
17
|
import ParameterError from '../common/errors/parameter';
|
|
@@ -121,9 +116,10 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
121
116
|
|
|
122
117
|
MeetingUtil.cleanUp = (meeting) => {
|
|
123
118
|
// make sure we send last metrics before we close the peerconnection
|
|
124
|
-
|
|
119
|
+
const stopStatsAnalyzer = (meeting.statsAnalyzer) ? meeting.statsAnalyzer.stopAnalyzer() : Promise.resolve();
|
|
125
120
|
|
|
126
|
-
return
|
|
121
|
+
return stopStatsAnalyzer
|
|
122
|
+
.then(() => meeting.closeLocalStream())
|
|
127
123
|
.then(() => meeting.closeLocalShare())
|
|
128
124
|
.then(() => meeting.closeRemoteTracks())
|
|
129
125
|
.then(() => meeting.closePeerConnections())
|
|
@@ -132,7 +128,6 @@ MeetingUtil.cleanUp = (meeting) => {
|
|
|
132
128
|
meeting.unsetLocalShareTrack();
|
|
133
129
|
meeting.unsetRemoteTracks();
|
|
134
130
|
meeting.unsetPeerConnections();
|
|
135
|
-
meeting.cleanMQAInterval();
|
|
136
131
|
meeting.reconnectionManager.cleanUp();
|
|
137
132
|
})
|
|
138
133
|
.then(() => meeting.roap.stop(meeting.correlationId, meeting.roapSeq));
|
|
@@ -467,249 +462,6 @@ MeetingUtil.unlockMeeting = (actions, request, locusUrl) => {
|
|
|
467
462
|
return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));
|
|
468
463
|
};
|
|
469
464
|
|
|
470
|
-
MeetingUtil.startInternalStats = (meeting) => {
|
|
471
|
-
if (!meeting.internalStats) {
|
|
472
|
-
const options = {
|
|
473
|
-
useConfig: true,
|
|
474
|
-
senders: [
|
|
475
|
-
{
|
|
476
|
-
id: 'mainAudio',
|
|
477
|
-
correlate: 'audio',
|
|
478
|
-
history: true,
|
|
479
|
-
onEvent: (event) => {
|
|
480
|
-
// TODO: we don't need checks like this since it comes from the transceiver
|
|
481
|
-
// refactor event linkage to use callbacks instead of events
|
|
482
|
-
if (event.kind === 'audio' && event.stat === 'bytesSent') {
|
|
483
|
-
Trigger.trigger(
|
|
484
|
-
meeting,
|
|
485
|
-
{
|
|
486
|
-
file: 'meeting/util',
|
|
487
|
-
function: 'startInternalStats'
|
|
488
|
-
},
|
|
489
|
-
EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,
|
|
490
|
-
{
|
|
491
|
-
type: mediaType.AUDIO
|
|
492
|
-
}
|
|
493
|
-
);
|
|
494
|
-
Metrics.postEvent({
|
|
495
|
-
event: eventType.SENDING_MEDIA_START,
|
|
496
|
-
meeting,
|
|
497
|
-
data: {
|
|
498
|
-
mediaType: mediaType.AUDIO
|
|
499
|
-
}
|
|
500
|
-
});
|
|
501
|
-
}
|
|
502
|
-
else if (event.stop && event.stat === 'bytesSent') {
|
|
503
|
-
Metrics.postEvent({
|
|
504
|
-
event: eventType.SENDING_MEDIA_STOP,
|
|
505
|
-
meeting,
|
|
506
|
-
data: {
|
|
507
|
-
mediaType: mediaType.AUDIO
|
|
508
|
-
}
|
|
509
|
-
});
|
|
510
|
-
}
|
|
511
|
-
},
|
|
512
|
-
onData: () => {}
|
|
513
|
-
},
|
|
514
|
-
{
|
|
515
|
-
id: 'mainVideo',
|
|
516
|
-
correlate: 'video',
|
|
517
|
-
history: true,
|
|
518
|
-
onEvent: (event) => {
|
|
519
|
-
if (event.kind === 'video' && event.stat === 'bytesSent') {
|
|
520
|
-
Trigger.trigger(
|
|
521
|
-
meeting,
|
|
522
|
-
{
|
|
523
|
-
file: 'meeting/util',
|
|
524
|
-
function: 'startInternalStats'
|
|
525
|
-
},
|
|
526
|
-
EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,
|
|
527
|
-
{
|
|
528
|
-
type: mediaType.VIDEO
|
|
529
|
-
}
|
|
530
|
-
);
|
|
531
|
-
Metrics.postEvent({
|
|
532
|
-
event: eventType.SENDING_MEDIA_START,
|
|
533
|
-
meeting,
|
|
534
|
-
data: {
|
|
535
|
-
mediaType: mediaType.VIDEO
|
|
536
|
-
}
|
|
537
|
-
});
|
|
538
|
-
}
|
|
539
|
-
else if (event.stop && event.stat === 'bytesSent') {
|
|
540
|
-
Metrics.postEvent({
|
|
541
|
-
event: eventType.SENDING_MEDIA_STOP,
|
|
542
|
-
meeting,
|
|
543
|
-
data: {
|
|
544
|
-
mediaType: mediaType.VIDEO
|
|
545
|
-
}
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
},
|
|
549
|
-
onData: () => {}
|
|
550
|
-
},
|
|
551
|
-
{
|
|
552
|
-
id: 'mainShare',
|
|
553
|
-
correlate: 'video',
|
|
554
|
-
onEvent: (event) => {
|
|
555
|
-
if (event.kind === 'share' && event.stat === 'bytesSent') {
|
|
556
|
-
Trigger.trigger(
|
|
557
|
-
meeting,
|
|
558
|
-
{
|
|
559
|
-
file: 'meeting/util',
|
|
560
|
-
function: 'startInternalStats'
|
|
561
|
-
},
|
|
562
|
-
EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,
|
|
563
|
-
{
|
|
564
|
-
type: mediaType.SHARE
|
|
565
|
-
}
|
|
566
|
-
);
|
|
567
|
-
Metrics.postEvent({
|
|
568
|
-
event: eventType.SENDING_SHARE_START,
|
|
569
|
-
meeting,
|
|
570
|
-
data: {
|
|
571
|
-
mediaType: mediaType.SHARE
|
|
572
|
-
}
|
|
573
|
-
});
|
|
574
|
-
}
|
|
575
|
-
else if (event.stop && event.stat === 'bytesSent') {
|
|
576
|
-
Metrics.postEvent({
|
|
577
|
-
event: eventType.SENDING_SHARE_STOP,
|
|
578
|
-
meeting,
|
|
579
|
-
data: {
|
|
580
|
-
mediaType: mediaType.SHARE
|
|
581
|
-
}
|
|
582
|
-
});
|
|
583
|
-
}
|
|
584
|
-
},
|
|
585
|
-
onData: () => {}
|
|
586
|
-
}
|
|
587
|
-
],
|
|
588
|
-
receivers: [
|
|
589
|
-
{
|
|
590
|
-
id: 'mainAudio',
|
|
591
|
-
correlate: 'audio',
|
|
592
|
-
history: true,
|
|
593
|
-
onEvent: (event) => {
|
|
594
|
-
if (event.kind === 'audio' && event.stat === 'bytesReceived') {
|
|
595
|
-
Trigger.trigger(
|
|
596
|
-
meeting,
|
|
597
|
-
{
|
|
598
|
-
file: 'meeting/util',
|
|
599
|
-
function: 'startInternalStats'
|
|
600
|
-
},
|
|
601
|
-
EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,
|
|
602
|
-
{
|
|
603
|
-
type: mediaType.AUDIO
|
|
604
|
-
}
|
|
605
|
-
);
|
|
606
|
-
Metrics.postEvent({
|
|
607
|
-
event: eventType.RECEIVING_MEDIA_START,
|
|
608
|
-
meeting,
|
|
609
|
-
data: {
|
|
610
|
-
mediaType: mediaType.AUDIO
|
|
611
|
-
}
|
|
612
|
-
});
|
|
613
|
-
}
|
|
614
|
-
else if (event.stop && event.stat === 'bytesReceived') {
|
|
615
|
-
Metrics.postEvent({
|
|
616
|
-
event: eventType.RECEIVING_MEDIA_STOP,
|
|
617
|
-
meeting,
|
|
618
|
-
data: {
|
|
619
|
-
mediaType: mediaType.AUDIO
|
|
620
|
-
}
|
|
621
|
-
});
|
|
622
|
-
}
|
|
623
|
-
},
|
|
624
|
-
onData: () => {}
|
|
625
|
-
},
|
|
626
|
-
{
|
|
627
|
-
id: 'mainVideo',
|
|
628
|
-
correlate: 'video',
|
|
629
|
-
history: true,
|
|
630
|
-
onEvent: (event) => {
|
|
631
|
-
if (event.kind === 'video' && event.stat === 'bytesReceived') {
|
|
632
|
-
Trigger.trigger(
|
|
633
|
-
meeting,
|
|
634
|
-
{
|
|
635
|
-
file: 'meeting/util',
|
|
636
|
-
function: 'startInternalStats'
|
|
637
|
-
},
|
|
638
|
-
EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,
|
|
639
|
-
{
|
|
640
|
-
type: mediaType.VIDEO
|
|
641
|
-
}
|
|
642
|
-
);
|
|
643
|
-
Metrics.postEvent({
|
|
644
|
-
event: eventType.RECEIVING_MEDIA_START,
|
|
645
|
-
meeting,
|
|
646
|
-
data: {
|
|
647
|
-
mediaType: mediaType.VIDEO
|
|
648
|
-
}
|
|
649
|
-
});
|
|
650
|
-
}
|
|
651
|
-
else if (event.stop && event.stat === 'bytesReceived') {
|
|
652
|
-
Metrics.postEvent({
|
|
653
|
-
event: eventType.RECEIVING_MEDIA_STOP,
|
|
654
|
-
meeting,
|
|
655
|
-
data: {
|
|
656
|
-
mediaType: mediaType.VIDEO
|
|
657
|
-
}
|
|
658
|
-
});
|
|
659
|
-
}
|
|
660
|
-
},
|
|
661
|
-
onData: () => {}
|
|
662
|
-
},
|
|
663
|
-
{
|
|
664
|
-
id: 'mainShare',
|
|
665
|
-
correlate: 'video',
|
|
666
|
-
onEvent: (event) => {
|
|
667
|
-
if (event.kind === 'share' && event.stat === 'bytesReceived') {
|
|
668
|
-
Trigger.trigger(
|
|
669
|
-
meeting,
|
|
670
|
-
{
|
|
671
|
-
file: 'meeting/util',
|
|
672
|
-
function: 'startInternalStats'
|
|
673
|
-
},
|
|
674
|
-
EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,
|
|
675
|
-
{
|
|
676
|
-
type: mediaType.SHARE
|
|
677
|
-
}
|
|
678
|
-
);
|
|
679
|
-
Metrics.postEvent({
|
|
680
|
-
event: eventType.RECEIVING_MEDIA_START,
|
|
681
|
-
meeting,
|
|
682
|
-
data: {
|
|
683
|
-
mediaType: mediaType.SHARE
|
|
684
|
-
}
|
|
685
|
-
});
|
|
686
|
-
}
|
|
687
|
-
else if (event.stop && event.stat === 'bytesReceived') {
|
|
688
|
-
Metrics.postEvent({
|
|
689
|
-
event: eventType.RECEIVING_MEDIA_STOP,
|
|
690
|
-
meeting,
|
|
691
|
-
data: {
|
|
692
|
-
mediaType: mediaType.SHARE
|
|
693
|
-
}
|
|
694
|
-
});
|
|
695
|
-
}
|
|
696
|
-
},
|
|
697
|
-
onData: () => {}
|
|
698
|
-
}
|
|
699
|
-
]
|
|
700
|
-
};
|
|
701
|
-
|
|
702
|
-
StatsUtil.generateOptions(options, STATS.CONFIG, meeting);
|
|
703
|
-
|
|
704
|
-
options.config = STATS.CONFIG;
|
|
705
|
-
|
|
706
|
-
// pass the attrs and options for the webex instance
|
|
707
|
-
meeting.internalStats = new WebRTCStats(meeting.attrs, meeting.options, options);
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
return meeting.internalStats;
|
|
711
|
-
};
|
|
712
|
-
|
|
713
465
|
MeetingUtil.handleAudioLogging = (audioTrack) => {
|
|
714
466
|
const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';
|
|
715
467
|
|
package/src/meetings/index.js
CHANGED
|
@@ -45,8 +45,6 @@ import Meeting from '../meeting';
|
|
|
45
45
|
import PersonalMeetingRoom from '../personal-meeting-room';
|
|
46
46
|
import Reachability from '../reachability';
|
|
47
47
|
import Request from '../meetings/request';
|
|
48
|
-
import StatsAnalyzer from '../analyzer/analyzer';
|
|
49
|
-
import StatsCalculator from '../analyzer/calculator';
|
|
50
48
|
import PasswordError from '../common/errors/password-error';
|
|
51
49
|
import CaptchaError from '../common/errors/captcha-error';
|
|
52
50
|
|
|
@@ -971,24 +969,4 @@ export default class Meetings extends WebexPlugin {
|
|
|
971
969
|
getLogger() {
|
|
972
970
|
return LoggerProxy.get();
|
|
973
971
|
}
|
|
974
|
-
|
|
975
|
-
/**
|
|
976
|
-
* Get the Stats Analyzer singleton
|
|
977
|
-
* @returns {StatsAnalyzer}
|
|
978
|
-
* @public
|
|
979
|
-
* @memberof Meetings
|
|
980
|
-
*/
|
|
981
|
-
getAnalyzer() {
|
|
982
|
-
return StatsAnalyzer;
|
|
983
|
-
}
|
|
984
|
-
|
|
985
|
-
/**
|
|
986
|
-
* Get the Stats Calculator singleton
|
|
987
|
-
* @returns {StatsCalculator}
|
|
988
|
-
* @public
|
|
989
|
-
* @memberof Meetings
|
|
990
|
-
*/
|
|
991
|
-
getCalculator() {
|
|
992
|
-
return StatsCalculator;
|
|
993
|
-
}
|
|
994
972
|
}
|