forked from exceptionless/Exceptionless.JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexceptionless.node.ts
More file actions
152 lines (129 loc) · 5.66 KB
/
Copy pathexceptionless.node.ts
File metadata and controls
152 lines (129 loc) · 5.66 KB
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
143
144
145
146
147
148
149
150
151
152
import { Configuration } from './configuration/Configuration';
import { IConfigurationSettings } from './configuration/IConfigurationSettings';
import { SettingsManager } from './configuration/SettingsManager';
import { ILastReferenceIdManager } from './lastReferenceIdManager/ILastReferenceIdManager';
import { DefaultLastReferenceIdManager } from './lastReferenceIdManager/DefaultLastReferenceIdManager';
import { ConsoleLog } from './logging/ConsoleLog';
import { ILog } from './logging/ILog';
import { NullLog } from './logging/NullLog';
import { IClientConfiguration } from './models/IClientConfiguration';
import { IEnvironmentInfo } from './models/IEnvironmentInfo';
import { IError } from './models/IError';
import { IEvent } from './models/IEvent';
import { IInnerError } from './models/IInnerError';
import { IMethod } from './models/IMethod';
import { IModule } from './models/IModule';
import { IParameter } from './models/IParameter';
import { IRequestInfo } from './models/IRequestInfo';
import { IStackFrame } from './models/IStackFrame';
import { IUserDescription } from './models/IUserDescription';
import { IUserInfo } from './models/IUserInfo';
import { ContextData } from './plugins/ContextData';
import { EventPluginContext } from './plugins/EventPluginContext';
import { EventPluginManager } from './plugins/EventPluginManager';
import { IEventPlugin } from './plugins/IEventPlugin';
import { ConfigurationDefaultsPlugin } from './plugins/default/ConfigurationDefaultsPlugin';
import { ErrorPlugin } from './plugins/default/ErrorPlugin';
import { ModuleInfoPlugin } from './plugins/default/ModuleInfoPlugin';
import { ReferenceIdPlugin } from './plugins/default/ReferenceIdPlugin';
import { RequestInfoPlugin } from './plugins/default/RequestInfoPlugin';
import { EnvironmentInfoPlugin } from './plugins/default/EnvironmentInfoPlugin';
import { SubmissionMethodPlugin } from './plugins/default/SubmissionMethodPlugin';
import { DefaultEventQueue } from './queue/DefaultEventQueue';
import { IEventQueue } from './queue/IEventQueue';
import { IEnvironmentInfoCollector } from './services/IEnvironmentInfoCollector';
import { IErrorParser } from './services/IErrorParser';
import { IModuleCollector } from './services/IModuleCollector';
import { IRequestInfoCollector } from './services/IRequestInfoCollector';
import { NodeEnvironmentInfoCollector } from './services/NodeEnvironmentInfoCollector';
import { NodeErrorParser } from './services/NodeErrorParser';
import { NodeExitController } from './services/NodeExitController';
import { NodeRequestInfoCollector } from './services/NodeRequestInfoCollector';
import { InMemoryStorage } from './storage/InMemoryStorage';
import { IStorage } from './storage/IStorage';
import { IStorageItem } from './storage/IStorageItem';
import { DefaultSubmissionClient } from './submission/DefaultSubmissionClient';
import { ISubmissionClient } from './submission/ISubmissionClient';
import { NodeSubmissionClient } from './submission/NodeSubmissionClient';
import { SettingsResponse } from './submission/SettingsResponse';
import { SubmissionResponse } from './submission/SubmissionResponse';
import { EventBuilder } from './EventBuilder';
import { ExceptionlessClient } from './ExceptionlessClient';
import { Utils } from './Utils';
const EXIT:string = 'exit';
const UNCAUGHT_EXCEPTION:string = 'uncaughtException';
var defaults = Configuration.defaults;
defaults.environmentInfoCollector = new NodeEnvironmentInfoCollector();
defaults.errorParser = new NodeErrorParser();
defaults.exitController = new NodeExitController();
defaults.requestInfoCollector = new NodeRequestInfoCollector();
defaults.submissionClient = new NodeSubmissionClient();
function getListenerCount(emitter, event):number {
if (emitter.listenerCount) {
return emitter.listenerCount(event);
}
return require("events").listenerCount(emitter, event);
}
process.on(UNCAUGHT_EXCEPTION, function (error:Error) {
ExceptionlessClient.default.submitUnhandledException(error, UNCAUGHT_EXCEPTION);
/*
* Default Node behavior: If this is the only uncaught-listener, we still exit.
* Discussion: https://nodejs.org/api/process.html#process_event_uncaughtexception
*/
var uncaughtListenerCount = getListenerCount(process, UNCAUGHT_EXCEPTION);
if (uncaughtListenerCount <= 1) {
process.exit(1);
}
});
process.on(EXIT, function (code:number) {
/**
* exit codes: https://nodejs.org/api/process.html#process_event_exit
* From now on, only synchronous code may run. As soon as this method
* ends, the application inevitably will exit.
*/
function getExitCodeReason(code:number): string {
if (code === 1) {
return 'Uncaught Fatal Exception';
}
if (code === 3) {
return 'Internal JavaScript Parse Error';
}
if (code === 4) {
return 'Internal JavaScript Evaluation Failure';
}
if (code === 5) {
return 'Fatal Exception';
}
if (code === 6) {
return 'Non-function Internal Exception Handler ';
}
if (code === 7) {
return 'Internal Exception Handler Run-Time Failure';
}
if (code === 8) {
return 'Uncaught Exception';
}
if (code === 9) {
return 'Invalid Argument';
}
if (code === 10) {
return 'Internal JavaScript Run-Time Failure';
}
if (code === 12) {
return 'Invalid Debug Argument';
}
if (code > 128) {
return 'Signal Exits';
}
return null;
}
var client = ExceptionlessClient.default;
var config = client.config;
var message = getExitCodeReason(code);
if (message !== null) {
client.submitLog(EXIT, message, 'Error')
}
config.exitController.processExit(config);
// Application will now exit.
});
(<any>Error).stackTraceLimit = Infinity;