86 lines
3.2 KiB
JavaScript
86 lines
3.2 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.GroupCallStats = void 0;
|
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
var _callStatsReportGatherer = require("./callStatsReportGatherer");
|
|
var _statsReportEmitter = require("./statsReportEmitter");
|
|
var _summaryStatsReportGatherer = require("./summaryStatsReportGatherer");
|
|
var _logger = require("../../logger");
|
|
/*
|
|
Copyright 2023 The Matrix.org Foundation C.I.C.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
class GroupCallStats {
|
|
constructor(groupCallId, userId, interval = 10000) {
|
|
this.groupCallId = groupCallId;
|
|
this.userId = userId;
|
|
this.interval = interval;
|
|
(0, _defineProperty2.default)(this, "timer", void 0);
|
|
(0, _defineProperty2.default)(this, "gatherers", new Map());
|
|
(0, _defineProperty2.default)(this, "reports", new _statsReportEmitter.StatsReportEmitter());
|
|
(0, _defineProperty2.default)(this, "summaryStatsReportGatherer", new _summaryStatsReportGatherer.SummaryStatsReportGatherer(this.reports));
|
|
}
|
|
start() {
|
|
if (this.timer === undefined && this.interval > 0) {
|
|
this.timer = setInterval(() => {
|
|
this.processStats();
|
|
}, this.interval);
|
|
}
|
|
}
|
|
stop() {
|
|
if (this.timer !== undefined) {
|
|
clearInterval(this.timer);
|
|
this.gatherers.forEach(c => c.stopProcessingStats());
|
|
}
|
|
}
|
|
hasStatsReportGatherer(callId) {
|
|
return this.gatherers.has(callId);
|
|
}
|
|
addStatsReportGatherer(callId, opponentMemberId, peerConnection) {
|
|
if (this.hasStatsReportGatherer(callId)) {
|
|
return false;
|
|
}
|
|
this.gatherers.set(callId, new _callStatsReportGatherer.CallStatsReportGatherer(callId, opponentMemberId, peerConnection, this.reports));
|
|
return true;
|
|
}
|
|
removeStatsReportGatherer(callId) {
|
|
return this.gatherers.delete(callId);
|
|
}
|
|
getStatsReportGatherer(callId) {
|
|
return this.hasStatsReportGatherer(callId) ? this.gatherers.get(callId) : undefined;
|
|
}
|
|
updateOpponentMember(callId, opponentMember) {
|
|
var _this$getStatsReportG;
|
|
(_this$getStatsReportG = this.getStatsReportGatherer(callId)) === null || _this$getStatsReportG === void 0 ? void 0 : _this$getStatsReportG.setOpponentMemberId(opponentMember);
|
|
}
|
|
processStats() {
|
|
const summary = [];
|
|
this.gatherers.forEach(c => {
|
|
summary.push(c.processStats(this.groupCallId, this.userId));
|
|
});
|
|
Promise.all(summary).then(s => this.summaryStatsReportGatherer.build(s)).catch(err => {
|
|
_logger.logger.error("Could not build summary stats report", err);
|
|
});
|
|
}
|
|
setInterval(interval) {
|
|
this.interval = interval;
|
|
}
|
|
}
|
|
exports.GroupCallStats = GroupCallStats;
|
|
//# sourceMappingURL=groupCallStats.js.map
|