Upload missing script from 8.2.0c's commit
This commit is contained in:
104
scripting/nodeJS/system_stats.js
Normal file
104
scripting/nodeJS/system_stats.js
Normal 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
|
Reference in New Issue
Block a user