@voicenter-team/opensips-js 1.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. package/README.md +75 -0
  2. package/build/enum/call.event.listener.type.d.ts +7 -0
  3. package/build/enum/call.event.listener.type.js +10 -0
  4. package/build/enum/metric.keys.to.include.d.ts +2 -0
  5. package/build/enum/metric.keys.to.include.js +4 -0
  6. package/build/helpers/UA/index.d.ts +6 -0
  7. package/build/helpers/UA/index.js +9 -0
  8. package/build/helpers/audio.helper.d.ts +9 -0
  9. package/build/helpers/audio.helper.js +60 -0
  10. package/build/helpers/filter.helper.d.ts +2 -0
  11. package/build/helpers/filter.helper.js +14 -0
  12. package/build/helpers/time.helper.d.ts +16 -0
  13. package/build/helpers/time.helper.js +28 -0
  14. package/build/helpers/volume.helper.d.ts +2 -0
  15. package/build/helpers/volume.helper.js +76 -0
  16. package/build/helpers/webrtcmetrics/collector.d.ts +32 -0
  17. package/build/helpers/webrtcmetrics/collector.js +282 -0
  18. package/build/helpers/webrtcmetrics/engine.d.ts +20 -0
  19. package/build/helpers/webrtcmetrics/engine.js +164 -0
  20. package/build/helpers/webrtcmetrics/exporter.d.ts +116 -0
  21. package/build/helpers/webrtcmetrics/exporter.js +528 -0
  22. package/build/helpers/webrtcmetrics/extractor.d.ts +1 -0
  23. package/build/helpers/webrtcmetrics/extractor.js +976 -0
  24. package/build/helpers/webrtcmetrics/index.d.ts +63 -0
  25. package/build/helpers/webrtcmetrics/index.js +93 -0
  26. package/build/helpers/webrtcmetrics/metrics.d.ts +2 -0
  27. package/build/helpers/webrtcmetrics/metrics.js +8 -0
  28. package/build/helpers/webrtcmetrics/probe.d.ts +76 -0
  29. package/build/helpers/webrtcmetrics/probe.js +153 -0
  30. package/build/helpers/webrtcmetrics/utils/config.d.ts +12 -0
  31. package/build/helpers/webrtcmetrics/utils/config.js +28 -0
  32. package/build/helpers/webrtcmetrics/utils/helper.d.ts +13 -0
  33. package/build/helpers/webrtcmetrics/utils/helper.js +134 -0
  34. package/build/helpers/webrtcmetrics/utils/log.d.ts +7 -0
  35. package/build/helpers/webrtcmetrics/utils/log.js +71 -0
  36. package/build/helpers/webrtcmetrics/utils/models.d.ts +309 -0
  37. package/build/helpers/webrtcmetrics/utils/models.js +298 -0
  38. package/build/helpers/webrtcmetrics/utils/score.d.ts +4 -0
  39. package/build/helpers/webrtcmetrics/utils/score.js +235 -0
  40. package/build/helpers/webrtcmetrics/utils/shortUUId.d.ts +1 -0
  41. package/build/helpers/webrtcmetrics/utils/shortUUId.js +7 -0
  42. package/build/index.d.ts +170 -0
  43. package/build/index.js +849 -0
  44. package/package.json +61 -0
  45. package/src/types/declarations.d.ts +6 -0
  46. package/src/types/generic.d.ts +1 -0
  47. package/src/types/listeners.d.ts +42 -0
  48. package/src/types/rtc.d.ts +133 -0
  49. package/src/types/webrtcmetrics.d.ts +64 -0
@@ -0,0 +1,528 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const log_1 = require("./utils/log");
4
+ const helper_1 = require("./utils/helper");
5
+ const models_1 = require("./utils/models");
6
+ const moduleName = "exporter ";
7
+ const VERSION_EXPORTER = "2.0";
8
+ const averageRTT = (reports, kind, ssrc) => {
9
+ if (!reports || reports.length === 0) {
10
+ return 0;
11
+ }
12
+ const lastReport = reports[reports.length - 1];
13
+ if (!lastReport) {
14
+ return 0;
15
+ }
16
+ const ssrcData = lastReport[kind][ssrc];
17
+ if (ssrcData) {
18
+ const totalRTT = ssrcData.total_rtt_ms_out;
19
+ const totalMeasurements = ssrcData.total_rtt_measure_out;
20
+ if (!totalMeasurements || !totalRTT) {
21
+ return (0, helper_1.averageValuesOfReports)(reports, kind, "delta_rtt_ms_out", false, ssrc);
22
+ }
23
+ return Number(totalRTT / totalMeasurements);
24
+ }
25
+ return null;
26
+ };
27
+ const averageRTTConnectivity = (reports, kind) => {
28
+ if (!reports || reports.length === 0) {
29
+ return 0;
30
+ }
31
+ const lastReport = reports[reports.length - 1];
32
+ if (!lastReport) {
33
+ return 0;
34
+ }
35
+ const totalRTT = lastReport[kind].total_rtt_connectivity_ms;
36
+ const totalMeasurements = lastReport[kind].total_rtt_connectivity_measure;
37
+ if (!totalMeasurements || !totalRTT) {
38
+ return (0, helper_1.averageValuesOfReports)(reports, kind, "delta_rtt_connectivity_ms");
39
+ }
40
+ return Number(totalRTT / totalMeasurements);
41
+ };
42
+ const getPath = (reports) => {
43
+ const localCandidateType = (0, helper_1.lastOfReports)(reports, "network", "local_candidate_type");
44
+ if (localCandidateType !== "relay") {
45
+ const localCandidateProtocol = (0, helper_1.lastOfReports)(reports, "network", "local_candidate_protocol");
46
+ return `direct/${localCandidateProtocol}`;
47
+ }
48
+ const localCandidateRelayProtocol = (0, helper_1.lastOfReports)(reports, "network", "local_candidate_relay_protocol");
49
+ return `turn/${localCandidateRelayProtocol}`;
50
+ };
51
+ const getRemotePath = (reports) => {
52
+ const localCandidateType = (0, helper_1.lastOfReports)(reports, "network", "remote_candidate_type");
53
+ const localCandidateProtocol = (0, helper_1.lastOfReports)(reports, "network", "remote_candidate_protocol");
54
+ if (localCandidateType !== "relay") {
55
+ return `direct/${localCandidateProtocol}`;
56
+ }
57
+ return `turn/${localCandidateProtocol}`;
58
+ };
59
+ class Exporter {
60
+ constructor(cfg) {
61
+ this._start = null;
62
+ this._end = null;
63
+ this._cfg = cfg;
64
+ this._referenceReport = null;
65
+ this._reports = [];
66
+ this._events = [];
67
+ }
68
+ start() {
69
+ (0, log_1.trace)(moduleName, "start() - start exporter...");
70
+ const date = new Date();
71
+ this._start = date.toJSON();
72
+ return date;
73
+ }
74
+ stop() {
75
+ (0, log_1.trace)(moduleName, "stop() - stop exporter...");
76
+ const date = new Date();
77
+ this._end = date.toJSON();
78
+ return date;
79
+ }
80
+ saveReferenceReport(report) {
81
+ this._referenceReport = report;
82
+ }
83
+ getReferenceReport() {
84
+ return this._referenceReport;
85
+ }
86
+ addReport(report) {
87
+ if (this._cfg.ticket) {
88
+ (0, log_1.debug)(moduleName, `addReport() - add report to exporter at ${report.timestamp}`);
89
+ this._reports.push(report);
90
+ }
91
+ }
92
+ addCustomEvent(event) {
93
+ this._events.push(event);
94
+ }
95
+ reset() {
96
+ (0, log_1.trace)(moduleName, "resetReports() - reset reports");
97
+ this._reports = [];
98
+ this._referenceReport = null;
99
+ this._start = null;
100
+ this._end = null;
101
+ }
102
+ get ticket() {
103
+ (0, log_1.debug)(moduleName, "ticket() - generate ticket");
104
+ const audioPacketsLost = (0, helper_1.lastOfReports)(this._reports, "audio", "total_packets_lost_in");
105
+ const audioPacketsReceived = (0, helper_1.lastOfReports)(this._reports, "audio", "total_packets_in");
106
+ const videoPacketsLost = (0, helper_1.lastOfReports)(this._reports, "video", "total_packets_lost_in");
107
+ const videoPacketsReceived = (0, helper_1.lastOfReports)(this._reports, "video", "total_packets_in");
108
+ const ssrcExporter = {};
109
+ const lastReport = (0, helper_1.getLastReport)(this._reports);
110
+ if (lastReport) {
111
+ Object.keys(lastReport[models_1.VALUE.AUDIO]).forEach((ssrc) => {
112
+ const ssrcAudio = lastReport[models_1.VALUE.AUDIO][ssrc];
113
+ ssrcExporter[ssrcAudio.ssrc] = {
114
+ type: models_1.VALUE.AUDIO,
115
+ direction: ssrcAudio.direction,
116
+ };
117
+ if (ssrcAudio.direction === models_1.DIRECTION.INBOUND) {
118
+ const jitter = {
119
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_in", false, ssrc),
120
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_in", ssrc),
121
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_in", ssrc),
122
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_in", ssrc),
123
+ _unit: {
124
+ avg: "ms",
125
+ min: "ms",
126
+ max: "ms",
127
+ volatility: "percent",
128
+ },
129
+ };
130
+ const bitrate = {
131
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_in", false, ssrc),
132
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_in", ssrc),
133
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_in", ssrc),
134
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_in", ssrc),
135
+ _unit: {
136
+ avg: "kbs",
137
+ min: "kbs",
138
+ max: "kbs",
139
+ volatility: "percent",
140
+ },
141
+ };
142
+ const traffic = {
143
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_in", false, ssrc),
144
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_in", ssrc),
145
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_in", ssrc),
146
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_in", ssrc),
147
+ _unit: {
148
+ avg: "KB",
149
+ min: "KB",
150
+ max: "KB",
151
+ volatility: "percent",
152
+ },
153
+ };
154
+ const mos = {
155
+ emodel: {
156
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_in", false, ssrc),
157
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_in", ssrc),
158
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_in", ssrc),
159
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_in", ssrc),
160
+ },
161
+ effective: {
162
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_in", false, ssrc),
163
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_in", ssrc),
164
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_in", ssrc),
165
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_in", ssrc),
166
+ },
167
+ _unit: {
168
+ avg: "number (1-5)",
169
+ min: "number (1-5)",
170
+ max: "number (1-5)",
171
+ volatility: "percent",
172
+ },
173
+ };
174
+ const packetsLost = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.AUDIO, "total_packets_lost_in", ssrc);
175
+ const packetsReceived = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.AUDIO, "total_packets_in", ssrc);
176
+ const loss = {
177
+ lost: packetsLost,
178
+ avg: Math.round(((packetsLost /
179
+ (packetsLost + packetsReceived)) *
180
+ 100 || 0) * 100) / 100,
181
+ _unit: {
182
+ avg: "percent",
183
+ lost: "number",
184
+ },
185
+ };
186
+ ssrcExporter[ssrc].jitter = jitter;
187
+ ssrcExporter[ssrc].mos = mos;
188
+ ssrcExporter[ssrc].traffic = traffic;
189
+ ssrcExporter[ssrc].bitrate = bitrate;
190
+ ssrcExporter[ssrc].loss = loss;
191
+ }
192
+ else {
193
+ const jitter = {
194
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_out", false, ssrc),
195
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_out", ssrc),
196
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_out", ssrc),
197
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_jitter_ms_out", ssrc),
198
+ _unit: {
199
+ avg: "ms",
200
+ min: "ms",
201
+ max: "ms",
202
+ volatility: "percent",
203
+ },
204
+ };
205
+ const bitrate = {
206
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_out", false, ssrc),
207
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_out", ssrc),
208
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_out", ssrc),
209
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_kbs_out", ssrc),
210
+ _unit: {
211
+ avg: "kbs",
212
+ min: "kbs",
213
+ max: "kbs",
214
+ volatility: "percent",
215
+ },
216
+ };
217
+ const traffic = {
218
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_out", false, ssrc),
219
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_out", ssrc),
220
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_out", ssrc),
221
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_KBytes_out", ssrc),
222
+ _unit: {
223
+ avg: "KB",
224
+ min: "KB",
225
+ max: "KB",
226
+ bitrate: "kbs",
227
+ volatility: "percent",
228
+ },
229
+ };
230
+ const rtt = {
231
+ avg: averageRTT(this._reports, models_1.VALUE.AUDIO, ssrc),
232
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_rtt_ms_out", ssrc),
233
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_rtt_ms_out", ssrc),
234
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "delta_rtt_ms_out", ssrc),
235
+ _unit: {
236
+ avg: "ms",
237
+ min: "ms",
238
+ max: "ms",
239
+ volatility: "percent",
240
+ },
241
+ };
242
+ const packetsLost = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.AUDIO, "total_packets_lost_out", ssrc);
243
+ const packetsReceived = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.AUDIO, "total_packets_out", ssrc);
244
+ const loss = {
245
+ lost: packetsLost,
246
+ avg: Math.round(((packetsLost /
247
+ (packetsLost + packetsReceived)) *
248
+ 100 || 0) * 100) / 100,
249
+ _unit: {
250
+ avg: "percent",
251
+ lost: "number",
252
+ },
253
+ };
254
+ const mos = {
255
+ emodel: {
256
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_out", false, ssrc),
257
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_out", ssrc),
258
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_out", ssrc),
259
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_emodel_out", ssrc),
260
+ },
261
+ effective: {
262
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_out", false, ssrc),
263
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_out", ssrc),
264
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_out", ssrc),
265
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.AUDIO, "mos_out", ssrc),
266
+ },
267
+ _unit: {
268
+ avg: "number (1-5)",
269
+ min: "number (1-5)",
270
+ max: "number (1-5)",
271
+ volatility: "percent",
272
+ },
273
+ };
274
+ ssrcExporter[ssrc].jitter = jitter;
275
+ ssrcExporter[ssrc].rtt = rtt;
276
+ ssrcExporter[ssrc].traffic = traffic;
277
+ ssrcExporter[ssrc].bitrate = bitrate;
278
+ ssrcExporter[ssrc].loss = loss;
279
+ ssrcExporter[ssrc].mos = mos;
280
+ }
281
+ });
282
+ Object.keys(lastReport[models_1.VALUE.VIDEO])
283
+ .forEach((ssrc) => {
284
+ const ssrcVideo = lastReport[models_1.VALUE.VIDEO][ssrc];
285
+ ssrcExporter[ssrc] = {
286
+ type: models_1.VALUE.VIDEO,
287
+ direction: ssrcVideo.direction,
288
+ };
289
+ if (ssrcVideo.direction === models_1.DIRECTION.INBOUND) {
290
+ const jitter = {
291
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_in", false, ssrc),
292
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_in", ssrc),
293
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_in", ssrc),
294
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_in", ssrc),
295
+ _unit: {
296
+ avg: "ms",
297
+ min: "ms",
298
+ max: "ms",
299
+ volatility: "percent",
300
+ },
301
+ };
302
+ const bitrate = {
303
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_in", false, ssrc),
304
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_in", ssrc),
305
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_in", ssrc),
306
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_in", ssrc),
307
+ _unit: {
308
+ avg: "kbs",
309
+ min: "kbs",
310
+ max: "kbs",
311
+ volatility: "percent",
312
+ },
313
+ };
314
+ const traffic = {
315
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_in", false, ssrc),
316
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_in", ssrc),
317
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_in", ssrc),
318
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_in", ssrc),
319
+ _unit: {
320
+ avg: "KB",
321
+ min: "KB",
322
+ max: "KB",
323
+ volatility: "percent",
324
+ },
325
+ };
326
+ const packetsLost = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.VIDEO, "total_packets_lost_in", ssrc);
327
+ const packetsReceived = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.VIDEO, "total_packets_in", ssrc);
328
+ const loss = {
329
+ lost: packetsLost,
330
+ avg: Math.round(((packetsLost /
331
+ (packetsLost + packetsReceived)) *
332
+ 100 || 0) * 100) / 100,
333
+ _unit: {
334
+ avg: "percent",
335
+ lost: "number",
336
+ },
337
+ };
338
+ ssrcExporter[ssrc].jitter = jitter;
339
+ ssrcExporter[ssrc].traffic = traffic;
340
+ ssrcExporter[ssrc].bitrate = bitrate;
341
+ ssrcExporter[ssrc].loss = loss;
342
+ }
343
+ else {
344
+ const jitter = {
345
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_out", false, ssrc),
346
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_out", ssrc),
347
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_out", ssrc),
348
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_jitter_ms_out", ssrc),
349
+ _unit: {
350
+ avg: "ms",
351
+ min: "ms",
352
+ max: "ms",
353
+ volatility: "percent",
354
+ },
355
+ };
356
+ const bitrate = {
357
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_out", false, ssrc),
358
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_out", ssrc),
359
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_out", ssrc),
360
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_kbs_out", ssrc),
361
+ _unit: {
362
+ avg: "kbs",
363
+ min: "kbs",
364
+ max: "kbs",
365
+ volatility: "percent",
366
+ },
367
+ };
368
+ const traffic = {
369
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_out", false, ssrc),
370
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_out", ssrc),
371
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_out", ssrc),
372
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_KBytes_out", ssrc),
373
+ _unit: {
374
+ avg: "KB",
375
+ min: "KB",
376
+ max: "KB",
377
+ volatility: "percent",
378
+ },
379
+ };
380
+ const rtt = {
381
+ avg: averageRTT(this._reports, models_1.VALUE.VIDEO, ssrc),
382
+ min: (0, helper_1.minValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_rtt_ms_out", ssrc),
383
+ max: (0, helper_1.maxValueOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_rtt_ms_out", ssrc),
384
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, models_1.VALUE.VIDEO, "delta_rtt_ms_out", ssrc),
385
+ _unit: {
386
+ avg: "ms",
387
+ min: "ms",
388
+ max: "ms",
389
+ volatility: "percent",
390
+ },
391
+ };
392
+ const packetsLost = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.VIDEO, "total_packets_lost_out", ssrc);
393
+ const packetsReceived = (0, helper_1.lastOfReports)(this._reports, models_1.VALUE.VIDEO, "total_packets_out", ssrc);
394
+ const loss = {
395
+ lost: packetsLost,
396
+ avg: Math.round(((packetsLost /
397
+ (packetsLost + packetsReceived)) *
398
+ 100 || 0) * 100) / 100,
399
+ _unit: {
400
+ avg: "percent",
401
+ lost: "number",
402
+ },
403
+ };
404
+ ssrcExporter[ssrc].jitter = jitter;
405
+ ssrcExporter[ssrc].rtt = rtt;
406
+ ssrcExporter[ssrc].traffic = traffic;
407
+ ssrcExporter[ssrc].bitrate = bitrate;
408
+ ssrcExporter[ssrc].loss = loss;
409
+ }
410
+ });
411
+ }
412
+ return {
413
+ version: VERSION_EXPORTER,
414
+ configuration: {
415
+ frequency: this._cfg.refreshEvery,
416
+ },
417
+ started: this._start,
418
+ ended: this._end,
419
+ ua: {
420
+ agent: navigator.userAgent,
421
+ pname: this._cfg.pname,
422
+ user_id: this._cfg.uid,
423
+ },
424
+ call: {
425
+ call_id: this._cfg.cid,
426
+ events: this._events,
427
+ },
428
+ details: {
429
+ count: this._reports.length,
430
+ reports: this._cfg.record ? this._reports : [],
431
+ reference: this._referenceReport || null,
432
+ },
433
+ ssrc: ssrcExporter,
434
+ data: {
435
+ rtt: {
436
+ avg: averageRTTConnectivity(this._reports, "data"),
437
+ min: (0, helper_1.minValueOfReports)(this._reports, "data", "delta_rtt_connectivity_ms"),
438
+ max: (0, helper_1.maxValueOfReports)(this._reports, "data", "delta_rtt_connectivity_ms"),
439
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, "data", "delta_rtt_connectivity_ms"),
440
+ _unit: {
441
+ avg: "ms",
442
+ min: "ms",
443
+ max: "ms",
444
+ volatility: "percent",
445
+ },
446
+ },
447
+ packetsLost: {
448
+ audio: {
449
+ in: {
450
+ avg: Math.round(((audioPacketsLost /
451
+ (audioPacketsLost + audioPacketsReceived)) *
452
+ 100 || 0) * 100) / 100,
453
+ },
454
+ },
455
+ video: {
456
+ in: {
457
+ avg: Math.round(((videoPacketsLost /
458
+ (videoPacketsLost + videoPacketsReceived)) *
459
+ 100 || 0) * 100) / 100,
460
+ },
461
+ },
462
+ unit: {
463
+ avg: "percent",
464
+ },
465
+ },
466
+ bitrate: {
467
+ in: {
468
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, "data", "delta_kbs_in"),
469
+ min: (0, helper_1.minValueOfReports)(this._reports, "data", "delta_kbs_in"),
470
+ max: (0, helper_1.maxValueOfReports)(this._reports, "data", "delta_kbs_in"),
471
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, "data", "delta_kbs_in"),
472
+ },
473
+ out: {
474
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, "data", "delta_kbs_out"),
475
+ min: (0, helper_1.minValueOfReports)(this._reports, "data", "delta_kbs_out"),
476
+ max: (0, helper_1.maxValueOfReports)(this._reports, "data", "delta_kbs_out"),
477
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, "data", "delta_kbs_out"),
478
+ },
479
+ unit: {
480
+ avg: "kbs",
481
+ min: "kbs",
482
+ max: "kbs",
483
+ volatility: "percent",
484
+ },
485
+ },
486
+ traffic: {
487
+ in: {
488
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, "data", "delta_KBytes_in"),
489
+ min: (0, helper_1.minValueOfReports)(this._reports, "data", "delta_KBytes_in"),
490
+ max: (0, helper_1.maxValueOfReports)(this._reports, "data", "delta_KBytes_in"),
491
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, "data", "delta_KBytes_in"),
492
+ },
493
+ out: {
494
+ avg: (0, helper_1.averageValuesOfReports)(this._reports, "data", "delta_KBytes_out"),
495
+ min: (0, helper_1.minValueOfReports)(this._reports, "data", "delta_KBytes_out"),
496
+ max: (0, helper_1.maxValueOfReports)(this._reports, "data", "delta_KBytes_out"),
497
+ volatility: (0, helper_1.volatilityValuesOfReports)(this._reports, "data", "delta_KBytes_out"),
498
+ },
499
+ unit: {
500
+ avg: "KBytes",
501
+ min: "KBytes",
502
+ max: "KBytes",
503
+ volatility: "percent",
504
+ },
505
+ },
506
+ network: {
507
+ localConnection: getPath(this._reports),
508
+ remoteConnection: getRemotePath(this._reports),
509
+ },
510
+ },
511
+ };
512
+ }
513
+ updateConfig(config) {
514
+ this._cfg = config;
515
+ }
516
+ getLastReport() {
517
+ return this._reports.slice().pop() || null;
518
+ }
519
+ getBeforeLastReport() {
520
+ const duplicated = this._reports.slice();
521
+ duplicated.pop();
522
+ return duplicated.pop() || null;
523
+ }
524
+ getReportsNumber() {
525
+ return this._reports.length;
526
+ }
527
+ }
528
+ exports.default = Exporter;
@@ -0,0 +1 @@
1
+ export function extract(bunch: any, previousBunch: any, pname: any, referenceReport: any): any[];