Creates an endpoint to run ping-only status check

This commit is contained in:
Alicia Sykes
2021-09-17 23:51:02 +01:00
parent a9787a34b5
commit 7272749325
2 changed files with 56 additions and 5 deletions

42
services/status-ping.js Normal file
View File

@@ -0,0 +1,42 @@
/**
* 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);
}
};