-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
executable file
·70 lines (60 loc) · 2.65 KB
/
index.js
File metadata and controls
executable file
·70 lines (60 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env node
const minimist = require('minimist');
const puppeteer = require('puppeteer');
const args = minimist(process.argv.slice(2));
if (args.help || args.h) {
console.log('Usage: fast-cli [options]');
console.log('Options:');
console.log('-u, --upload Show download and upload speed');
console.log('-h, --headless Turns on headless mode')
console.log('-t, --time <seconds> Duration of speed test in seconds');
console.log('-h, --help Display help information');
} else {
let time = args.time || args.t || 10;
const showUpload = args.upload || args.u || false;
const headless = args.headless || args.h || true;
let hMode = false;
if (headless) {
hMode = true;
}
if (showUpload) {
time = 20
}
(async () => {
const browser = await puppeteer.launch({
executablePath: '/Users/adityamitra/Documents/chrome-mac/Chromium.app/Contents/MacOS/Chromium',
headless: hMode,
});
const page = await browser.newPage();
await page.goto('https://fast.com');
let elapsedTime = 0;
let downloadSpeed = 0;
let speedType = 'Mbps';
let uploadSpeed = 0;
let loadingSign = '|';
while (elapsedTime < time) {
const downloadElement = await page.$('#speed-value');
const speedTypeElement = await page.$('#speed-units');
downloadSpeed = await page.evaluate(downloadElement => downloadElement.textContent, downloadElement);
speedType = await page.evaluate(speedTypeElement => speedTypeElement.textContent, speedTypeElement);
if (showUpload) {
const uploadElement = await page.$('#upload-value');
uploadSpeed = await page.evaluate(uploadElement => uploadElement.textContent, uploadElement);
process.stdout.write(`\r ${downloadSpeed.trim()} ${speedType.trim()} ↓ | ${uploadSpeed.trim()} ${speedType.trim()} ↑ ${loadingSign}`);
} else {
process.stdout.write(`\r ${downloadSpeed.trim()} ${speedType.trim()} ↓ ${loadingSign}`);
}
loadingSign = loadingSign === '|' ? '/' : loadingSign === '/' ? '-' : loadingSign === '-' ? '\\' : '|';
await page.waitForTimeout(500);
elapsedTime += 0.5;
}
process.stdout.write('\r');
process.stdout.clearLine(1);
console.log(`Download speed: ${downloadSpeed.trim()} Mbps`);
if (showUpload) {
console.log(`Upload speed: ${uploadSpeed.trim()} Mbps`);
}
console.log('Speed test complete!');
await browser.close();
})();
}