mirror of https://github.com/clickscodes/nucleus
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.0 KiB
92 lines
3.0 KiB
import client from "../client.js";
|
|
import * as CP from "child_process";
|
|
import * as process from "process";
|
|
import systeminformation from "systeminformation";
|
|
import config from "../../config/main.js";
|
|
import singleNotify from "../singleNotify.js";
|
|
|
|
const discordPing = () => {
|
|
return client.ws.ping;
|
|
};
|
|
|
|
const databaseReadTime = async () => {
|
|
const guild = await client.guilds.fetch(config.managementGuildID);
|
|
const user = guild.ownerId;
|
|
const currentYear = new Date().getFullYear();
|
|
const start = Date.now();
|
|
await client.database.history.read(guild.id, user, currentYear - 1);
|
|
const end = Date.now();
|
|
return end - start;
|
|
};
|
|
|
|
const resources = async () => {
|
|
return {
|
|
memory: process.memoryUsage().rss / 1024 / 1024,
|
|
cpu: parseFloat(CP.execSync(`ps -p ${process.pid} -o %cpu=`).toString().trim()),
|
|
temperature: (await systeminformation.cpuTemperature()).main
|
|
};
|
|
};
|
|
|
|
const record = async () => {
|
|
if (config.enableDevelopment) return;
|
|
const results = {
|
|
discord: discordPing(),
|
|
databaseRead: await databaseReadTime(),
|
|
resources: await resources()
|
|
};
|
|
let bold: string;
|
|
switch (true) {
|
|
case results.discord > 1000:
|
|
bold = "DiscordPing";
|
|
break;
|
|
case results.databaseRead > 500:
|
|
bold = "DatabaseRead";
|
|
break;
|
|
case results.resources.cpu > 100:
|
|
bold = "CPUUsage";
|
|
break;
|
|
case results.resources.memory > 5000:
|
|
bold = "MemoryUsage";
|
|
break;
|
|
case results.resources.temperature > 80:
|
|
bold = "Temperature";
|
|
break;
|
|
default:
|
|
bold = "None";
|
|
}
|
|
if (
|
|
results.discord > 1000 ||
|
|
results.databaseRead > 500 ||
|
|
results.resources.cpu > 100 ||
|
|
results.resources.memory > 5000 ||
|
|
results.resources.temperature > 80
|
|
) {
|
|
await singleNotify(
|
|
"performanceTest",
|
|
config.developmentGuildID,
|
|
`${bold === "DiscordPing" ? "**Discord ping time:**" : "Discord ping time:"} \`${results.discord}ms\`\n` +
|
|
`${bold === "DatabaseRead" ? "**Database read time:**" : "Database read time:"} \`${
|
|
results.databaseRead
|
|
}ms\`\n` +
|
|
`${bold === "CPUUsage" ? "**CPU usage:**" : "CPU usage:"} \`${results.resources.cpu}%\`\n` +
|
|
`${bold === "MemoryUsage" ? "**Memory usage:**" : "Memory usage:"} \`${Math.round(
|
|
results.resources.memory
|
|
)}MB\`\n` +
|
|
`${bold === "Temperature" ? "**CPU temperature:**" : "CPU temperature:"} \`${
|
|
results.resources.temperature
|
|
}°C\``,
|
|
"Critical",
|
|
config.owners
|
|
);
|
|
} else {
|
|
await singleNotify("performanceTest", config.developmentGuildID, true);
|
|
}
|
|
|
|
await client.database.performanceTest.record(results);
|
|
setTimeout(() => {
|
|
void record();
|
|
}, 60 * 1000);
|
|
};
|
|
|
|
export { record };
|