From f17463a9ea15a479376597f94f5d920bb8f4cc79 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sun, 17 Apr 2022 15:27:21 +0300 Subject: Added latency test #134 --- src/assets/javascripts/helpers/common.js | 72 ++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 17 deletions(-) (limited to 'src/assets') diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js index 287604d2..4b2d9637 100644 --- a/src/assets/javascripts/helpers/common.js +++ b/src/assets/javascripts/helpers/common.js @@ -19,7 +19,6 @@ let cloudflareList = []; async function initCloudflareList() { return new Promise(resolve => { fetch('/instances/cloudflare.json').then(response => response.text()).then(data => { - console.log(data); cloudflareList = data; resolve(); }) @@ -90,8 +89,6 @@ function protocolHost(url) { return `${url.protocol}//${url.host}`; } - - async function processDefaultCustomInstances( name, protocol, @@ -100,8 +97,10 @@ async function processDefaultCustomInstances( getNameRedirectsChecks, setNameRedirectsChecks, getNameCustomRedirects, - setNameCustomRedirects + setNameCustomRedirects, + instancesLatency, ) { + instancesLatency = instancesLatency ?? []; let nameProtocolElement = document.getElementById(name).getElementsByClassName(protocol)[0]; let nameCustomInstances = []; @@ -123,12 +122,10 @@ async function processDefaultCustomInstances( } nameDefaultRedirects = getNameRedirectsChecks(); - - console.log('cloudflareList', cloudflareList) nameCheckListElement.innerHTML = [ `
Toggle All
`, - ...nameHelper.getRedirects()[name][protocol].map(x => `
${x}${cloudflareList.includes(x) ? ' cloudflare' : ''}
`), + ...nameHelper.getRedirects()[name][protocol].map(x => `
${x}${cloudflareList.includes(x) ? ' cloudflare' : ''} ${x in instancesLatency ? '' + (instancesLatency[x] == 5000 ? '5000ms+' : instancesLatency[x] + 'ms') + '' : ''}
`), ].join('\n
\n'); localise.localisePage(); @@ -161,15 +158,15 @@ async function processDefaultCustomInstances( function calcNameCustomInstances() { nameProtocolElement.getElementsByClassName('custom-checklist')[0].innerHTML = nameCustomInstances.map( - x => `
${x} -
-
` + x => `
${x} +
+
` ).join('\n'); for (const item of nameCustomInstances) { @@ -201,6 +198,46 @@ function isRtl() { return ["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage()) } +async function ping(href) { + return new Promise(resolve => { + let http = new XMLHttpRequest(); + http.open("GET", href + '?_=' + new Date().getTime(), /*async*/true); + http.timeout = 5000; + let started = new Date().getTime(); + http.onreadystatechange = function () { + if (http.readyState == 2) { + if (http.status == 200) { + let ended = new Date().getTime(); + let ms = ended - started; + http.abort(); + resolve(ms); + } + else resolve() + } + }; + http.ontimeout = () => resolve(5000) + http.onerror = () => resolve() + try { + http.send(null); + } catch (exception) { + resolve() + } + }); +} + +async function testLatency(element, instances) { + return new Promise(async resolve => { + let myList = {}; + for (const href of instances) await ping(href).then(m => { + if (m) { + myList[href] = m; + element.innerHTML = `${href}: ${'' + (m == 5000 ? '5000ms+' : m + 'ms') + ''}`; + console.log(`${href}: ${m}ms`) + } + }) + resolve(myList); + }) +} export default { getRandomInstance, updateInstances, @@ -208,4 +245,5 @@ export default { isFirefox, processDefaultCustomInstances, isRtl, -}; + testLatency, +} -- cgit 1.4.1