mirror of
https://github.com/gnmyt/myspeed.git
synced 2026-01-26 23:20:05 -06:00
Implemented the new provider system into the speedtest.js task
This commit is contained in:
@@ -2,14 +2,12 @@ const speedTest = require('../util/speedtest');
|
||||
const tests = require('../controller/speedtests');
|
||||
const config = require('../controller/config');
|
||||
const controller = require("../controller/recommendations");
|
||||
const parseData = require('../util/providers/parseData');
|
||||
let {setState, sendRunning, sendError, sendFinished} = require("./integrations");
|
||||
const serverController = require("../controller/servers");
|
||||
|
||||
let isRunning = false;
|
||||
|
||||
const roundSpeed = (bytes, elapsed) => {
|
||||
return Math.round((bytes * 8 / elapsed) / 10) / 100;
|
||||
}
|
||||
|
||||
const setRunning = (running, sendRequest = true) => {
|
||||
isRunning = running;
|
||||
|
||||
@@ -35,25 +33,69 @@ const createRecommendations = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.executeCloudflare = async () => {
|
||||
try {
|
||||
const {default: SpeedTest} = await import('@cloudflare/speedtest');
|
||||
|
||||
// This needs to be disabled because of a library issue
|
||||
// See https://github.com/cloudflare/speedtest/issues/17
|
||||
console.warn = () => {};
|
||||
|
||||
const startTime = new Date().getTime();
|
||||
return await new Promise(resolve => {
|
||||
const speedTest = new SpeedTest();
|
||||
speedTest.onFinish = results => {
|
||||
resolve({...results.getSummary(), elapsed: new Date().getTime() - startTime});
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error loading SpeedTest module:', error);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.run = async (retryAuto = false) => {
|
||||
setRunning(true);
|
||||
let serverId = await config.getValue("serverId");
|
||||
let mode = await config.getValue("provider");
|
||||
|
||||
if (mode === "none") {
|
||||
setRunning(false);
|
||||
throw {message: "No provider selected"};
|
||||
}
|
||||
|
||||
let serverId = mode === "cloudflare" ? 0 : await config.getValue(mode + "Id");
|
||||
|
||||
if (serverId === "none")
|
||||
serverId = undefined;
|
||||
|
||||
let speedtest = await (retryAuto ? speedTest() : speedTest(serverId));
|
||||
let speedtest;
|
||||
if (mode === "cloudflare") {
|
||||
speedtest = await this.executeCloudflare();
|
||||
} else {
|
||||
speedtest = await (retryAuto ? speedTest(mode) : speedTest(mode, serverId));
|
||||
}
|
||||
|
||||
if (serverId === undefined)
|
||||
await config.updateValue("serverId", speedtest.server.id);
|
||||
if (serverId === undefined && mode === "ookla") {
|
||||
serverId = speedtest.server.id;
|
||||
await config.updateValue("ooklaId", speedtest.server.id);
|
||||
}
|
||||
|
||||
if (serverId === undefined && mode === "libre") {
|
||||
let server = Object.entries(serverController.getLibreServers())
|
||||
.filter(([key, value]) => value === speedtest.server.name)[0][0];
|
||||
|
||||
serverId = parseInt(server);
|
||||
|
||||
if (server) await config.updateValue("libreId", server);
|
||||
}
|
||||
|
||||
if (Object.keys(speedtest).length === 0) throw {message: "No response, even after trying again, test timed out."};
|
||||
|
||||
return speedtest;
|
||||
return {...speedtest, serverId}
|
||||
}
|
||||
|
||||
module.exports.create = async (type = "auto", retried = false) => {
|
||||
if (await config.getValue("acceptOoklaLicense") === 'false') return;
|
||||
const mode = await config.getValue("provider");
|
||||
if (mode === "none") return 400;
|
||||
if (isRunning && !retried) return 500;
|
||||
|
||||
try {
|
||||
@@ -69,18 +111,16 @@ module.exports.create = async (type = "auto", retried = false) => {
|
||||
test = await this.run(retried);
|
||||
}
|
||||
|
||||
let ping = Math.round(test.ping.latency);
|
||||
let download = roundSpeed(test.download.bytes, test.download.elapsed);
|
||||
let upload = roundSpeed(test.upload.bytes, test.upload.elapsed);
|
||||
let time = Math.round((test.download.elapsed + test.upload.elapsed) / 1000);
|
||||
let testResult = await tests.create(ping, download, upload, time, type);
|
||||
let {ping, download, upload, time} = await parseData.parseData(mode, test);
|
||||
|
||||
let testResult = await tests.create(ping, download, upload, time, test.serverId, type);
|
||||
console.log(`Test #${testResult} was executed successfully in ${time}s. 🏓 ${ping} ⬇ ${download}️ ⬆ ${upload}️`);
|
||||
createRecommendations().then(() => "");
|
||||
setRunning(false);
|
||||
sendFinished({ping, download, upload, time}).then(() => "");
|
||||
} catch (e) {
|
||||
if (!retried) return this.create(type, true);
|
||||
let testResult = await tests.create(-1, -1, -1, null, type, e.message);
|
||||
let testResult = await tests.create(-1, -1, -1, null, 0, type, e.message);
|
||||
await sendError(e.message);
|
||||
setRunning(false, false);
|
||||
console.log(`Test #${testResult} was not executed successfully. Please try reconnecting to the internet or restarting the software: ` + e.message);
|
||||
|
||||
Reference in New Issue
Block a user