-
Notifications
You must be signed in to change notification settings - Fork 125
/
Copy patherror_reporter.js
142 lines (124 loc) · 3.98 KB
/
error_reporter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
var child_process = require('child_process');
var colors = require('colors/safe');
var errorReporter = function errorReporter(exception /*: PgError */, showError = true) {
setTimeout(function () {
// skip errors while developing
if (process.env.NW_DEV == "true") {
logger.info("Skip error reporting");
logger.info(exception.stack);
try {
console.log("Skip error reporting");
console.error(exception.stack);
} catch (e) {
logger.info(e.message);
}
return;
}
if (
exception.message.includes("server closed the connection unexpectedly") ||
exception.message.includes("Unable to set non-blocking to true") ||
exception.message.includes("Client has encountered a connection error and is not queryable") ||
exception.message.includes("Connection terminated")
) {
console.log("Skip error reporting");
console.error(exception.stack);
return;
}
console.log("Sending error report");
console.error(exception);
logger.info(`Sending error report ~ ${exception}`);
if (exception.client) {
exception.client = "CUT!";
}
var Raven = require('raven');
Raven.config('https://07fa68e1ac02484e9370fc9f0b77631f:[email protected]/143647', {
logger: 'default',
allowSecretKey: true,
transport: {
send(client, message, headers, eventId, cb) {
setTimeout(() => {
try {
var net = require('electron').remote.net;
var request = net.request({
method: 'POST',
protocol: 'https:',
hostname: client.dsn.host,
path: client.dsn.path + 'api/' + client.dsn.project_id + '/store/',
headers: headers,
port: 443
});
request.on('error', error => {
console.error(error);
});
request.on('abort', error => {
console.error('abort', error);
});
request.on('response', res => {
console.log('Error reported');
});
request.end(message);
} catch (error) {
console.error(error);
}
}, 100);
}
}
}).install();
var electron = require('electron');
var electronVersion;
try {
electronVersion = electron.remote.process.versions.electron;
} catch (e) {
console.error(e.stack);
}
var extra /*: any */ = {
user: global.process.env.USER,
pwd: global.process.env.PWD,
arch: global.process.arch,
version_el: electronVersion
};
try {
extra.version = electron.remote.app.getVersion();
exception.message = `${extra.version} - ${exception.message}`;
} catch (error) {
console.log("Error generatign error report");
console.error(error);
}
try {
extra.version_pg = global.Connection.instances.map(function (i) { return i._serverVersion; }).join(";; ");
} catch (error) {
console.log("Error generatign error report");
console.error(error);
}
var sender = function () {
Raven.setContext({user: extra});
Raven.captureException(exception);
};
if (process.platform == "darwin") {
var exec = child_process.exec;
exec('sw_vers -productVersion', function (err, stdout) {
extra.system = stdout;
sender();
});
} else {
sender();
}
});
if (global.logger) {
global.logger.error('error: ', colors.red(exception.message || exception.toString()));
global.logger.info(exception.stack);
} else {
console.log('error: ', exception);
console.log(exception.stack);
}
if (showError) {
if (exception instanceof Error) {
window.alert(exception.message + "\n" + exception.stack);
} else {
window.alert(exception);
}
}
return false;
};
process.on("uncaughtException", errorReporter);
module.exports = errorReporter;