Skip to content

Commit

Permalink
⚛️📝 Log only using electron-log (#96)
Browse files Browse the repository at this point in the history
* ⚛️📝 Log only using electron-log

* v3.3.20
  • Loading branch information
Gilad-Gur-Andelman authored Aug 5, 2024
1 parent c7e45d0 commit 9f0572a
Show file tree
Hide file tree
Showing 18 changed files with 130 additions and 80 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "desktop-app",
"productName": "Loadmill",
"version": "3.3.19",
"version": "3.3.20",
"description": "The Loadmill desktop app",
"author": {
"name": "Loadmill Ltd.",
Expand Down
3 changes: 3 additions & 0 deletions src/downloads/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { app } from 'electron';

export const DOWNLOADS_PATH = app.getPath('downloads');
19 changes: 19 additions & 0 deletions src/log/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import path from 'path';

import { app } from 'electron';

export const MAIN_LOG_FILENAME = 'main.log';

let LOGS_PATH: string;
let MAIN_LOG_FILE_PATH: string;

if (app && app.getPath) {
LOGS_PATH = app.getPath('logs');
MAIN_LOG_FILE_PATH = path.join(LOGS_PATH, MAIN_LOG_FILENAME);
} else {
// app is undefined in renderer process
LOGS_PATH = '';
MAIN_LOG_FILE_PATH = MAIN_LOG_FILENAME;
}

export { LOGS_PATH, MAIN_LOG_FILE_PATH };
19 changes: 19 additions & 0 deletions src/log/download-logs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import path from 'path';

import { shell } from 'electron';

import { DOWNLOADS_PATH } from '../downloads/constants';
import { copyFile } from '../main-process/copy-file';

import {
MAIN_LOG_FILE_PATH,
} from './constants';

const DESKTOP_APP_MAIN_LOG_FILENAME = 'loadmill-desktop-app.log';
export const APP_LOG_SAVE_PATH = path.join(DOWNLOADS_PATH, DESKTOP_APP_MAIN_LOG_FILENAME);

export const downloadMainLog = (): void => {
copyFile(MAIN_LOG_FILE_PATH, APP_LOG_SAVE_PATH, () => {
shell.showItemInFolder(APP_LOG_SAVE_PATH);
});
};
30 changes: 28 additions & 2 deletions src/log/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,37 @@
import path from 'path';

import log from 'electron-log';

const setLogLevels = () => {
import {
LOGS_PATH,
} from './constants';

const setMainLogLevels = () => {
log.transports.file.level = 'info';
log.transports.console.level = 'silly';
// Now log.debug Will show in console mode (dev) but not in file mode (prod)
};

setLogLevels();
setMainLogLevels();

log.info('Main logger created. Writing to file: ', log.transports.file.getFile().path);

export const createLogger = (
logId: string,
filePath: string,
fileLevel: log.LevelOption = 'info',
consoleLevel: log.LevelOption = 'silly',
): Logger => {
const logger = log.create(logId) as Logger;
logger.transports.file.resolvePath = () => path.join(LOGS_PATH, filePath);
logger.transports.file.level = fileLevel;
logger.transports.console.level = consoleLevel;
logger.filePath = logger.transports.file.getFile().path;
return logger;
};

export type Logger = log.ElectronLog & {
filePath: string;
};

export default log;
11 changes: 8 additions & 3 deletions src/main-process/agent-handlers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { ChildProcessWithoutNullStreams, fork } from 'child_process';
import path from 'path';

import '@loadmill/agent/dist/cli';
import { app } from 'electron';

import { sendFromMainToAgentRenderer } from '../inter-process-communication/main-to-agent';
import { sendToRenderer } from '../inter-process-communication/main-to-renderer';
Expand All @@ -17,13 +19,12 @@ import {
STOP_AGENT,
} from '../universal/constants';

import { appendToAgentLog } from './agent-log-file';
import { agentLogger } from './agent/agent-logger';
import {
isAgentConnected,
refreshConnectedStatus,
} from './connected-status';
import {
LOADMILL_AGENT_PATH,
LOADMILL_AGENT_SERVER_URL,
LOADMILL_AGENT_VERBOSE,
NODE_OPTIONS,
Expand Down Expand Up @@ -64,6 +65,10 @@ const initAgent = () => {
}
};

const PACKED_RELATIVE_PATH = path.join(app.getAppPath(), '.webpack', 'main');
const LOADMILL_AGENT = 'loadmill-agent';
const LOADMILL_AGENT_PATH = path.join(PACKED_RELATIVE_PATH, LOADMILL_AGENT);

const createAgentProcess = (): ChildProcessWithoutNullStreams => {
log.info('Creating agent process with env vars', {
LOADMILL_AGENT_SERVER_URL,
Expand Down Expand Up @@ -127,7 +132,7 @@ const handleAgentStd = async (
await handleInvalidToken(text);
refreshConnectedStatus({ text });
sendFromMainToAgentRenderer({ data: { text }, type });
appendToAgentLog(text);
agentLogger.info(text);
};

const stopAgent = (): void => {
Expand Down
15 changes: 0 additions & 15 deletions src/main-process/agent-log-file.ts

This file was deleted.

18 changes: 18 additions & 0 deletions src/main-process/agent/agent-logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import log, { createLogger } from '../../log';

const AGENT_LOG_FILENAME = 'agent.log';
const AGENT_LOGGER_NAME = 'agent-logger';

export const agentLogger = createLogger(
AGENT_LOGGER_NAME,
AGENT_LOG_FILENAME,
'info',
false,
);

log.info(
'Agent logger created. Writing to file: ',
agentLogger.filePath,
);

export const agentLoggerFilePath = agentLogger.filePath;
16 changes: 10 additions & 6 deletions src/main-process/agent/download-agent-log.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import path from 'path';

import { shell } from 'electron';

import { DOWNLOADS_PATH } from '../../downloads/constants';
import {
DOWNLOAD_AGENT_LOG,
} from '../../universal/constants';
import {
AGENT_LOG_SAVE_PATH,
FULL_AGENT_LOG_PATH,
} from '../constants';
import { copyFile } from '../copy-file';
import { subscribeToMainProcessMessage } from '../main-events';

import { agentLoggerFilePath } from './agent-logger';

const AGENT_LOG_FILENAME = 'loadmill-private-agent.log';
export const agentLogDownloadLocation = path.join(DOWNLOADS_PATH, AGENT_LOG_FILENAME);

export const subscribeToDownloadAgentLog = (): void => {
subscribeToMainProcessMessage(DOWNLOAD_AGENT_LOG, downloadAgentLog);
};

const downloadAgentLog = (): void => {
copyFile(FULL_AGENT_LOG_PATH, AGENT_LOG_SAVE_PATH, () => {
shell.showItemInFolder(AGENT_LOG_SAVE_PATH);
copyFile(agentLoggerFilePath, agentLogDownloadLocation, () => {
shell.showItemInFolder(agentLogDownloadLocation);
});
};
24 changes: 1 addition & 23 deletions src/main-process/constants.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

import { config } from 'dotenv';
import { app } from 'electron';

config();

Expand All @@ -8,25 +8,3 @@ export const LOADMILL_AGENT_VERBOSE = process.env.LOADMILL_AGENT_VERBOSE;
export const LOADMILL_WEB_APP_ORIGIN = process.env.LOADMILL_WEB_APP_ORIGIN || 'https://app.loadmill.com';
export const NODE_TLS_REJECT_UNAUTHORIZED = process.env.NODE_TLS_REJECT_UNAUTHORIZED || '0';
export const NODE_OPTIONS = process.env.NODE_OPTIONS || '--http-parser=legacy --max-http-header-size=20000';

export const DOWNLOADS_PATH = app.getPath('downloads');
export const USER_DATA_PATH = app.getPath('userData');
export const LOGS_PATH = app.getPath('logs');

export const PACKED_RELATIVE_PATH = app.getAppPath() + '/.webpack/main/';
export const LOADMILL_AGENT = 'loadmill-agent';
export const LOADMILL_AGENT_PATH = PACKED_RELATIVE_PATH + LOADMILL_AGENT;

export const PROXY_CERTIFICATES_DIR_PATH = USER_DATA_PATH + '/proxy/';
export const PROXY_CERTIFICATE_PATH = PROXY_CERTIFICATES_DIR_PATH + 'certs/ca.pem';
export const PROXY_CERTIFICATE_SAVE_PATH = DOWNLOADS_PATH + '/loadmill-proxy-certificate.pem';

export const AGENT_LOG_FILENAME = 'agent.log';
export const FULL_AGENT_LOG_PATH = `${USER_DATA_PATH}/${AGENT_LOG_FILENAME}`;
export const AGENT_LOG_SAVE_PATH = DOWNLOADS_PATH + '/loadmill-private-agent.log';

export const APP_LOG_FILENAME = 'main.log';
export const FULL_APP_LOG_PATH = `${LOGS_PATH}/${APP_LOG_FILENAME}`;
export const APP_LOG_SAVE_PATH = DOWNLOADS_PATH + '/loadmill-app.log';

export const LOADMILL_DESKTOP_APP_PROTOCOL = 'loadmill-desktop-app';
3 changes: 2 additions & 1 deletion src/main-process/deep-link.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import {
import log from '../log';

import { handleAuthEvent } from './authentication';
import { LOADMILL_DESKTOP_APP_PROTOCOL } from './constants';

const LOADMILL_DESKTOP_APP_PROTOCOL = 'loadmill-desktop-app';

enum HOST {
AUTH = 'auth',
Expand Down
13 changes: 0 additions & 13 deletions src/main-process/download-logs.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/main-process/menu.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { app, Menu } from 'electron';

import { downloadMainLog } from '../log/download-logs';
import { READY } from '../universal/constants';

import { showAuthTokenInput } from './authentication';
import { downloadAppLog } from './download-logs';
import { checkForUpdates } from './updates';

import { switchToAgentView } from '.';
Expand Down Expand Up @@ -110,7 +110,7 @@ const template = [
role: 'help',
submenu: [
{
click: () => downloadAppLog(),
click: () => downloadMainLog(),
label: 'Download App Logs',
},
{
Expand Down
5 changes: 5 additions & 0 deletions src/main-process/proxy/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import path from 'path';

import { app } from 'electron';

export const PROXY_CERTIFICATES_DIR_PATH = path.join(app.getPath('userData'), 'proxy');
18 changes: 12 additions & 6 deletions src/main-process/proxy/download-certificate.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
import path from 'path';

import { shell } from 'electron';

import { DOWNLOADS_PATH } from '../../downloads/constants';
import {
sendFromProxyToRenderer,
} from '../../inter-process-communication/proxy-to-render';
import {
DOWNLOAD_CERTIFICATE,
DOWNLOADED_CERTIFICATE_SUCCESS,
} from '../../universal/constants';
import {
PROXY_CERTIFICATE_PATH,
PROXY_CERTIFICATE_SAVE_PATH,
} from '../constants';
import { copyFile } from '../copy-file';
import { subscribeToMainProcessMessage } from '../main-events';

import {
PROXY_CERTIFICATES_DIR_PATH,
} from './constants';

export const proxyCertificatePath = path.join(PROXY_CERTIFICATES_DIR_PATH, 'certs', 'ca.pem');
export const proxyCertificateDownloadLocation = path.join(DOWNLOADS_PATH, 'loadmill-proxy-certificate.pem');

export const subscribeToDownloadCertificate = (): void => {
subscribeToMainProcessMessage(DOWNLOAD_CERTIFICATE, downloadCertificate);
};

const downloadCertificate = (): void => {
copyFile(PROXY_CERTIFICATE_PATH, PROXY_CERTIFICATE_SAVE_PATH, () => {
copyFile(proxyCertificatePath, proxyCertificateDownloadLocation, () => {
sendFromProxyToRenderer({ type: DOWNLOADED_CERTIFICATE_SUCCESS });
shell.showItemInFolder(PROXY_CERTIFICATE_SAVE_PATH);
shell.showItemInFolder(proxyCertificateDownloadLocation);
});
};
2 changes: 1 addition & 1 deletion src/main-process/proxy/export-as-har.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import fs from 'fs';

import { shell } from 'electron';

import { DOWNLOADS_PATH } from '../../downloads/constants';
import { sendFromProxyToRenderer } from '../../inter-process-communication/proxy-to-render';
import log from '../../log';
import { proxyEntriesToHar } from '../../proxy-to-har/proxy-to-har';
import { MainMessage } from '../../types/messaging';
import { EXPORT_AS_HAR, EXPORTED_AS_HAR_SUCCESS } from '../../universal/constants';
import { toPrettyJsonString } from '../../universal/utils';
import { DOWNLOADS_PATH } from '../constants';
import { subscribeToMainProcessMessage } from '../main-events';

import { getEntries } from './entries';
Expand Down
2 changes: 1 addition & 1 deletion src/main-process/proxy/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import log from '../../log';
import { Header } from '../../types/header';
import { ProxyEntry, ProxyRequest, ProxyResponse } from '../../types/proxy-entry';
import { PROXY } from '../../universal/constants';
import { PROXY_CERTIFICATES_DIR_PATH } from '../constants';

import { subscribeToClearEntriesEvents } from './clear-entries-handlers';
import { PROXY_CERTIFICATES_DIR_PATH } from './constants';
import { getEncoding } from './encoding';
import { addEntry } from './entries';
import { subscribeToExportAsHar } from './export-as-har';
Expand Down
6 changes: 0 additions & 6 deletions src/renderer-process/download.ts

This file was deleted.

0 comments on commit 9f0572a

Please sign in to comment.