summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2018-06-11 13:18:32 +0200
committerAndrej Mihajlov <and@mullvad.net>2018-06-12 15:33:31 +0200
commitb9c06082c17b7e289a79c349c6cfb4ab053d9f78 (patch)
tree355d6b83bb12734b8878f46ef4b01ade9f251d87
parentb31272a1895d3b8df05ea899fa454ee2fb208c39 (diff)
downloadmullvadvpn-b9c06082c17b7e289a79c349c6cfb4ab053d9f78.tar.xz
mullvadvpn-b9c06082c17b7e289a79c349c6cfb4ab053d9f78.zip
Move problem report handling from renderer to main
-rw-r--r--app/lib/problem-report.js71
-rw-r--r--app/main.js63
2 files changed, 72 insertions, 62 deletions
diff --git a/app/lib/problem-report.js b/app/lib/problem-report.js
index 32acb32b93..df302bd908 100644
--- a/app/lib/problem-report.js
+++ b/app/lib/problem-report.js
@@ -1,71 +1,42 @@
// @flow
-import { resolveBin } from './proc';
-import { execFile } from 'child_process';
import { ipcRenderer } from 'electron';
-import { log } from './platform';
import uuid from 'uuid';
const collectProblemReport = (toRedact: Array<string>): Promise<string> => {
return new Promise((resolve, reject) => {
const requestId = uuid.v4();
- let responseListener: Function;
-
- const removeResponseListener = () => {
- ipcRenderer.removeListener('collect-logs-reply', responseListener);
- };
-
- // timeout after 10 seconds if no ipc response received
- const requestTimeout = setTimeout(() => {
- removeResponseListener();
- log.error('Timed out when collecting a problem report');
- reject(new Error('Timed out'));
- }, 10000);
-
- responseListener = (_event, id, error, reportPath) => {
- if (id !== requestId) {
- return;
- }
-
- clearTimeout(requestTimeout);
- removeResponseListener();
-
- if (error) {
- log.error(`Cannot collect a problem report: ${error.err}`);
- log.error(`Stdout: ${error.stdout}`);
- reject(error);
- } else {
- resolve(reportPath);
+ const responseListener = (_event, responseId, result) => {
+ if (responseId === requestId) {
+ ipcRenderer.removeListener('collect-logs-reply', responseListener);
+ if (result.success) {
+ resolve(result.reportPath);
+ } else {
+ reject(new Error(result.error));
+ }
}
};
- // add ipc response listener
ipcRenderer.on('collect-logs-reply', responseListener);
-
- // send ipc request
ipcRenderer.send('collect-logs', requestId, toRedact);
});
};
-const sendProblemReport = (email: string, message: string, savedReport: string) => {
- const args = ['send', '--email', email, '--message', message, '--report', savedReport];
-
- const binPath = resolveBin('problem-report');
-
+const sendProblemReport = (email: string, message: string, savedReport: string): Promise<void> => {
return new Promise((resolve, reject) => {
- execFile(binPath, args, { windowsHide: true }, (err, stdout, stderr) => {
- if (err) {
- reject({ err, stdout, stderr });
- } else {
- log.debug('Report sent');
- resolve();
+ const requestId = uuid.v4();
+ const responseListener = (_event, responseId, result) => {
+ if (requestId === responseId) {
+ ipcRenderer.removeListener('send-problem-report-reply', responseListener);
+ if (result.success) {
+ resolve();
+ } else {
+ reject(new Error(result.error));
+ }
}
- });
- }).catch((e) => {
- const { err, stdout } = e;
- log.error('Failed sending problem report', err);
- log.error(' stdout: ' + stdout);
+ };
- throw e;
+ ipcRenderer.on('send-problem-report-reply', responseListener);
+ ipcRenderer.send('send-problem-report', requestId, email, message, savedReport);
});
};
diff --git a/app/main.js b/app/main.js
index f9707a3e4c..2ac7f0a8d1 100644
--- a/app/main.js
+++ b/app/main.js
@@ -171,27 +171,66 @@ const ApplicationMain = {
}
});
- ipcMain.on('collect-logs', (event, id, toRedact) => {
+ ipcMain.on('collect-logs', (event, requestId, toRedact) => {
const reportPath = path.join(app.getPath('temp'), uuid.v4() + '.log');
-
- const binPath = resolveBin('problem-report');
- let args = ['collect', '--output', reportPath];
-
+ const executable = resolveBin('problem-report');
+ const args = ['collect', '--output', reportPath];
if (toRedact.length > 0) {
- args = args.concat(['--redact', ...toRedact, '--']);
+ args.push('--redact', ...toRedact, '--');
}
+ args.push(this._logFilePath);
- args = args.concat([this._logFilePath]);
+ execFile(executable, args, { windowsHide: true }, (error, stdout, stderr) => {
+ if (error) {
+ log.error(
+ `Failed to collect a problem report: ${error.message}
+ Stdout: ${stdout.toString()}
+ Stderr: ${stderr.toString()}`,
+ );
- execFile(binPath, args, { windowsHide: true }, (err) => {
- if (err) {
- event.sender.send('collect-logs-reply', id, err);
+ event.sender.send('collect-logs-reply', requestId, {
+ success: false,
+ error: error.message,
+ });
} else {
- log.debug('Report written to', reportPath);
- event.sender.send('collect-logs-reply', id, null, reportPath);
+ log.debug(`Problem report was written to ${reportPath}`);
+
+ event.sender.send('collect-logs-reply', requestId, {
+ success: true,
+ reportPath,
+ });
}
});
});
+
+ ipcMain.on(
+ 'send-problem-report',
+ (event, requestId, email: string, message: string, savedReport: string) => {
+ const executable = resolveBin('problem-report');
+ const args = ['send', '--email', email, '--message', message, '--report', savedReport];
+
+ execFile(executable, args, { windowsHide: true }, (error, stdout, stderr) => {
+ if (error) {
+ log.error(
+ `Failed to send a problem report: ${error.message}
+ Stdout: ${stdout.toString()}
+ Stderr: ${stderr.toString()}`,
+ );
+
+ event.sender.send('send-problem-report-reply', requestId, {
+ success: false,
+ error: error.message,
+ });
+ } else {
+ log.info('Problem report was sent.');
+
+ event.sender.send('send-problem-report-reply', requestId, {
+ success: true,
+ });
+ }
+ });
+ },
+ );
},
_getRpcAddressFilePath() {