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.
Nucleus/src/utils/performanceTesting/record.ts

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 };