Upload missing script from 8.2.0c's commit

This commit is contained in:
2025-07-23 04:18:30 -04:00
parent 2fcde193c2
commit 7eef3b7e82

View File

@@ -0,0 +1,104 @@
const os = require('os');
const fs = require('fs');
const { execSync } = require('child_process');
const mysql = require('mysql2');
// MySQL config
const db = mysql.createPool({
host: 'localhost',
user: '',
password: '',
database: '',
port: 6969
});
// Cache to store last known values
const lastValues = {
memory_used_gib: null,
memory_total_gib: null,
cpu_usage_percent: null,
cpu_frequency_x10: null,
cpu_temperature_c: null
};
function getMemoryInfoGiB() {
const totalGiB = Math.round(os.totalmem() / 1073741824);
const usedGiB = Math.round((os.totalmem() - os.freemem()) / 1073741824);
return { totalGiB, usedGiB };
}
function getCPUFrequencyMultiplied() {
const freqMHz = os.cpus()[0].speed;
const freqGHz = freqMHz / 1000;
return Math.round(freqGHz * 10); // e.g., 3.5 GHz → 35
}
function getCPUTemperatureC() {
try {
const output = execSync('sensors').toString();
const match = output.match(/Tctl:\s+\+?(\d+(\.\d+)?)/) ||
output.match(/Tdie:\s+\+?(\d+(\.\d+)?)/) ||
output.match(/\+(\d+(\.\d+)?)°C/);
if (match) {
return Math.round(parseFloat(match[1]));
}
} catch (_) {
try {
const raw = fs.readFileSync('/sys/class/thermal/thermal_zone0/temp', 'utf8');
return Math.round(parseInt(raw) / 1000);
} catch (_) {
return 0;
}
}
return 0;
}
function getCPUUsage(callback) {
const start = os.cpus();
setTimeout(() => {
const end = os.cpus();
let idleDiff = 0;
let totalDiff = 0;
for (let i = 0; i < start.length; i++) {
const s = start[i].times;
const e = end[i].times;
const idle = e.idle - s.idle;
const total = (e.user - s.user) + (e.nice - s.nice) +
(e.sys - s.sys) + (e.irq - s.irq) + idle;
idleDiff += idle;
totalDiff += total;
}
const usage = Math.round(100 - (idleDiff / totalDiff) * 100);
callback(usage);
}, 1000);
}
function updateIfChanged(table, newValue) {
if (lastValues[table] !== newValue) {
lastValues[table] = newValue;
const query = `UPDATE ${table} SET value = ? WHERE id = 1`;
db.query(query, [newValue], (err) => {
if (err) console.error(`DB error updating ${table}:`, err.message);
});
}
}
function collectAndUpdateStats() {
getCPUUsage((cpuUsage) => {
const { usedGiB, totalGiB } = getMemoryInfoGiB();
const cpuFreq = getCPUFrequencyMultiplied();
const cpuTemp = getCPUTemperatureC();
updateIfChanged('memory_used_gib', usedGiB);
updateIfChanged('memory_total_gib', totalGiB);
updateIfChanged('cpu_usage_percent', cpuUsage);
updateIfChanged('cpu_frequency_x10', cpuFreq);
updateIfChanged('cpu_temperature_c', cpuTemp);
});
}
setInterval(collectAndUpdateStats, 10000); // every 10 seconds