diff --git a/server/util/speedtest.js b/server/util/speedtest.js new file mode 100644 index 00000000..070d24cf --- /dev/null +++ b/server/util/speedtest.js @@ -0,0 +1,29 @@ +const {spawn} = require('child_process'); + +module.exports = async (serverId, binary_path = './bin/speedtest') => { + const args = ['--accept-license', '--accept-gdpr', '--format=jsonl']; + if (serverId) args.push(`--server-id=${serverId}`); + + const process = spawn(binary_path, args, {windowsHide: true}); + process.stdout.on('data', onLine); + + let result = {}; + + await new Promise((resolve, reject) => { + process.on('error', e => reject({message: e})); + process.on('exit', resolve); + }); + + if (result.error) throw new Error(result.error); + return result; + + function onLine(buffer) { + const line = buffer.toString().replace("\n", ""); + if (!line.startsWith("{")) return; + + let data = JSON.parse(line); + if (data.error) result.error = data.error; + + if (data.type === "result") result = data; + } +} \ No newline at end of file