Merge pull request #105 from ente-io/add-more-logs

Add process stats logs
This commit is contained in:
Abhinav Kumar 2022-11-23 20:25:23 +05:30 committed by GitHub
commit 00bb606c0a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 64 additions and 3 deletions

View file

@ -13,9 +13,12 @@ import {
enableSharedArrayBufferSupport, enableSharedArrayBufferSupport,
handleDockIconHideOnAutoLaunch, handleDockIconHideOnAutoLaunch,
handleUpdates, handleUpdates,
logSystemInfo,
} from './utils/main'; } from './utils/main';
import { initSentry } from './services/sentry'; import { initSentry } from './services/sentry';
import { setupLogging } from './utils/logging'; import { setupLogging } from './utils/logging';
import { isDev } from './utils/common';
import { setupMainProcessStatsLogger } from './utils/processStats';
let mainWindow: BrowserWindow; let mainWindow: BrowserWindow;
@ -42,7 +45,7 @@ setupMainHotReload();
setupNextElectronServe(); setupNextElectronServe();
setupLogging(); setupLogging(isDev);
const gotTheLock = app.requestSingleInstanceLock(); const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) { if (!gotTheLock) {
@ -65,6 +68,8 @@ if (!gotTheLock) {
// initialization and is ready to create browser windows. // initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs. // Some APIs can only be used after this event occurs.
app.on('ready', async () => { app.on('ready', async () => {
logSystemInfo();
setupMainProcessStatsLogger();
initSentry(); initSentry();
mainWindow = await createWindow(); mainWindow = await createWindow();
const tray = setupTrayItem(mainWindow); const tray = setupTrayItem(mainWindow);

View file

@ -50,10 +50,12 @@ import { fixHotReloadNext12 } from './utils/preload';
import { isFolder, getDirFiles } from './api/fs'; import { isFolder, getDirFiles } from './api/fs';
import { convertHEIC } from './api/heicConvert'; import { convertHEIC } from './api/heicConvert';
import { setupLogging } from './utils/logging'; import { setupLogging } from './utils/logging';
import { setupRendererProcessStatsLogger } from './utils/processStats';
import { runFFmpegCmd } from './api/ffmpeg'; import { runFFmpegCmd } from './api/ffmpeg';
fixHotReloadNext12(); fixHotReloadNext12();
setupLogging(); setupLogging();
setupRendererProcessStatsLogger();
const windowObject: any = window; const windowObject: any = window;

View file

@ -8,6 +8,7 @@ import { getSkipAppVersion, setSkipAppVersion } from './userPreference';
import fetch from 'node-fetch'; import fetch from 'node-fetch';
import { isPlatformMac } from '../utils/main'; import { isPlatformMac } from '../utils/main';
import { logErrorSentry } from './sentry'; import { logErrorSentry } from './sentry';
import ElectronLog from 'electron-log';
const FIVE_MIN_IN_MICROSECOND = 5 * 60 * 1000; const FIVE_MIN_IN_MICROSECOND = 5 * 60 * 1000;
@ -83,6 +84,7 @@ export async function checkForUpdateAndNotify(mainWindow: BrowserWindow) {
} }
export function updateAndRestart() { export function updateAndRestart() {
ElectronLog.log('user quit the app');
setIsAppQuitting(true); setIsAppQuitting(true);
autoUpdater.quitAndInstall(); autoUpdater.quitAndInstall();
} }

View file

@ -1,10 +1,12 @@
import log from 'electron-log'; import log from 'electron-log';
import { LOG_FILENAME, MAX_LOG_SIZE } from '../config'; import { LOG_FILENAME, MAX_LOG_SIZE } from '../config';
export function setupLogging() { export function setupLogging(isDev?: boolean) {
log.transports.file.fileName = LOG_FILENAME; log.transports.file.fileName = LOG_FILENAME;
log.transports.file.maxSize = MAX_LOG_SIZE; log.transports.file.maxSize = MAX_LOG_SIZE;
log.transports.console.level = false; if (!isDev) {
log.transports.console.level = false;
}
log.transports.file.format = log.transports.file.format =
'[{y}-{m}-{d}T{h}:{i}:{s}{z}] [{level}]{scope} {text}'; '[{y}-{m}-{d}T{h}:{i}:{s}{z}] [{level}]{scope} {text}';
} }

View file

@ -12,6 +12,8 @@ import {
checkForUpdateAndNotify, checkForUpdateAndNotify,
setupAutoUpdater, setupAutoUpdater,
} from '../services/appUpdater'; } from '../services/appUpdater';
import ElectronLog from 'electron-log';
import os from 'os';
export function handleUpdates(mainWindow: BrowserWindow) { export function handleUpdates(mainWindow: BrowserWindow) {
if (!isDev) { if (!isDev) {
@ -102,3 +104,10 @@ export async function handleDockIconHideOnAutoLaunch() {
export function enableSharedArrayBufferSupport() { export function enableSharedArrayBufferSupport() {
app.commandLine.appendSwitch('enable-features', 'SharedArrayBuffer'); app.commandLine.appendSwitch('enable-features', 'SharedArrayBuffer');
} }
export function logSystemInfo() {
const systemVersion = process.getSystemVersion();
const osName = process.platform;
const osRelease = os.release();
ElectronLog.info({ osName, osRelease, systemVersion });
}

View file

@ -12,6 +12,7 @@ import {
import { setIsAppQuitting } from '../main'; import { setIsAppQuitting } from '../main';
import autoLauncher from '../services/autoLauncher'; import autoLauncher from '../services/autoLauncher';
import { isPlatformMac } from './main'; import { isPlatformMac } from './main';
import ElectronLog from 'electron-log';
export function buildContextMenu( export function buildContextMenu(
mainWindow: BrowserWindow, mainWindow: BrowserWindow,
@ -76,6 +77,7 @@ export function buildContextMenu(
{ {
label: 'Quit ente', label: 'Quit ente',
click: function () { click: function () {
ElectronLog.log('user quit the app');
setIsAppQuitting(true); setIsAppQuitting(true);
app.quit(); app.quit();
}, },

39
src/utils/processStats.ts Normal file
View file

@ -0,0 +1,39 @@
import ElectronLog from 'electron-log';
import { webFrame } from 'electron/renderer';
const FIVE_MINUTES_IN_MICROSECONDS = 30 * 1000;
async function logMainProcessStats() {
const systemMemoryInfo = process.getSystemMemoryInfo();
const cpuUsage = process.getCPUUsage();
const processMemoryInfo = await process.getProcessMemoryInfo();
const heapStatistics = process.getHeapStatistics();
ElectronLog.log('main process stats', {
systemMemoryInfo,
cpuUsage,
processMemoryInfo,
heapStatistics,
});
}
async function logRendererProcessStats() {
const blinkMemoryInfo = process.getBlinkMemoryInfo();
const heapStatistics = process.getHeapStatistics();
const processMemoryInfo = process.getProcessMemoryInfo();
const webFrameResourceUsage = webFrame.getResourceUsage();
ElectronLog.log('renderer process stats', {
blinkMemoryInfo,
heapStatistics,
processMemoryInfo,
webFrameResourceUsage,
});
}
export function setupMainProcessStatsLogger() {
setInterval(logMainProcessStats, FIVE_MINUTES_IN_MICROSECONDS);
}
export function setupRendererProcessStatsLogger() {
setInterval(logRendererProcessStats, FIVE_MINUTES_IN_MICROSECONDS);
}