aulaaprende
Version:
Aula @prende 2.0
83 lines (80 loc) • 2.67 kB
JavaScript
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
var resultados = [];
var servidores = [];
var maxtest = 2;
exports.speedtest = function(datos, callback) {
if('maxtest' in datos && !isNaN(datos['maxtest'])) {
maxtest=datos['maxtest'];
}
var request = require('request');
request('https://fast.com/', function (error, response, body) {
if(error == null && response && response.statusCode==200) {
const dom = new JSDOM(body);
jsfile = dom.window.document.querySelector("script").src;
request('https://fast.com'+jsfile, function (error, response, body) {
if(error == null && response && response.statusCode==200) {
tokenpos = body.search('token:');
tokenstring = body.substr(tokenpos+7);
tokenpos = tokenstring.search('"');
tokenstring = tokenstring.substr(0,tokenpos);
baseurl = 'http://api.fast.com/'+ 'netflix/speedtest?https=true&token=' + tokenstring + '&urlCount=3';
request(baseurl, function (error, response, body) {
if(error == null && response && response.statusCode==200) {
var datos = JSON.parse(body);
datos.forEach(function(value, key) {
servidores.push(value['url']);
});
getData(0,1, callback);
} else {
console.info("Connection error GS");
}
});
} else {
console.info("Connection error JS");
}
});
} else {
console.info("Connection error WP");
callback({error:1});
}
});
}
function getData(server, id, callback) {
var request = require('request');
var start = new Date().getTime();
request(servidores[server], {timeout: 1500}, function (error, response, body) {
if(error == null && response && response.statusCode==200) {
var tiempo = (new Date().getTime() - start)/1000;
var transferido = (Buffer.byteLength(body)*8)/1024/1024;
var mbps = transferido / tiempo;
// console.info("transferidos "+transferido);
// console.info("tiempo transferencia "+tiempo)
// console.info(mbps + " Mbps");
resultados.push({servidor: servidores[server], id:id, size: transferido, time: tiempo, speed:mbps})
if(id<maxtest)
getData(server, (id+1), callback);
else if(server<2)
getData((server+1),1, callback);
else {
max = 0;
min=10000000;
avg = 0;
navg = 0;
resultados.forEach(function(value,key) {
avg = avg+value['speed'];
navg++;
if(value['speed']>max)
max = value['speed'];
if(value['speed']<min)
min = value['speed'];
});
avg = avg/navg;
callback({speeds:{max:max, min:min, avg:avg}, data:resultados});
}
} else {
console.info("Connection error GS ("+server+","+id+")");
callback({error:1});
}
});
}