@flashphoner/websdk 2.0.262 → 2.0.263

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.
@@ -11047,6 +11047,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11047
11047
  metricsBatch: null,
11048
11048
  timer: null,
11049
11049
  batchCount: 0,
11050
+ timerBusy: false,
11050
11051
  start: function () {
11051
11052
  var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
11052
11053
  var error;
@@ -11129,7 +11130,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11129
11130
  _context2.n = 1;
11130
11131
  break;
11131
11132
  }
11132
- statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
11133
+ statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
11133
11134
  return _context2.a(2);
11134
11135
  case 1:
11135
11136
  if (!(description.types || description.compression)) {
@@ -11189,14 +11190,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11189
11190
  }(),
11190
11191
  updateHeaders: function () {
11191
11192
  var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
11192
- var stats;
11193
+ var stats,
11194
+ currentHeaders,
11195
+ headersChanged,
11196
+ newMetrics,
11197
+ _args3 = arguments;
11193
11198
  return _regenerator().w(function (_context3) {
11194
11199
  while (1) switch (_context3.n) {
11195
11200
  case 0:
11201
+ stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
11202
+ currentHeaders = "";
11203
+ headersChanged = false;
11204
+ if (stats) {
11205
+ _context3.n = 2;
11206
+ break;
11207
+ }
11196
11208
  _context3.n = 1;
11197
11209
  return statCollector.mediaConnection.getWebRTCStats();
11198
11210
  case 1:
11199
11211
  stats = _context3.v;
11212
+ case 2:
11200
11213
  Object.keys(statCollector.description.types).forEach(function (type) {
11201
11214
  var typeDescriptor = statCollector.description.types[type];
11202
11215
  var metricsString = "";
@@ -11209,11 +11222,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11209
11222
  }
11210
11223
  if (stats[type]) {
11211
11224
  stats[type].forEach(function (report) {
11212
- statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
11225
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
11213
11226
  if (contentFilters) {
11214
11227
  var filtersMatched = true;
11215
11228
  for (var filter in contentFilters) {
11216
- statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
11229
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
11217
11230
  var filterMatched = false;
11218
11231
  if (report[filter]) {
11219
11232
  var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
@@ -11221,7 +11234,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11221
11234
  try {
11222
11235
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
11223
11236
  var value = _step.value;
11224
- statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
11237
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
11225
11238
  if (report[filter] === value) {
11226
11239
  filterMatched = true;
11227
11240
  break;
@@ -11239,18 +11252,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11239
11252
  }
11240
11253
  }
11241
11254
  if (filtersMatched) {
11242
- statCollector.addHeaders(report, metricsString);
11255
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
11243
11256
  }
11244
11257
  } else {
11245
- statCollector.addHeaders(report, metricsString);
11258
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
11246
11259
  }
11247
11260
  });
11248
11261
  } else {
11249
- statCollector.logger.warn(LOG_PREFIX, "No report type found in RTC stats: '" + type + "'");
11262
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
11250
11263
  }
11251
11264
  });
11252
- case 2:
11253
- return _context3.a(2);
11265
+ if (currentHeaders !== statCollector.headers) {
11266
+ headersChanged = true;
11267
+ newMetrics = [];
11268
+ currentHeaders.split(",").forEach(function (header) {
11269
+ if (statCollector.headers.indexOf(header) === -1) {
11270
+ newMetrics.push(header);
11271
+ }
11272
+ });
11273
+ if (newMetrics.length) {
11274
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
11275
+ }
11276
+ statCollector.headers = currentHeaders;
11277
+ }
11278
+ return _context3.a(2, headersChanged);
11254
11279
  }
11255
11280
  }, _callee3);
11256
11281
  }));
@@ -11259,24 +11284,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11259
11284
  }
11260
11285
  return updateHeaders;
11261
11286
  }(),
11262
- addHeaders: function addHeaders(report, metricsString) {
11287
+ addHeaders: function addHeaders(currentHeaders, report, metricsString) {
11263
11288
  if (metricsString) {
11264
11289
  var metrics = metricsString.split(",");
11265
11290
  metrics.forEach(function (metric) {
11266
- var metricFound = false;
11267
11291
  for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
11268
11292
  var key = _Object$keys[_i];
11269
11293
  if (metric === key) {
11270
- statCollector.headers = util.addFieldToCsvString(statCollector.headers, report.type + "." + report.id + "." + metric, ",");
11271
- metricFound = true;
11294
+ currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
11272
11295
  break;
11273
11296
  }
11274
11297
  }
11275
- if (!metricFound) {
11276
- statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
11277
- }
11278
11298
  });
11279
11299
  }
11300
+ return currentHeaders;
11280
11301
  },
11281
11302
  updateCompression: function () {
11282
11303
  var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
@@ -11329,7 +11350,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11329
11350
  case 2:
11330
11351
  _context5.p = 2;
11331
11352
  _t2 = _context5.v;
11332
- statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
11353
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
11333
11354
  statCollector.compression = "none";
11334
11355
  case 3:
11335
11356
  return _context5.a(2);
@@ -11350,7 +11371,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11350
11371
  statCollector.send("webRTCMetricsClientDescription", data);
11351
11372
  },
11352
11373
  send: function send(message, data) {
11353
- statCollector.logger.debug(LOG_PREFIX, data);
11374
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
11354
11375
  if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
11355
11376
  statCollector.wsConnection.send(JSON.stringify({
11356
11377
  message: message,
@@ -11373,14 +11394,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11373
11394
  },
11374
11395
  collectMetrics: function () {
11375
11396
  var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
11376
- var stats, metrics;
11397
+ var stats, metrics, lostMetrics;
11377
11398
  return _regenerator().w(function (_context6) {
11378
11399
  while (1) switch (_context6.n) {
11379
11400
  case 0:
11380
- if (!statCollector.timer) {
11381
- _context6.n = 2;
11401
+ if (!(statCollector.timer && !statCollector.timerBusy)) {
11402
+ _context6.n = 6;
11382
11403
  break;
11383
11404
  }
11405
+ // Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
11406
+ // So we guard the timer callback with a dumb boolean
11407
+ statCollector.timerBusy = true;
11384
11408
  _context6.n = 1;
11385
11409
  return statCollector.mediaConnection.getWebRTCStats();
11386
11410
  case 1:
@@ -11389,6 +11413,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11389
11413
  statCollector.metricsBatch = [];
11390
11414
  }
11391
11415
  metrics = [];
11416
+ lostMetrics = [];
11392
11417
  statCollector.headers.split(",").forEach(function (header) {
11393
11418
  var components = header.split(".");
11394
11419
  var descriptor = {
@@ -11396,7 +11421,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11396
11421
  id: components[1],
11397
11422
  name: components[2]
11398
11423
  };
11399
- var value = "undefined";
11424
+ var value = "NO";
11400
11425
  if (stats[descriptor.type]) {
11401
11426
  var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
11402
11427
  _step2;
@@ -11415,7 +11440,13 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11415
11440
  }
11416
11441
  }
11417
11442
  metrics.push(value);
11443
+ if (value == "NO") {
11444
+ lostMetrics.push(descriptor);
11445
+ }
11418
11446
  });
11447
+ if (lostMetrics.length) {
11448
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
11449
+ }
11419
11450
  statCollector.metricsBatch.push(metrics);
11420
11451
  statCollector.batchCount--;
11421
11452
  if (!(statCollector.batchCount === 0)) {
@@ -11425,6 +11456,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11425
11456
  _context6.n = 2;
11426
11457
  return statCollector.sendMetrics();
11427
11458
  case 2:
11459
+ _context6.n = 3;
11460
+ return statCollector.updateHeaders(stats);
11461
+ case 3:
11462
+ if (!_context6.v) {
11463
+ _context6.n = 5;
11464
+ break;
11465
+ }
11466
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
11467
+ _context6.n = 4;
11468
+ return statCollector.sendMetrics();
11469
+ case 4:
11470
+ statCollector.sendHeaders();
11471
+ case 5:
11472
+ statCollector.timerBusy = false;
11473
+ case 6:
11428
11474
  return _context6.a(2);
11429
11475
  }
11430
11476
  }, _callee6);
@@ -11475,7 +11521,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11475
11521
  case 3:
11476
11522
  _context7.p = 3;
11477
11523
  _t3 = _context7.v;
11478
- statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
11524
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
11479
11525
  metricsData = null;
11480
11526
  case 4:
11481
11527
  _context7.n = 6;