diff options
Diffstat (limited to 'refresh.js')
-rw-r--r-- | refresh.js | 86 |
1 files changed, 85 insertions, 1 deletions
@@ -1,3 +1,87 @@ -module.exports = async () => { +const dns = require("dns"); +const superagent = require("superagent"); + +function resolveDNSAsync(domain) { + return new Promise((res, rej) => { + if (!/([\--z]+\.)?([\--z]+)\.([A-z]+)/g.test(domain)) return rej("Not a valid domain"); + + const options = { + family: 4, + hints: dns.ADDRCONFIG | dns.V4MAPPED + }; + dns.lookup(domain, options, (err, address, family) => { + if (err) return rej(err); + res(address); + }); + }); +} + +function roundToTwo(num) { + return +(Math.round(num + "e+2") + "e-2"); +} + +module.exports = () => { // Code entered here will be run every 5 minutes + return new Promise(async (res, rej) => { + let servers = { + canterlot: [await resolveDNSAsync("canterlot.equestria.dev"), 52937], + ponyville: [await resolveDNSAsync("ponyville-ipv4.equestria.dev"), 52937], + bridlewood: [await resolveDNSAsync("bridlewood.equestria.dev"), 52937], + zephyrheights: [await resolveDNSAsync("zephyrheights-ipv4.equestria.dev"), 52938], + maretimebay: [await resolveDNSAsync("maretimebay-ipv4.equestria.dev"), 52937] + } + + let stats = {} + + for (let key in Object.keys(servers)) { + key = Object.keys(servers)[key]; + let status = { + online: null, + cpu: null, + memory: null, + os: null, + uptime: null + } + + superagent.get(`http://${servers[key][0]}:${servers[key][1]}/json`) + .timeout({ + response: 5000, + }) + .then(data => data = data.body) + .then(data => { + status.online = true; + status.cpu = data.cpu; + status.cpu.load = Math.floor(data.cpu.load * 100); + status.memory = data.memory; + status.memory.swap.used = roundToTwo(data.memory.swap.used / 1073741824); + status.memory.swap.free = roundToTwo(data.memory.swap.free / 1073741824); + status.memory.swap.total = roundToTwo(data.memory.swap.total / 1073741824); + status.memory.physical.used = roundToTwo(data.memory.physical.used / 1073741824); + status.memory.physical.free = roundToTwo(data.memory.physical.free / 1073741824); + status.memory.physical.total = roundToTwo(data.memory.physical.total / 1073741824); + status.os = data.os; + status.uptime = data.uptime; + }) + .catch(reason => { + if (reason.timeout) { + // We timed out. + status.online = false; + } else { + if(reason.code == "ECONNREFUSED") { + status.online = false; + console.warn(`Server ${key} refused our connection. `) + } else { + console.error(reason); + } + } + }) + .finally(() => { + stats[key] = status; + + if(Object.keys(stats).length == Object.keys(servers).length) { + res(stats); + } + }); + } + }); } |