-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathServerStatus.js
89 lines (71 loc) · 2.94 KB
/
ServerStatus.js
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const axios = require('axios');
const config = require("./config.json");
const { MessageEmbed } = require('discord.js');
const nstatus = config.HetrixStatus;
async function parse() {
const toReturn = {};
const statsData = await Promise.all([
axios.get(`https://api.netweak.com/servers`, {
headers: { Authorization: `Bearer ${config.HetrixToken}` }
})
]);
for (let [title, data] of Object.entries(nstatus)) {
const temp = [];
for (let d of data) {
let retries = 3;
while (retries > 0) {
try {
//console.log(statsData[0].data)
if (statsData[0].data) break; // Success!
else throw new Error('Invalid or missing data from Netweaks API');
} catch (error) {
console.error(`Error fetching data for ${d.name} (attempt ${4 - retries}): ${error.message}`);
retries--;
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
// If retries exhausted, add error message to temp
const monitorData = statsData[0].data.filter(item => item.id === d.data);
if (!retries) {
temp.push(`${d.name}: 🔴 **Offline**, Uptime: ${monitorData[0].uptime.month}%`);
continue;
}
const da = monitorData[0];
if (!da) {
console.error(`Monitor data not found for ${d.name}`);
continue; // Skip if monitor data is missing
}
let serverUsage = `CPU: ${da.payload.load_cpu}%, RAM: ${da.payload.load_ram}%, SSD: ${da.payload.load_disk}%, Uptime: ${da.uptime.month}%`;
let statusMessage = "";
if (da.status == "online") {
statusMessage = da.status == "online"
? `🟢 Online, ${serverUsage}`
: `🔴 **Offline**, Uptime: ${da.uptime.month}%`;
} else {
statusMessage = `🔴 **Offline**, Uptime: ${da.uptime.month}%`;
}
temp.push(`${d.name}: ${statusMessage}`); // Assuming statusMessage is constructed correctly
}
toReturn[title] = temp;
}
return toReturn;
}
const getEmbed = async () => {
let status = await parse();
let desc = "*Uptime is based on 30days*\n";
for (let [title, d] of Object.entries(status)) {
if (Array.isArray(d)) {
desc = `${desc}***${title}***\n${d.join("\n")}\n\n`;
}
}
// Check if the description is empty
if (desc.trim() === "") {
desc = "No service status data available at this time.";
}
let embed = new MessageEmbed().setTitle("DBH Live Usage").setDescription(desc).setTimestamp();
return embed;
};
module.exports = {
parse: parse,
getEmbed: getEmbed,
};