rtc-stats-adapter
Advanced tools
Comparing version 1.0.0 to 1.1.0
32
index.js
@@ -0,31 +1,21 @@ | ||
const { iterateReports } = require("./utils"); | ||
const { parsers } = require("./parsers/new-api"); | ||
const calculateMos = require("./calculate-mos"); | ||
function parse(stats) { | ||
function parse(reports) { | ||
const result = {}; | ||
if (typeof stats[Symbol.iterator] === "function") { | ||
for (const el of stats) { | ||
const report = Array.isArray(el) ? el[1] : el; | ||
if (report.type in parsers) { | ||
const mappedReport = parsers[report.type](report); | ||
Object.assign(result, mappedReport); | ||
} | ||
iterateReports(reports, (report) => { | ||
if (report.type in parsers) { | ||
const mappedReport = parsers[report.type](report); | ||
Object.assign(result, mappedReport); | ||
} | ||
} else { | ||
for (const key in stats) { | ||
if (stats.hasOwnProperty(key)) { | ||
const report = stats[key]; | ||
}); | ||
if (report.type in parsers) { | ||
const mappedReport = parsers[report.type](report); | ||
result.networkMos = calculateMos(reports); | ||
Object.assign(result, mappedReport); | ||
} | ||
} | ||
} | ||
} | ||
return result; | ||
} | ||
module.exports = parse; | ||
module.exports = parse; |
{ | ||
"name": "rtc-stats-adapter", | ||
"description": "RTC Stats adapter", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"repository": "https://github.com/nexmoinc/rtc-stats-adapter", | ||
@@ -6,0 +6,0 @@ "keywords": [ |
@@ -15,2 +15,3 @@ /** | ||
bytesReceived: "audioRecvBytes", | ||
jitter: "audioRecvJitter" | ||
}, | ||
@@ -20,2 +21,3 @@ "remote-inbound-rtp": { | ||
roundTripTime: "audioRtt", | ||
jitter: "audioSentJitter" | ||
}, | ||
@@ -22,0 +24,0 @@ }; |
@@ -1,50 +0,32 @@ | ||
const Joi = require('joi'); | ||
const Joi = require("joi"); | ||
const metadataSchema = Joi.object({ | ||
legId: Joi.string().required() | ||
}) | ||
legId: Joi.string().required(), | ||
}); | ||
// Core set of RTC Stats that is implemented well X-Browser | ||
const statsSchema = Joi.object({ | ||
audioRecvBytes: Joi.number() | ||
.integer() | ||
.positive() | ||
.required(), | ||
audioRecvBytes: Joi.number().integer().positive().allow(0).required(), | ||
audioRecvPackets: Joi.number().integer().positive().allow(0).required(), | ||
audioRecvPacketsLost: Joi.number().integer().positive().allow(0).required(), | ||
audioRtt: Joi.number().positive().allow(0).required(), | ||
audioSentBytes: Joi.number().integer().positive().allow(0).required(), | ||
audioSentPackets: Joi.number().integer().positive().allow(0).required(), | ||
audioSentPacketsLost: Joi.number() | ||
.integer() | ||
.positive() | ||
.allow(0) | ||
.allow(null) | ||
.required(), | ||
audioSentJitter: Joi.number().positive().allow(0, null).required(), | ||
audioRecvJitter: Joi.number().positive().allow(0, null).required(), | ||
networkMos: Joi.number().positive().allow(0).required(), | ||
}); | ||
audioRecvPackets: Joi.number() | ||
.integer() | ||
.positive() | ||
.required(), | ||
audioRecvPacketsLost: Joi.number() | ||
.integer() | ||
.positive() | ||
.required(), | ||
audioRtt: Joi.number() | ||
.positive() | ||
.required(), | ||
audioSentBytes: Joi.number() | ||
.integer() | ||
.positive() | ||
.required(), | ||
audioSentPackets: Joi.number() | ||
.integer() | ||
.positive() | ||
.required(), | ||
audioSentPacketsLost: Joi.number() | ||
.integer() | ||
.positive() | ||
.required(), | ||
}) | ||
// The schema when we send data for ingestion | ||
const eventSchema = metadataSchema.concat(statsSchema) | ||
const eventSchema = metadataSchema.concat(statsSchema); | ||
module.exports = { | ||
rtcStats: statsSchema, | ||
event: eventSchema | ||
} | ||
rtcStats: statsSchema, | ||
event: eventSchema, | ||
}; |
17041
9
155