commit 75f12b6daf1bebc8995dbb0d2a8f5cbb20f23f25 Author: Pandawa24Jam Digital Printing Date: Thu Jan 2 16:13:38 2025 +0700 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..99d0385 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +.env +test/ +package-lock.json \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ca8c85 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +NodeJs - 22.12.0 \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..2b05395 --- /dev/null +++ b/index.js @@ -0,0 +1,100 @@ +const speedTest = require('speedtest-net'); +const axios = require('axios'); + +async function runSpeedTest(serverId) { + const options = { + serverId, + acceptLicense: true, + acceptGdpr: true, + }; + + try { + console.log(`Testing speed with server ID: ${serverId}, please wait...`); + const result = await speedTest(options); + + // Format hasil + const output = { + timestamp: new Date().toISOString(), + ping: { + jitter: result.ping.jitter, + latency: result.ping.latency, + }, + download: { + bandwidth: result.download.bandwidth, + bytes: result.download.bytes, + elapsed: result.download.elapsed, + }, + upload: { + bandwidth: result.upload.bandwidth, + bytes: result.upload.bytes, + elapsed: result.upload.elapsed, + }, + packetLoss: result.packetLoss, + isp: result.isp, + interface: { + internalIp: result.interface.internalIp, + name: result.interface.name, + macAddr: result.interface.macAddr, + isVpn: result.interface.isVpn, + externalIp: result.interface.externalIp, + }, + server: { + id: result.server.id, + name: result.server.name, + location: result.server.location, + country: result.server.country, + host: result.server.host, + port: result.server.port, + ip: result.server.ip, + }, + result: { + id: result.result.id, + url: result.result.url, + }, + }; + + console.log('Test complete. Result:'); + console.log(JSON.stringify(output, null, 2)); + return output; + } catch (error) { + console.error(`Error running speed test with server ID: ${serverId}:`, error.message); + throw error; + } +} + +async function sendResultToServer(result) { + const url = 'https://raspberry.pandawa24jam.com/wbhkraspberry'; + const headers = { + 'Content-Type': 'application/json', + 'author': 'vedeom', + }; + + try { + console.log('Sending result to server...'); + const response = await axios.post(url, result, { headers }); + console.log('Result successfully sent. Server response:'); + console.log(response.data); + } catch (error) { + console.error('Failed to send result to server:', error.message); + } +} + +(async () => { + try { + // Coba server pertama + const primaryServerId = 39296; // Gunadarma University + const result = await runSpeedTest(primaryServerId); + await sendResultToServer(result); + } catch (primaryError) { + console.warn('Primary server failed. Attempting backup server...'); + + // Jika server pertama gagal, coba server kedua + const backupServerId = 13039; // Server kedua + try { + const result = await runSpeedTest(backupServerId); + await sendResultToServer(result); + } catch (backupError) { + console.error('Backup server also failed. Please check your internet connection or server configurations.'); + } + } +})(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..e4c1a67 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "speedtest-client", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "axios": "^1.7.9" + } +}