mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-07-29 10:15:47 +02:00
feat: enhance logger by displaying systeminfo at start of the app
This commit is contained in:
6
main.js
6
main.js
@@ -37,7 +37,7 @@ app.setAppUserModelId("com.masteracnolo.freedomloader");
|
||||
/**
|
||||
* Load the app dependencies for hardware choice
|
||||
*/
|
||||
const { logger, logSessionStart, logSessionEnd } = require("./server/logger");
|
||||
const { logger, logSessionStart, logSessionEnd, logDir } = require("./server/logger");
|
||||
const { configFeatures } = require("./config");
|
||||
|
||||
/**
|
||||
@@ -79,7 +79,7 @@ const { updateYtDlp } = require("./app/ytDlpUpdater");
|
||||
const { createMainWindow, getMainWindow } = require("./app/windowManager");
|
||||
const { registerIpcHandlers } = require("./app/ipcHandlers");
|
||||
const { createSplashWindow, closeSplashWindow, setSplashProgress } = require("./app/splashManager");
|
||||
const { userThemesPath, initUserThemes, isWindows, validateBinaries } = require("./server/helpers/path.helpers");
|
||||
const { userThemesPath, initUserThemes, isWindows, validateBinaries, defaultDownloadFolder } = require("./server/helpers/path.helpers");
|
||||
|
||||
|
||||
/**
|
||||
@@ -99,7 +99,7 @@ app.on("second-instance", () => {
|
||||
});
|
||||
|
||||
app.whenReady().then(async () => {
|
||||
logSessionStart();
|
||||
logSessionStart(logDir, defaultDownloadFolder);
|
||||
|
||||
createSplashWindow();
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ const path = require("path");
|
||||
const os = require("os");
|
||||
const config = require("../config");
|
||||
const {isWindows} = require("./helpers/path.helpers");
|
||||
const { logSystemInfo } = require("./sysinfo");
|
||||
|
||||
// Logs folder in Windows
|
||||
const logDir = isWindows ? path.join(os.homedir(), "AppData", "Local", "FreedomLoader", "logs") : path.join(process.env.XDG_DATA_HOME || path.join(os.homedir(), ".local", "share"), "FreedomLoader", "logs");
|
||||
@@ -52,9 +53,10 @@ const logger = createLogger({
|
||||
/**
|
||||
* Start Log Session
|
||||
*/
|
||||
function logSessionStart() {
|
||||
function logSessionStart(logDir, downloadPath) {
|
||||
logger.info(`--- Starting session: ${new Date().toISOString()} ---`);
|
||||
logger.info(`Application Version: ${config.version}`)
|
||||
logSystemInfo(logger, logDir, downloadPath)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
142
server/sysinfo.js
Normal file
142
server/sysinfo.js
Normal file
@@ -0,0 +1,142 @@
|
||||
const os = require("os");
|
||||
const fs = require("fs");
|
||||
const { execSync } = require("child_process");
|
||||
const { app } = require("electron");
|
||||
|
||||
/**
|
||||
* Reads /etc/os-release to get the Linux distribution name
|
||||
*/
|
||||
function getLinuxDistro() {
|
||||
try {
|
||||
const content = fs.readFileSync("/etc/os-release", "utf-8");
|
||||
const pretty = content.match(/^PRETTY_NAME="?(.+?)"?$/m);
|
||||
if (pretty) return pretty[1];
|
||||
const name = content.match(/^NAME="?(.+?)"?$/m);
|
||||
return name ? name[1] : "Unknown Linux";
|
||||
} catch {
|
||||
return "Unknown Linux";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the package-type file written by electron-builder
|
||||
* to determine how the app was distributed (rpm, snap, AppImage, deb...)
|
||||
*/
|
||||
function getPackageType() {
|
||||
try {
|
||||
const pkgTypePath = require("path").join(process.resourcesPath, "package-type");
|
||||
if (fs.existsSync(pkgTypePath)) {
|
||||
return fs.readFileSync(pkgTypePath, "utf-8").trim();
|
||||
}
|
||||
} catch { /* ignore */ }
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if Firefox is installed on the current platform
|
||||
*/
|
||||
function detectFirefox() {
|
||||
const platform = process.platform;
|
||||
|
||||
if (platform === "win32") {
|
||||
const paths = [
|
||||
"C:\\Program Files\\Mozilla Firefox\\firefox.exe",
|
||||
"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
|
||||
`${process.env.LOCALAPPDATA}\\Mozilla Firefox\\firefox.exe`,
|
||||
];
|
||||
return paths.some(p => fs.existsSync(p));
|
||||
}
|
||||
|
||||
if (platform === "linux") {
|
||||
const paths = [
|
||||
"/usr/bin/firefox",
|
||||
"/usr/bin/firefox-esr",
|
||||
"/usr/local/bin/firefox",
|
||||
"/snap/bin/firefox",
|
||||
"/var/lib/flatpak/exports/bin/org.mozilla.firefox",
|
||||
`${os.homedir()}/.local/share/flatpak/exports/bin/org.mozilla.firefox`,
|
||||
];
|
||||
if (paths.some(p => fs.existsSync(p))) return true;
|
||||
try { execSync("which firefox", { stdio: "ignore" }); return true; } catch { return false; }
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the system info object logged at startup
|
||||
*
|
||||
* @param {string} logDir - path to the log directory
|
||||
* @param {string} downloadPath - current configured download path
|
||||
*/
|
||||
function getSystemInfo(logDir, downloadPath) {
|
||||
const platform = process.platform;
|
||||
const cpus = os.cpus();
|
||||
const totalMem = (os.totalmem() / 1024 / 1024 / 1024).toFixed(1);
|
||||
const freeMem = (os.freemem() / 1024 / 1024 / 1024).toFixed(1);
|
||||
|
||||
let platformLabel;
|
||||
if (platform === "win32") {
|
||||
platformLabel = `Windows (${os.release()})`;
|
||||
} else if (platform === "linux") {
|
||||
platformLabel = `Linux — ${getLinuxDistro()}`;
|
||||
} else {
|
||||
platformLabel = `${platform} ${os.release()} (unsupported)`;
|
||||
}
|
||||
|
||||
const info = {
|
||||
"Platform": platformLabel,
|
||||
"Architecture": os.arch(),
|
||||
"CPU": cpus.length ? `${cpus[0].model.trim()} (${cpus.length} cores)` : "Unknown",
|
||||
"Memory": `${freeMem} GB free / ${totalMem} GB total`,
|
||||
"Locale": app.getLocale(),
|
||||
"Electron": process.versions.electron,
|
||||
"Node": process.versions.node,
|
||||
"Packaged": String(app.isPackaged),
|
||||
"Package type": app.isPackaged ? getPackageType() : "dev",
|
||||
"Firefox present": detectFirefox() ? "Yes" : "No — cookie features unavailable",
|
||||
"Log directory": logDir,
|
||||
"Download path": downloadPath,
|
||||
};
|
||||
|
||||
// Linux-specific extras
|
||||
if (platform === "linux") {
|
||||
const sessionType = process.env.XDG_SESSION_TYPE || "unknown";
|
||||
const waylandDisplay = process.env.WAYLAND_DISPLAY;
|
||||
const x11Display = process.env.DISPLAY;
|
||||
|
||||
info["Display server"] = waylandDisplay
|
||||
? `Wayland (${waylandDisplay})`
|
||||
: x11Display
|
||||
? `X11 (${x11Display})`
|
||||
: sessionType !== "unknown"
|
||||
? sessionType
|
||||
: "unknown";
|
||||
|
||||
info["Desktop env"] = process.env.XDG_CURRENT_DESKTOP || process.env.DESKTOP_SESSION || "unknown";
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs system info at application startup
|
||||
*
|
||||
* @param {object} logger - winston logger instance
|
||||
* @param {string} logDir - path to the log directory
|
||||
* @param {string} downloadPath - current configured download path
|
||||
*/
|
||||
function logSystemInfo(logger, logDir, downloadPath) {
|
||||
const info = getSystemInfo(logDir, downloadPath);
|
||||
const maxKeyLen = Math.max(...Object.keys(info).map(k => k.length));
|
||||
|
||||
logger.info("=".repeat(60));
|
||||
logger.info("SYSTEM INFO");
|
||||
logger.info("=".repeat(60));
|
||||
for (const [key, val] of Object.entries(info)) {
|
||||
logger.info(` ${key.padEnd(maxKeyLen)} : ${val}`);
|
||||
}
|
||||
logger.info("=".repeat(60));
|
||||
}
|
||||
|
||||
module.exports = { logSystemInfo };
|
||||
Reference in New Issue
Block a user