UNPKG

aulaaprende

Version:
83 lines (80 loc) 2.67 kB
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}); } }); }