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