mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-07-14 19:18:00 +00:00
Additionally to #3839 did some rework on the system logging. - feat: include MagicMirror version (like Sam suggested in #3839) - refactor: use more variables to get the string array less complex - refactor: get `installedNodeVersion` from si.versions (with that it was possible to drop the import of `execSync`) - fix: `used node` was always the same as the installed one. Since Electron comes with its own node version, this can differ. This is now shown correctly (again?) with the use of `process.version`. - a bit formatting I think these changes make the code easier to understand and therefore easier to maintain. Except for showing the MM version there is no big difference for the user. ## before ```bash ##### System Information ##### - SYSTEM: manufacturer: Notebook; model: N650DU; virtual: false; timeZone: Europe/Berlin - OS: platform: linux; distro: Debian GNU/Linux; release: 12; arch: x64; kernel: 5.10.0-20-amd64 - VERSIONS: electron: 36.3.2; used node: 22.15.0; installed node: 22.15.0; npm: 10.9.0; pm2: 6.0.6 - ENV: XDG_SESSION_TYPE: wayland; MM_CONFIG_FILE: config/config_MMM-PublicTransportHafas.js; WAYLAND_DISPLAY: wayland-0; DISPLAY: :0; ELECTRON_ENABLE_GPU: undefined - RAM: total: 15925.45 MB; free: 2716.90 MB; used: 13209.04 MB - UPTIME: 259 minutes ``` ## after ```bash #### System Information #### - SYSTEM: manufacturer: Notebook; model: N650DU; virtual: false; MM: 2.33.0-develop - OS: platform: linux; distro: Debian GNU/Linux; release: 12; arch: x64; kernel: 5.10.0-20-amd64 - VERSIONS: electron: 36.3.2; used node: 22.15.1; installed node: 22.15.0; npm: 10.9.0; pm2: 6.0.6 - ENV: XDG_SESSION_TYPE: wayland; MM_CONFIG_FILE: config/config_MMM-PublicTransportHafas.js WAYLAND_DISPLAY: wayland-0; DISPLAY: :0; ELECTRON_ENABLE_GPU: undefined - RAM: total: 15925.45 MB; free: 2814.49 MB; used: 13110.96 MB - OTHERS: uptime: 260 minutes; timeZone: Europe/Berlin ```
86 lines
3.3 KiB
JavaScript
86 lines
3.3 KiB
JavaScript
const path = require("node:path");
|
|
|
|
const rootPath = path.resolve(`${__dirname}/../`);
|
|
const Log = require(`${rootPath}/js/logger.js`);
|
|
const os = require("node:os");
|
|
const fs = require("node:fs");
|
|
const si = require("systeminformation");
|
|
|
|
const modulePositions = []; // will get list from index.html
|
|
const regionRegEx = /"region ([^"]*)/i;
|
|
const indexFileName = "index.html";
|
|
const discoveredPositionsJSFilename = "js/positions.js";
|
|
|
|
module.exports = {
|
|
|
|
async logSystemInformation (mirrorVersion) {
|
|
try {
|
|
const system = await si.system();
|
|
const osInfo = await si.osInfo();
|
|
const versions = await si.versions();
|
|
|
|
const usedNodeVersion = process.version.replace("v", "");
|
|
const installedNodeVersion = versions.node;
|
|
const totalRam = (os.totalmem() / 1024 / 1024).toFixed(2);
|
|
const freeRam = (os.freemem() / 1024 / 1024).toFixed(2);
|
|
const usedRam = ((os.totalmem() - os.freemem()) / 1024 / 1024).toFixed(2);
|
|
|
|
let systemDataString = [
|
|
"\n#### System Information ####",
|
|
`- SYSTEM: manufacturer: ${system.manufacturer}; model: ${system.model}; virtual: ${system.virtual}; MM: ${mirrorVersion}`,
|
|
`- OS: platform: ${osInfo.platform}; distro: ${osInfo.distro}; release: ${osInfo.release}; arch: ${osInfo.arch}; kernel: ${versions.kernel}`,
|
|
`- VERSIONS: electron: ${process.versions.electron}; used node: ${usedNodeVersion}; installed node: ${installedNodeVersion}; npm: ${versions.npm}; pm2: ${versions.pm2}`,
|
|
`- ENV: XDG_SESSION_TYPE: ${process.env.XDG_SESSION_TYPE}; MM_CONFIG_FILE: ${process.env.MM_CONFIG_FILE}`,
|
|
` WAYLAND_DISPLAY: ${process.env.WAYLAND_DISPLAY}; DISPLAY: ${process.env.DISPLAY}; ELECTRON_ENABLE_GPU: ${process.env.ELECTRON_ENABLE_GPU}`,
|
|
`- RAM: total: ${totalRam} MB; free: ${freeRam} MB; used: ${usedRam} MB`,
|
|
`- OTHERS: uptime: ${Math.floor(os.uptime() / 60)} minutes; timeZone: ${Intl.DateTimeFormat().resolvedOptions().timeZone}`
|
|
].join("\n");
|
|
Log.info(systemDataString);
|
|
|
|
// Return is currently only for jest
|
|
return systemDataString;
|
|
} catch (error) {
|
|
Log.error(error);
|
|
}
|
|
},
|
|
|
|
// return all available module positions
|
|
getAvailableModulePositions () {
|
|
return modulePositions;
|
|
},
|
|
|
|
// return if position is on modulePositions Array (true/false)
|
|
moduleHasValidPosition (position) {
|
|
if (this.getAvailableModulePositions().indexOf(position) === -1) return false;
|
|
return true;
|
|
},
|
|
|
|
getModulePositions () {
|
|
// if not already discovered
|
|
if (modulePositions.length === 0) {
|
|
// get the lines of the index.html
|
|
const lines = fs.readFileSync(indexFileName).toString().split("\n");
|
|
// loop thru the lines
|
|
lines.forEach((line) => {
|
|
// run the regex on each line
|
|
const results = regionRegEx.exec(line);
|
|
// if the regex returned something
|
|
if (results && results.length > 0) {
|
|
// get the position parts and replace space with underscore
|
|
const positionName = results[1].replace(" ", "_");
|
|
// add it to the list
|
|
modulePositions.push(positionName);
|
|
}
|
|
});
|
|
try {
|
|
fs.writeFileSync(discoveredPositionsJSFilename, `const modulePositions=${JSON.stringify(modulePositions)}`);
|
|
}
|
|
catch (error) {
|
|
Log.error("unable to write js/positions.js with the discovered module positions\nmake the MagicMirror/js folder writeable by the user starting MagicMirror");
|
|
}
|
|
}
|
|
// return the list to the caller
|
|
return modulePositions;
|
|
}
|
|
};
|