Skip to content

Commit c0cd356

Browse files
authored
Merge pull request #1467 from Hirobreak/logger
Logger and Reporting all uncaught exceptions
2 parents 996894b + 814ef4a commit c0cd356

File tree

18 files changed

+291
-24
lines changed

18 files changed

+291
-24
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ CriptextEncrypt.db-wal
1818
recovery.key
1919
umzug.json
2020
migration.json
21+
criptext-*.log
22+
*-audit.json
2123

2224
# production
2325
*_interface/build

electron_app/electron-starter.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ require('./src/ipc/client.js');
2828
const ipcUtils = require('./src/ipc/utils.js');
2929
const { checkDatabaseStep, deleteNotEncryptDatabase } = require('./src/utils/dataBaseUtils');
3030
const { APP_DOMAIN } = require('./src/utils/const');
31+
const logger = require('./src/logger');
3132

3233
globalManager.forcequit.set(false);
3334

@@ -41,6 +42,16 @@ const oldVersionUrl = () => {
4142
}
4243
}
4344

45+
process.on('uncaughtException', err => {
46+
logger.error('Uncaught Error: ', err);
47+
closeAlice();
48+
process.exit(1);
49+
})
50+
51+
process.on('unhandledRejection', err => {
52+
logger.error('Unhandled Rejection: ', err);
53+
})
54+
4455
async function initApp() {
4556
const step = await checkDatabaseStep(dbManager);
4657
switch (step) {
@@ -65,15 +76,15 @@ async function initApp() {
6576
closeAlice();
6677
app.relaunch();
6778
app.exit(0);
68-
console.log(ex);
79+
logger.error(ex)
6980
}
7081
break;
7182
}
7283
case 3:{
7384
try {
7485
await upStepNewUser();
7586
} catch (ex) {
76-
console.log(ex);
87+
logger.error(ex)
7788
}
7889
break;
7990
}

electron_app/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "criptext",
3-
"version": "0.29.0",
3+
"version": "0.29.1",
44
"author": {
55
"name": "Criptext Inc",
66
"email": "[email protected]",
@@ -178,7 +178,9 @@
178178
"sqlite3": "^4.1.0",
179179
"umzug": "^2.2.0",
180180
"unused-filename": "^2.1.0",
181-
"websocket": "^1.0.28"
181+
"websocket": "^1.0.28",
182+
"winston": "^3.2.1",
183+
"winston-daily-rotate-file": "^4.4.2"
182184
},
183185
"jest": {
184186
"verbose": true,

electron_app/src/aliceManager.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const http = require('http');
77
const ps = require('ps-node');
88
const globalManager = require('./globalManager');
99
const { encryptTextSimple } = require('./filescript/helpers');
10+
const logger = require('./logger');
1011

1112
const ALICE_PROJECT_NAME = 'criptext-encryption-service';
1213

@@ -127,13 +128,13 @@ const handShake = ({ alicePath, dbpath, myPort, logspath, onAppOpened }) => {
127128
'Service Error',
128129
`Unable to initialize encryption service. ${data}`
129130
);
130-
console.log(`-----alice-----\nError:\n${data}\n -----end-----`);
131+
logger.error(`-----alice-----\nError:\n${data}\n -----end-----`);
131132
if (onAppOpened) app.quit();
132133
});
133134
alice.stdout.setEncoding('utf8');
134135
alice.stdout.on('data', async data => {
135136
if (!passwordRegex.test(data)) {
136-
console.log(`-----alice-----\n${data}\n -----end-----`);
137+
logger.debug(`-----alice-----\n${data}\n -----end-----`);
137138
return;
138139
}
139140
token = data.replace(passwordRegex, '').replace(/\r?\n|\r/g, '');
@@ -145,17 +146,17 @@ const handShake = ({ alicePath, dbpath, myPort, logspath, onAppOpened }) => {
145146
}
146147
});
147148
alice.on('exit', (code, signal) => {
148-
console.log(`alice exited with code ${code} and signal ${signal}`);
149+
logger.error(`alice exited with code ${code} and signal ${signal}`);
150+
closeAlice();
149151
if (signal !== 'SIGTERM' && signal !== 'SIGABRT') {
150-
closeAlice();
151152
reject();
152153
return;
153154
}
154155
reject({ retry: true });
155156
});
156157

157158
alice.on('close', code => {
158-
console.log(`alice closed with code ${code}`);
159+
logger.info(`alice closed with code ${code}`);
159160
closeAlice();
160161
reject();
161162
});
@@ -208,20 +209,20 @@ const isReachable = () => {
208209
return;
209210
}
210211
const req = http.request(options, res => {
211-
console.log(`statusCode: ${res.statusCode}`);
212+
logger.info(`statusCode: ${res.statusCode}`);
212213
resolve(res.statusCode === 200);
213214
});
214215

215216
req.on('error', error => {
216-
console.log(error);
217+
logger.error(error);
217218
resolve(false);
218219
});
219220
try {
220221
const data = await encryptTextSimple(getPassword(), token);
221222
req.write(JSON.stringify(data));
222223
req.end();
223224
} catch (ex) {
224-
console.log(ex);
225+
logger.error(ex);
225226
resolve(false);
226227
}
227228
});
@@ -252,11 +253,10 @@ const cleanAliceRemenants = () => {
252253
return new Promise(resolve => {
253254
ps.lookup({ command: ALICE_PROJECT_NAME }, async (err, list) => {
254255
if (err) {
255-
console.log(err);
256+
logger.error(err);
256257
resolve();
257258
return;
258259
}
259-
console.log(list);
260260
await Promise.all(
261261
list.map(p => {
262262
return killPs(p.pid);

electron_app/src/database/DBEmanager.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const { setLanguage } = require('../lang');
3535
const systemLabels = require('../systemLabels');
3636
const myAccount = require('../Account');
3737
const mySettings = require('../Settings');
38+
const logger = require('../logger');
3839

3940
const EMAIL_CONTACT_TYPE_FROM = 'from';
4041

@@ -449,7 +450,9 @@ const deleteEmailByKeys = async ({ accountId, keys }) => {
449450
transaction: trx
450451
});
451452
})
452-
.catch(ex => console.log(ex)); //To do
453+
.catch(ex => {
454+
logger.error(ex);
455+
});
453456
});
454457
};
455458

electron_app/src/database/DBEmigrations/20200123161254-multipleAccounts.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const {
88
File
99
} = require('../DBEmodel');
1010

11+
const logger = require('../../logger');
12+
1113
const TABLE_ACCOUNT_ID_INDEX = '_accountid_index';
1214
const tables = [
1315
Table.EMAIL,
@@ -456,7 +458,7 @@ module.exports = {
456458

457459
await transaction.commit();
458460
} catch (ex) {
459-
console.log(ex);
461+
logger.error(ex);
460462
await transaction.rollback();
461463
throw new Error(ex.toString());
462464
}

electron_app/src/ipc/nucleus.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,7 @@ const { addEventError, NUCLEUS_EVENTS } = require('./../nucleusManager');
44
ipc.answerRenderer('nucleups-report-content-unencrypted', error =>
55
addEventError(NUCLEUS_EVENTS.REPORT_CONTENT_UNENCRYPTED, error)
66
);
7+
8+
ipc.answerRenderer('nucleups-report-uncaught-error', error =>
9+
addEventError(NUCLEUS_EVENTS.UNCAUGHT_ERROR, error)
10+
);

electron_app/src/logger.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const winston = require('winston');
2+
const { combine, timestamp, json } = winston.format;
3+
const WinstonRotation = require('winston-daily-rotate-file');
4+
const path = require('path');
5+
const { app } = require('electron');
6+
7+
const getLogsPath = node_env => {
8+
switch (node_env) {
9+
case 'test': {
10+
return './src/__integrations__/alice_logs.txt';
11+
}
12+
case 'development': {
13+
return path.normalize(__dirname).replace('/app.asar', '');
14+
}
15+
default: {
16+
const userDataPath = app.getPath('userData');
17+
return path.normalize(userDataPath).replace('/app.asar', '');
18+
}
19+
}
20+
};
21+
22+
const rotationOpts = {
23+
filename: 'criptext-app.log',
24+
dirname: getLogsPath(process.env.NODE_ENV),
25+
datePattern: 'YYYY-MM-DD-HH',
26+
frequency: '48h',
27+
maxSize: '20m',
28+
maxFiles: '2'
29+
};
30+
31+
const logger = winston.createLogger({
32+
level: 'debug',
33+
format: combine(timestamp(), json()),
34+
transports: [
35+
new winston.transports.Console(),
36+
new WinstonRotation(rotationOpts)
37+
]
38+
});
39+
40+
module.exports = logger;

electron_app/src/nucleusManager.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ const NUCLEUS_EVENTS = {
3535
MAILBOX_OPENED: 'MAILBOX_OPENED',
3636
NEW_USER: 'NEW_USER',
3737
POST_PEER_EVENT: 'POST_PEER_EVENT',
38-
REPORT_CONTENT_UNENCRYPTED: 'REPORT_CONTENT_UNENCRYPTED'
38+
REPORT_CONTENT_UNENCRYPTED: 'REPORT_CONTENT_UNENCRYPTED',
39+
UNCAUGHT_ERROR: 'UNCAUGHT_ERROR'
3940
};
4041

4142
module.exports = {

electron_app/src/windows/loading.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ const create = () => {
3030
transparent: true,
3131
center: true,
3232
webPreferences: {
33-
nodeIntegration: true
33+
nodeIntegration: true,
34+
devTools: true
3435
}
3536
});
3637
loadingWindow.loadURL(loadingUrl);

0 commit comments

Comments
 (0)