@flashphoner/websdk 2.0.262 → 2.0.264
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/docTemplate/README.md +1 -1
- package/flashphoner-no-flash.js +101 -36
- package/flashphoner-no-flash.min.js +1 -1
- package/flashphoner-no-webrtc.js +101 -36
- package/flashphoner-no-webrtc.min.js +1 -1
- package/flashphoner-no-wsplayer.js +101 -36
- package/flashphoner-no-wsplayer.min.js +1 -1
- package/flashphoner-room-api-webrtc-only.js +101 -36
- package/flashphoner-room-api-webrtc-only.min.js +1 -1
- package/flashphoner-room-api.js +80 -31
- package/flashphoner-room-api.min.js +1 -1
- package/flashphoner-temasys-flash-websocket-without-adapterjs.js +101 -36
- package/flashphoner-temasys-flash-websocket.js +101 -36
- package/flashphoner-temasys-flash-websocket.min.js +1 -1
- package/flashphoner-webrtc-only.js +101 -36
- package/flashphoner-webrtc-only.min.js +1 -1
- package/flashphoner.js +101 -36
- package/flashphoner.min.js +1 -1
- package/package.json +1 -2
- package/src/stats-collector.js +80 -31
|
@@ -12946,6 +12946,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
12946
12946
|
metricsBatch: null,
|
|
12947
12947
|
timer: null,
|
|
12948
12948
|
batchCount: 0,
|
|
12949
|
+
timerBusy: false,
|
|
12949
12950
|
start: function () {
|
|
12950
12951
|
var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
12951
12952
|
var error;
|
|
@@ -13028,7 +13029,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13028
13029
|
_context2.n = 1;
|
|
13029
13030
|
break;
|
|
13030
13031
|
}
|
|
13031
|
-
statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
|
|
13032
|
+
statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
|
|
13032
13033
|
return _context2.a(2);
|
|
13033
13034
|
case 1:
|
|
13034
13035
|
if (!(description.types || description.compression)) {
|
|
@@ -13088,14 +13089,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13088
13089
|
}(),
|
|
13089
13090
|
updateHeaders: function () {
|
|
13090
13091
|
var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
13091
|
-
var stats
|
|
13092
|
+
var stats,
|
|
13093
|
+
currentHeaders,
|
|
13094
|
+
headersChanged,
|
|
13095
|
+
newMetrics,
|
|
13096
|
+
_args3 = arguments;
|
|
13092
13097
|
return _regenerator().w(function (_context3) {
|
|
13093
13098
|
while (1) switch (_context3.n) {
|
|
13094
13099
|
case 0:
|
|
13100
|
+
stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
|
|
13101
|
+
currentHeaders = "";
|
|
13102
|
+
headersChanged = false;
|
|
13103
|
+
if (stats) {
|
|
13104
|
+
_context3.n = 2;
|
|
13105
|
+
break;
|
|
13106
|
+
}
|
|
13095
13107
|
_context3.n = 1;
|
|
13096
13108
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
13097
13109
|
case 1:
|
|
13098
13110
|
stats = _context3.v;
|
|
13111
|
+
case 2:
|
|
13099
13112
|
Object.keys(statCollector.description.types).forEach(function (type) {
|
|
13100
13113
|
var typeDescriptor = statCollector.description.types[type];
|
|
13101
13114
|
var metricsString = "";
|
|
@@ -13108,11 +13121,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13108
13121
|
}
|
|
13109
13122
|
if (stats[type]) {
|
|
13110
13123
|
stats[type].forEach(function (report) {
|
|
13111
|
-
statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
|
|
13124
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
|
|
13112
13125
|
if (contentFilters) {
|
|
13113
13126
|
var filtersMatched = true;
|
|
13114
13127
|
for (var filter in contentFilters) {
|
|
13115
|
-
statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
13128
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
13116
13129
|
var filterMatched = false;
|
|
13117
13130
|
if (report[filter]) {
|
|
13118
13131
|
var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
|
|
@@ -13120,7 +13133,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13120
13133
|
try {
|
|
13121
13134
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
13122
13135
|
var value = _step.value;
|
|
13123
|
-
statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
|
|
13136
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
|
|
13124
13137
|
if (report[filter] === value) {
|
|
13125
13138
|
filterMatched = true;
|
|
13126
13139
|
break;
|
|
@@ -13138,18 +13151,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13138
13151
|
}
|
|
13139
13152
|
}
|
|
13140
13153
|
if (filtersMatched) {
|
|
13141
|
-
statCollector.addHeaders(report, metricsString);
|
|
13154
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
13142
13155
|
}
|
|
13143
13156
|
} else {
|
|
13144
|
-
statCollector.addHeaders(report, metricsString);
|
|
13157
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
13145
13158
|
}
|
|
13146
13159
|
});
|
|
13147
13160
|
} else {
|
|
13148
|
-
statCollector.logger.
|
|
13161
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
|
|
13149
13162
|
}
|
|
13150
13163
|
});
|
|
13151
|
-
|
|
13152
|
-
|
|
13164
|
+
if (currentHeaders !== statCollector.headers) {
|
|
13165
|
+
headersChanged = true;
|
|
13166
|
+
newMetrics = [];
|
|
13167
|
+
currentHeaders.split(",").forEach(function (header) {
|
|
13168
|
+
if (statCollector.headers.indexOf(header) === -1) {
|
|
13169
|
+
newMetrics.push(header);
|
|
13170
|
+
}
|
|
13171
|
+
});
|
|
13172
|
+
if (newMetrics.length) {
|
|
13173
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
|
|
13174
|
+
}
|
|
13175
|
+
statCollector.headers = currentHeaders;
|
|
13176
|
+
}
|
|
13177
|
+
return _context3.a(2, headersChanged);
|
|
13153
13178
|
}
|
|
13154
13179
|
}, _callee3);
|
|
13155
13180
|
}));
|
|
@@ -13158,24 +13183,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13158
13183
|
}
|
|
13159
13184
|
return updateHeaders;
|
|
13160
13185
|
}(),
|
|
13161
|
-
addHeaders: function addHeaders(report, metricsString) {
|
|
13186
|
+
addHeaders: function addHeaders(currentHeaders, report, metricsString) {
|
|
13162
13187
|
if (metricsString) {
|
|
13163
13188
|
var metrics = metricsString.split(",");
|
|
13164
13189
|
metrics.forEach(function (metric) {
|
|
13165
|
-
var metricFound = false;
|
|
13166
13190
|
for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
|
|
13167
13191
|
var key = _Object$keys[_i];
|
|
13168
13192
|
if (metric === key) {
|
|
13169
|
-
|
|
13170
|
-
metricFound = true;
|
|
13193
|
+
currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
|
|
13171
13194
|
break;
|
|
13172
13195
|
}
|
|
13173
13196
|
}
|
|
13174
|
-
if (!metricFound) {
|
|
13175
|
-
statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
|
|
13176
|
-
}
|
|
13177
13197
|
});
|
|
13178
13198
|
}
|
|
13199
|
+
return currentHeaders;
|
|
13179
13200
|
},
|
|
13180
13201
|
updateCompression: function () {
|
|
13181
13202
|
var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
@@ -13228,7 +13249,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13228
13249
|
case 2:
|
|
13229
13250
|
_context5.p = 2;
|
|
13230
13251
|
_t2 = _context5.v;
|
|
13231
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
13252
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
13232
13253
|
statCollector.compression = "none";
|
|
13233
13254
|
case 3:
|
|
13234
13255
|
return _context5.a(2);
|
|
@@ -13249,7 +13270,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13249
13270
|
statCollector.send("webRTCMetricsClientDescription", data);
|
|
13250
13271
|
},
|
|
13251
13272
|
send: function send(message, data) {
|
|
13252
|
-
statCollector.logger.debug(LOG_PREFIX, data);
|
|
13273
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
|
|
13253
13274
|
if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
|
|
13254
13275
|
statCollector.wsConnection.send(JSON.stringify({
|
|
13255
13276
|
message: message,
|
|
@@ -13272,22 +13293,24 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13272
13293
|
},
|
|
13273
13294
|
collectMetrics: function () {
|
|
13274
13295
|
var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
|
|
13275
|
-
var stats, metrics;
|
|
13296
|
+
var stats, metrics, lostMetrics, headersUpdated;
|
|
13276
13297
|
return _regenerator().w(function (_context6) {
|
|
13277
13298
|
while (1) switch (_context6.n) {
|
|
13278
13299
|
case 0:
|
|
13279
|
-
if (!statCollector.timer) {
|
|
13280
|
-
_context6.n =
|
|
13300
|
+
if (!(statCollector.timer && !statCollector.timerBusy)) {
|
|
13301
|
+
_context6.n = 6;
|
|
13281
13302
|
break;
|
|
13282
13303
|
}
|
|
13304
|
+
// Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
|
|
13305
|
+
// So we guard the timer callback with a dumb boolean
|
|
13306
|
+
statCollector.timerBusy = true;
|
|
13283
13307
|
_context6.n = 1;
|
|
13284
13308
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
13285
13309
|
case 1:
|
|
13286
13310
|
stats = _context6.v;
|
|
13287
|
-
|
|
13288
|
-
statCollector.metricsBatch = [];
|
|
13289
|
-
}
|
|
13311
|
+
statCollector.startNewBatch();
|
|
13290
13312
|
metrics = [];
|
|
13313
|
+
lostMetrics = [];
|
|
13291
13314
|
statCollector.headers.split(",").forEach(function (header) {
|
|
13292
13315
|
var components = header.split(".");
|
|
13293
13316
|
var descriptor = {
|
|
@@ -13295,7 +13318,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13295
13318
|
id: components[1],
|
|
13296
13319
|
name: components[2]
|
|
13297
13320
|
};
|
|
13298
|
-
var value =
|
|
13321
|
+
var value = null;
|
|
13299
13322
|
if (stats[descriptor.type]) {
|
|
13300
13323
|
var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
|
|
13301
13324
|
_step2;
|
|
@@ -13313,17 +13336,46 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13313
13336
|
_iterator2.f();
|
|
13314
13337
|
}
|
|
13315
13338
|
}
|
|
13316
|
-
|
|
13339
|
+
if (value === null) {
|
|
13340
|
+
lostMetrics.push(descriptor);
|
|
13341
|
+
} else {
|
|
13342
|
+
metrics.push(value);
|
|
13343
|
+
}
|
|
13317
13344
|
});
|
|
13345
|
+
// Metrics list may change if some metrics are added or some metrics are lost #WCS-4627
|
|
13346
|
+
_context6.n = 2;
|
|
13347
|
+
return statCollector.updateHeaders(stats);
|
|
13348
|
+
case 2:
|
|
13349
|
+
headersUpdated = _context6.v;
|
|
13350
|
+
if (!lostMetrics.length) {
|
|
13351
|
+
_context6.n = 4;
|
|
13352
|
+
break;
|
|
13353
|
+
}
|
|
13354
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
|
|
13355
|
+
// Send metrics already collected and start a new batch with current metrics array to send them later #WCS-4627
|
|
13356
|
+
_context6.n = 3;
|
|
13357
|
+
return statCollector.sendMetrics();
|
|
13358
|
+
case 3:
|
|
13359
|
+
statCollector.startNewBatch(metrics);
|
|
13360
|
+
_context6.n = 5;
|
|
13361
|
+
break;
|
|
13362
|
+
case 4:
|
|
13318
13363
|
statCollector.metricsBatch.push(metrics);
|
|
13319
13364
|
statCollector.batchCount--;
|
|
13320
|
-
if (!(statCollector.batchCount === 0)) {
|
|
13321
|
-
_context6.n =
|
|
13365
|
+
if (!(statCollector.batchCount === 0 || headersUpdated)) {
|
|
13366
|
+
_context6.n = 5;
|
|
13322
13367
|
break;
|
|
13323
13368
|
}
|
|
13324
|
-
_context6.n =
|
|
13369
|
+
_context6.n = 5;
|
|
13325
13370
|
return statCollector.sendMetrics();
|
|
13326
|
-
case
|
|
13371
|
+
case 5:
|
|
13372
|
+
// Check if metrics list changed and send a new headers if needed #WCS-4619
|
|
13373
|
+
if (headersUpdated) {
|
|
13374
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
|
|
13375
|
+
statCollector.sendHeaders();
|
|
13376
|
+
}
|
|
13377
|
+
statCollector.timerBusy = false;
|
|
13378
|
+
case 6:
|
|
13327
13379
|
return _context6.a(2);
|
|
13328
13380
|
}
|
|
13329
13381
|
}, _callee6);
|
|
@@ -13340,7 +13392,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13340
13392
|
while (1) switch (_context7.p = _context7.n) {
|
|
13341
13393
|
case 0:
|
|
13342
13394
|
metricsToSend = [];
|
|
13343
|
-
for (i = 0; i < statCollector.metricsBatch.length; i++) {
|
|
13395
|
+
for (i = 0; statCollector.metricsBatch && i < statCollector.metricsBatch.length; i++) {
|
|
13344
13396
|
metricsString = "";
|
|
13345
13397
|
for (j = 0; j < statCollector.metricsBatch[i].length; j++) {
|
|
13346
13398
|
valueString = valueToString(statCollector.metricsBatch[i][j]);
|
|
@@ -13374,7 +13426,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13374
13426
|
case 3:
|
|
13375
13427
|
_context7.p = 3;
|
|
13376
13428
|
_t3 = _context7.v;
|
|
13377
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
13429
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
13378
13430
|
metricsData = null;
|
|
13379
13431
|
case 4:
|
|
13380
13432
|
_context7.n = 6;
|
|
@@ -13389,8 +13441,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13389
13441
|
};
|
|
13390
13442
|
statCollector.send("webRTCMetricsBatch", data);
|
|
13391
13443
|
}
|
|
13392
|
-
statCollector.
|
|
13393
|
-
statCollector.batchCount = statCollector.description.batchSize;
|
|
13444
|
+
statCollector.cleanBatch();
|
|
13394
13445
|
case 7:
|
|
13395
13446
|
return _context7.a(2);
|
|
13396
13447
|
}
|
|
@@ -13400,7 +13451,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13400
13451
|
return _sendMetrics.apply(this, arguments);
|
|
13401
13452
|
}
|
|
13402
13453
|
return sendMetrics;
|
|
13403
|
-
}()
|
|
13454
|
+
}(),
|
|
13455
|
+
startNewBatch: function startNewBatch(metrics) {
|
|
13456
|
+
if (!statCollector.metricsBatch) {
|
|
13457
|
+
statCollector.metricsBatch = [];
|
|
13458
|
+
if (metrics) {
|
|
13459
|
+
statCollector.metricsBatch.push(metrics);
|
|
13460
|
+
}
|
|
13461
|
+
}
|
|
13462
|
+
},
|
|
13463
|
+
cleanBatch: function cleanBatch() {
|
|
13464
|
+
if (statCollector.metricsBatch) {
|
|
13465
|
+
statCollector.metricsBatch = null;
|
|
13466
|
+
statCollector.batchCount = statCollector.description.batchSize;
|
|
13467
|
+
}
|
|
13468
|
+
}
|
|
13404
13469
|
};
|
|
13405
13470
|
return statCollector;
|
|
13406
13471
|
};
|
|
@@ -19701,6 +19701,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19701
19701
|
metricsBatch: null,
|
|
19702
19702
|
timer: null,
|
|
19703
19703
|
batchCount: 0,
|
|
19704
|
+
timerBusy: false,
|
|
19704
19705
|
start: function () {
|
|
19705
19706
|
var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
19706
19707
|
var error;
|
|
@@ -19783,7 +19784,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19783
19784
|
_context2.n = 1;
|
|
19784
19785
|
break;
|
|
19785
19786
|
}
|
|
19786
|
-
statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
|
|
19787
|
+
statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
|
|
19787
19788
|
return _context2.a(2);
|
|
19788
19789
|
case 1:
|
|
19789
19790
|
if (!(description.types || description.compression)) {
|
|
@@ -19843,14 +19844,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19843
19844
|
}(),
|
|
19844
19845
|
updateHeaders: function () {
|
|
19845
19846
|
var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
19846
|
-
var stats
|
|
19847
|
+
var stats,
|
|
19848
|
+
currentHeaders,
|
|
19849
|
+
headersChanged,
|
|
19850
|
+
newMetrics,
|
|
19851
|
+
_args3 = arguments;
|
|
19847
19852
|
return _regenerator().w(function (_context3) {
|
|
19848
19853
|
while (1) switch (_context3.n) {
|
|
19849
19854
|
case 0:
|
|
19855
|
+
stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
|
|
19856
|
+
currentHeaders = "";
|
|
19857
|
+
headersChanged = false;
|
|
19858
|
+
if (stats) {
|
|
19859
|
+
_context3.n = 2;
|
|
19860
|
+
break;
|
|
19861
|
+
}
|
|
19850
19862
|
_context3.n = 1;
|
|
19851
19863
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
19852
19864
|
case 1:
|
|
19853
19865
|
stats = _context3.v;
|
|
19866
|
+
case 2:
|
|
19854
19867
|
Object.keys(statCollector.description.types).forEach(function (type) {
|
|
19855
19868
|
var typeDescriptor = statCollector.description.types[type];
|
|
19856
19869
|
var metricsString = "";
|
|
@@ -19863,11 +19876,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19863
19876
|
}
|
|
19864
19877
|
if (stats[type]) {
|
|
19865
19878
|
stats[type].forEach(function (report) {
|
|
19866
|
-
statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
|
|
19879
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
|
|
19867
19880
|
if (contentFilters) {
|
|
19868
19881
|
var filtersMatched = true;
|
|
19869
19882
|
for (var filter in contentFilters) {
|
|
19870
|
-
statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
19883
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
19871
19884
|
var filterMatched = false;
|
|
19872
19885
|
if (report[filter]) {
|
|
19873
19886
|
var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
|
|
@@ -19875,7 +19888,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19875
19888
|
try {
|
|
19876
19889
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
19877
19890
|
var value = _step.value;
|
|
19878
|
-
statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
|
|
19891
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
|
|
19879
19892
|
if (report[filter] === value) {
|
|
19880
19893
|
filterMatched = true;
|
|
19881
19894
|
break;
|
|
@@ -19893,18 +19906,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19893
19906
|
}
|
|
19894
19907
|
}
|
|
19895
19908
|
if (filtersMatched) {
|
|
19896
|
-
statCollector.addHeaders(report, metricsString);
|
|
19909
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
19897
19910
|
}
|
|
19898
19911
|
} else {
|
|
19899
|
-
statCollector.addHeaders(report, metricsString);
|
|
19912
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
19900
19913
|
}
|
|
19901
19914
|
});
|
|
19902
19915
|
} else {
|
|
19903
|
-
statCollector.logger.
|
|
19916
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
|
|
19904
19917
|
}
|
|
19905
19918
|
});
|
|
19906
|
-
|
|
19907
|
-
|
|
19919
|
+
if (currentHeaders !== statCollector.headers) {
|
|
19920
|
+
headersChanged = true;
|
|
19921
|
+
newMetrics = [];
|
|
19922
|
+
currentHeaders.split(",").forEach(function (header) {
|
|
19923
|
+
if (statCollector.headers.indexOf(header) === -1) {
|
|
19924
|
+
newMetrics.push(header);
|
|
19925
|
+
}
|
|
19926
|
+
});
|
|
19927
|
+
if (newMetrics.length) {
|
|
19928
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
|
|
19929
|
+
}
|
|
19930
|
+
statCollector.headers = currentHeaders;
|
|
19931
|
+
}
|
|
19932
|
+
return _context3.a(2, headersChanged);
|
|
19908
19933
|
}
|
|
19909
19934
|
}, _callee3);
|
|
19910
19935
|
}));
|
|
@@ -19913,24 +19938,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19913
19938
|
}
|
|
19914
19939
|
return updateHeaders;
|
|
19915
19940
|
}(),
|
|
19916
|
-
addHeaders: function addHeaders(report, metricsString) {
|
|
19941
|
+
addHeaders: function addHeaders(currentHeaders, report, metricsString) {
|
|
19917
19942
|
if (metricsString) {
|
|
19918
19943
|
var metrics = metricsString.split(",");
|
|
19919
19944
|
metrics.forEach(function (metric) {
|
|
19920
|
-
var metricFound = false;
|
|
19921
19945
|
for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
|
|
19922
19946
|
var key = _Object$keys[_i];
|
|
19923
19947
|
if (metric === key) {
|
|
19924
|
-
|
|
19925
|
-
metricFound = true;
|
|
19948
|
+
currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
|
|
19926
19949
|
break;
|
|
19927
19950
|
}
|
|
19928
19951
|
}
|
|
19929
|
-
if (!metricFound) {
|
|
19930
|
-
statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
|
|
19931
|
-
}
|
|
19932
19952
|
});
|
|
19933
19953
|
}
|
|
19954
|
+
return currentHeaders;
|
|
19934
19955
|
},
|
|
19935
19956
|
updateCompression: function () {
|
|
19936
19957
|
var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
@@ -19983,7 +20004,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19983
20004
|
case 2:
|
|
19984
20005
|
_context5.p = 2;
|
|
19985
20006
|
_t2 = _context5.v;
|
|
19986
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
20007
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
19987
20008
|
statCollector.compression = "none";
|
|
19988
20009
|
case 3:
|
|
19989
20010
|
return _context5.a(2);
|
|
@@ -20004,7 +20025,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20004
20025
|
statCollector.send("webRTCMetricsClientDescription", data);
|
|
20005
20026
|
},
|
|
20006
20027
|
send: function send(message, data) {
|
|
20007
|
-
statCollector.logger.debug(LOG_PREFIX, data);
|
|
20028
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
|
|
20008
20029
|
if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
|
|
20009
20030
|
statCollector.wsConnection.send(JSON.stringify({
|
|
20010
20031
|
message: message,
|
|
@@ -20027,22 +20048,24 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20027
20048
|
},
|
|
20028
20049
|
collectMetrics: function () {
|
|
20029
20050
|
var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
|
|
20030
|
-
var stats, metrics;
|
|
20051
|
+
var stats, metrics, lostMetrics, headersUpdated;
|
|
20031
20052
|
return _regenerator().w(function (_context6) {
|
|
20032
20053
|
while (1) switch (_context6.n) {
|
|
20033
20054
|
case 0:
|
|
20034
|
-
if (!statCollector.timer) {
|
|
20035
|
-
_context6.n =
|
|
20055
|
+
if (!(statCollector.timer && !statCollector.timerBusy)) {
|
|
20056
|
+
_context6.n = 6;
|
|
20036
20057
|
break;
|
|
20037
20058
|
}
|
|
20059
|
+
// Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
|
|
20060
|
+
// So we guard the timer callback with a dumb boolean
|
|
20061
|
+
statCollector.timerBusy = true;
|
|
20038
20062
|
_context6.n = 1;
|
|
20039
20063
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
20040
20064
|
case 1:
|
|
20041
20065
|
stats = _context6.v;
|
|
20042
|
-
|
|
20043
|
-
statCollector.metricsBatch = [];
|
|
20044
|
-
}
|
|
20066
|
+
statCollector.startNewBatch();
|
|
20045
20067
|
metrics = [];
|
|
20068
|
+
lostMetrics = [];
|
|
20046
20069
|
statCollector.headers.split(",").forEach(function (header) {
|
|
20047
20070
|
var components = header.split(".");
|
|
20048
20071
|
var descriptor = {
|
|
@@ -20050,7 +20073,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20050
20073
|
id: components[1],
|
|
20051
20074
|
name: components[2]
|
|
20052
20075
|
};
|
|
20053
|
-
var value =
|
|
20076
|
+
var value = null;
|
|
20054
20077
|
if (stats[descriptor.type]) {
|
|
20055
20078
|
var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
|
|
20056
20079
|
_step2;
|
|
@@ -20068,17 +20091,46 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20068
20091
|
_iterator2.f();
|
|
20069
20092
|
}
|
|
20070
20093
|
}
|
|
20071
|
-
|
|
20094
|
+
if (value === null) {
|
|
20095
|
+
lostMetrics.push(descriptor);
|
|
20096
|
+
} else {
|
|
20097
|
+
metrics.push(value);
|
|
20098
|
+
}
|
|
20072
20099
|
});
|
|
20100
|
+
// Metrics list may change if some metrics are added or some metrics are lost #WCS-4627
|
|
20101
|
+
_context6.n = 2;
|
|
20102
|
+
return statCollector.updateHeaders(stats);
|
|
20103
|
+
case 2:
|
|
20104
|
+
headersUpdated = _context6.v;
|
|
20105
|
+
if (!lostMetrics.length) {
|
|
20106
|
+
_context6.n = 4;
|
|
20107
|
+
break;
|
|
20108
|
+
}
|
|
20109
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
|
|
20110
|
+
// Send metrics already collected and start a new batch with current metrics array to send them later #WCS-4627
|
|
20111
|
+
_context6.n = 3;
|
|
20112
|
+
return statCollector.sendMetrics();
|
|
20113
|
+
case 3:
|
|
20114
|
+
statCollector.startNewBatch(metrics);
|
|
20115
|
+
_context6.n = 5;
|
|
20116
|
+
break;
|
|
20117
|
+
case 4:
|
|
20073
20118
|
statCollector.metricsBatch.push(metrics);
|
|
20074
20119
|
statCollector.batchCount--;
|
|
20075
|
-
if (!(statCollector.batchCount === 0)) {
|
|
20076
|
-
_context6.n =
|
|
20120
|
+
if (!(statCollector.batchCount === 0 || headersUpdated)) {
|
|
20121
|
+
_context6.n = 5;
|
|
20077
20122
|
break;
|
|
20078
20123
|
}
|
|
20079
|
-
_context6.n =
|
|
20124
|
+
_context6.n = 5;
|
|
20080
20125
|
return statCollector.sendMetrics();
|
|
20081
|
-
case
|
|
20126
|
+
case 5:
|
|
20127
|
+
// Check if metrics list changed and send a new headers if needed #WCS-4619
|
|
20128
|
+
if (headersUpdated) {
|
|
20129
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
|
|
20130
|
+
statCollector.sendHeaders();
|
|
20131
|
+
}
|
|
20132
|
+
statCollector.timerBusy = false;
|
|
20133
|
+
case 6:
|
|
20082
20134
|
return _context6.a(2);
|
|
20083
20135
|
}
|
|
20084
20136
|
}, _callee6);
|
|
@@ -20095,7 +20147,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20095
20147
|
while (1) switch (_context7.p = _context7.n) {
|
|
20096
20148
|
case 0:
|
|
20097
20149
|
metricsToSend = [];
|
|
20098
|
-
for (i = 0; i < statCollector.metricsBatch.length; i++) {
|
|
20150
|
+
for (i = 0; statCollector.metricsBatch && i < statCollector.metricsBatch.length; i++) {
|
|
20099
20151
|
metricsString = "";
|
|
20100
20152
|
for (j = 0; j < statCollector.metricsBatch[i].length; j++) {
|
|
20101
20153
|
valueString = valueToString(statCollector.metricsBatch[i][j]);
|
|
@@ -20129,7 +20181,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20129
20181
|
case 3:
|
|
20130
20182
|
_context7.p = 3;
|
|
20131
20183
|
_t3 = _context7.v;
|
|
20132
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
20184
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
20133
20185
|
metricsData = null;
|
|
20134
20186
|
case 4:
|
|
20135
20187
|
_context7.n = 6;
|
|
@@ -20144,8 +20196,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20144
20196
|
};
|
|
20145
20197
|
statCollector.send("webRTCMetricsBatch", data);
|
|
20146
20198
|
}
|
|
20147
|
-
statCollector.
|
|
20148
|
-
statCollector.batchCount = statCollector.description.batchSize;
|
|
20199
|
+
statCollector.cleanBatch();
|
|
20149
20200
|
case 7:
|
|
20150
20201
|
return _context7.a(2);
|
|
20151
20202
|
}
|
|
@@ -20155,7 +20206,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20155
20206
|
return _sendMetrics.apply(this, arguments);
|
|
20156
20207
|
}
|
|
20157
20208
|
return sendMetrics;
|
|
20158
|
-
}()
|
|
20209
|
+
}(),
|
|
20210
|
+
startNewBatch: function startNewBatch(metrics) {
|
|
20211
|
+
if (!statCollector.metricsBatch) {
|
|
20212
|
+
statCollector.metricsBatch = [];
|
|
20213
|
+
if (metrics) {
|
|
20214
|
+
statCollector.metricsBatch.push(metrics);
|
|
20215
|
+
}
|
|
20216
|
+
}
|
|
20217
|
+
},
|
|
20218
|
+
cleanBatch: function cleanBatch() {
|
|
20219
|
+
if (statCollector.metricsBatch) {
|
|
20220
|
+
statCollector.metricsBatch = null;
|
|
20221
|
+
statCollector.batchCount = statCollector.description.batchSize;
|
|
20222
|
+
}
|
|
20223
|
+
}
|
|
20159
20224
|
};
|
|
20160
20225
|
return statCollector;
|
|
20161
20226
|
};
|