Skip to content

Commit 4d84379

Browse files
committed
v6.5.0 - Improved error reporting
If the user throws plain objects or other non-error values, SC will now give as much detail as possible about the object/value.
1 parent cdc261f commit 4d84379

File tree

4 files changed

+51
-49
lines changed

4 files changed

+51
-49
lines changed

index.js

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var InvalidActionError = scErrors.InvalidActionError;
1717
var BrokerError = scErrors.BrokerError;
1818
var ProcessExitError = scErrors.ProcessExitError;
1919
var UnknownError = scErrors.UnknownError;
20+
var decycle = scErrors.decycle;
2021

2122
var socketClusterSingleton = null;
2223

@@ -380,34 +381,56 @@ SocketCluster.prototype._logObject = function (obj, objType, time) {
380381
this.log(logMessage, time);
381382
};
382383

383-
SocketCluster.prototype.errorHandler = function (err, origin) {
384-
if (!(err instanceof Object)) {
385-
// If a string (or null...)
384+
SocketCluster.prototype._convertValueToUnknownError = function (err, origin) {
385+
if (err && typeof err == 'object') {
386+
// If err has neither a stack or message property
387+
// then the error message will be the JSON stringified object.
388+
if (!err.message && !err.stack) {
389+
var errorMessage;
390+
try {
391+
errorMessage = JSON.stringify(err);
392+
} catch (e1) {
393+
try {
394+
errorMessage = JSON.stringify(decycle(err));
395+
} catch (e2) {
396+
errorMessage = '[object NotJSON]';
397+
}
398+
}
399+
err = new UnknownError(errorMessage);
400+
}
401+
} else if (typeof err == 'function') {
402+
var errorMessage = '[function ' + (err.name || 'anonymous') + ']';
403+
err = new UnknownError(errorMessage);
404+
} else if (typeof err == 'undefined') {
405+
err = new UnknownError('undefined');
406+
} else if (err === null) {
407+
err = new UnknownError('null');
408+
} else {
409+
// For number, string and boolean types.
386410
err = new UnknownError(err);
387-
} else if (err.stack == null) {
388-
err.stack = err.message;
389411
}
412+
413+
err.origin = origin;
414+
err.time = Date.now();
415+
416+
return err;
417+
};
418+
419+
SocketCluster.prototype.errorHandler = function (err, origin) {
420+
err = this._convertValueToUnknownError(err, origin);
421+
390422
var annotation = this._errorAnnotations[err.code];
391-
if (annotation) {
423+
if (annotation && err.stack) {
392424
err.stack += '\n ' + this.colorText('!!', 'red') + ' ' + annotation;
393425
}
394426

395-
err.origin = origin;
396-
err.time = Date.now();
397427
this.emit(this.EVENT_FAIL, err);
398428

399429
this._logObject(err, 'Error');
400430
};
401431

402432
SocketCluster.prototype.warningHandler = function (warning, origin) {
403-
if (!(warning instanceof Object)) {
404-
// If a string (or null...)
405-
warning = new UnknownError(warning);
406-
} else if (warning.stack == null) {
407-
warning.stack = warning.message;
408-
}
409-
warning.origin = origin;
410-
warning.time = Date.now();
433+
warning = this._convertValueToUnknownError(warning, origin);
411434

412435
this.emit(this.EVENT_WARNING, warning);
413436

@@ -416,26 +439,6 @@ SocketCluster.prototype.warningHandler = function (warning, origin) {
416439
}
417440
};
418441

419-
SocketCluster.prototype.triggerInfo = function (info, origin) {
420-
if (this._active) {
421-
if (!(origin instanceof Object)) {
422-
origin = {
423-
type: origin
424-
};
425-
}
426-
var infoData = {
427-
origin: origin,
428-
message: info,
429-
time: Date.now()
430-
};
431-
this.emit(this.EVENT_WARNING, infoData);
432-
433-
if (this.options.logLevel > 0) {
434-
this._logObject(infoData, 'Info', infoData.time)
435-
}
436-
}
437-
};
438-
439442
SocketCluster.prototype._workerClusterErrorHandler = function (pid, error) {
440443
this.errorHandler(error, {
441444
type: 'WorkerCluster',
@@ -613,11 +616,10 @@ SocketCluster.prototype._launchWorkerCluster = function () {
613616

614617
this.workerCluster.on('message', function workerHandler(m) {
615618
if (m.type == 'error') {
616-
var error = scErrors.hydrateError(m.data.error);
617619
if (m.data.workerPid) {
618-
self._workerErrorHandler(m.data.workerPid, error);
620+
self._workerErrorHandler(m.data.workerPid, m.data.error);
619621
} else {
620-
self._workerClusterErrorHandler(m.data.pid, error);
622+
self._workerClusterErrorHandler(m.data.pid, m.data.error);
621623
}
622624
} else if (m.type == 'warning') {
623625
var warning = scErrors.hydrateError(m.data.error);

kubernetes/socketcluster-deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ spec:
1111
spec:
1212
containers:
1313
- name: socketcluster
14-
image: socketcluster/socketcluster:v6.4.0
14+
image: socketcluster/socketcluster:v6.5.0
1515
ports:
1616
- containerPort: 8000
1717
env:

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "socketcluster",
33
"description": "SocketCluster - A Highly parallelized WebSocket server cluster to make the most of multi-core machines/instances.",
4-
"version": "6.4.0",
4+
"version": "6.5.0",
55
"homepage": "http://socketcluster.io",
66
"contributors": [
77
{
@@ -19,12 +19,12 @@
1919
"fs-extra": "2.0.0",
2020
"inquirer": "1.1.3",
2121
"minimist": "1.1.0",
22-
"sc-auth": "~4.1.0",
22+
"sc-auth": "~4.1.1",
2323
"sc-broker-cluster": "~4.0.3",
2424
"sc-domain": "~1.0.1",
2525
"sc-emitter": "~1.1.0",
26-
"sc-errors": "~1.3.0",
27-
"socketcluster-server": "~6.1.0",
26+
"sc-errors": "~1.3.3",
27+
"socketcluster-server": "~6.2.0",
2828
"uid-number": "0.0.5",
2929
"uuid": "3.0.1"
3030
},
@@ -41,6 +41,6 @@
4141
"license": "MIT",
4242
"readmeFilename": "README.md",
4343
"devDependencies": {
44-
"socketcluster-client": "~6.2.2"
44+
"socketcluster-client": "~6.3.0"
4545
}
4646
}

sample/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
"express": "4.14.0",
1414
"minimist": "1.1.0",
1515
"morgan": "1.7.0",
16-
"sc-errors": "~1.3.2",
16+
"sc-errors": "~1.3.3",
1717
"sc-framework-health-check": "~1.0.0",
1818
"sc-hot-reboot": "~1.0.0",
19-
"scc-broker-client": "~1.3.0",
19+
"scc-broker-client": "~1.4.0",
2020
"serve-static": "1.11.2",
21-
"socketcluster": "~6.4.0",
22-
"socketcluster-client": "~6.2.2"
21+
"socketcluster": "~6.5.0",
22+
"socketcluster-client": "~6.3.0"
2323
},
2424
"keywords": [
2525
"websocket",

0 commit comments

Comments
 (0)