dashy/services/status-ping.js

43 lines
1.4 KiB
JavaScript

/**
* Short Node script for pinging an IP address to check if it's online
* Used for the optional status check feature, as an alternative to the GET request
* Accepts a single ip param, will ping that server, then respond with the status
* Credit to @nospaceships for the node-net-ping package, MIT
*/
const ping = require('net-ping');
/* Options used for ping */
const pingOptions = {
networkProtocol: ping.NetworkProtocol.IPv4,
packetSize: 16,
retries: 1,
timeout: 1000,
ttl: 128,
};
/* Kicks of an IP ping, and returns callback with the status */
const makePing = (ip, render) => {
const startTime = new Date();
const session = ping.createSession(pingOptions);
session.pingHost(ip, (error, target) => {
const timeTaken = (new Date() - startTime);
if (error) {
render(JSON.stringify({ success: false, message: `${error}` }));
} else {
render(JSON.stringify({ success: true, message: `${target} is Alive\n⏱️ Took ${timeTaken} ms` }));
}
session.close();
});
};
/* Checks if a given IP address is online, and accessible */
module.exports = (paramStr, render) => {
if (!paramStr || !paramStr.includes('ip=')) {
render(JSON.stringify({ success: false, message: '❌ Malformed or Missing IP' }));
} else {
// Prepare the parameters, which are got from the URL
const ip = decodeURIComponent((new URLSearchParams(paramStr)).get('ip'));
makePing(ip, render);
}
};