Categorize timeout errors

This commit is contained in:
Daniel García Aubert
2017-07-31 19:36:07 +02:00
parent 5974413d5c
commit 1fdc0621e7
3 changed files with 69 additions and 10 deletions
+34
View File
@@ -195,6 +195,9 @@ BaseController.prototype.send = function(req, res, body, status, headers) {
BaseController.prototype.sendError = function(req, res, err, label) {
var allErrors = Array.isArray(err) ? err : [err];
allErrors = populateTimeoutErrors(allErrors)
label = label || 'UNKNOWN';
err = allErrors[0] || new Error(label);
allErrors[0] = err;
@@ -310,3 +313,34 @@ function statusFromErrorMessage(errMsg) {
return statusCode;
}
function isRenderTimeoutError (err) {
return err.message && (-1 !== err.message.indexOf('Render timed out'))
}
function isDatasourceTimeoutError (err) {
return err.message && (-1 !== err.message.indexOf('canceling statement due to statement timeout'))
}
function isTimeoutError (err) {
return isRenderTimeoutError(err) || isDatasourceTimeoutError(err);
}
function populateTimeoutErrors (errors) {
return errors.map(function (error) {
if (isTimeoutError(error)) {
error.type = 'limit'
}
if (isRenderTimeoutError(error)) {
error.subtype = 'render'
}
if (isDatasourceTimeoutError(error)) {
error.subtype = 'datasource'
}
return error;
})
}
+13 -5
View File
@@ -87,7 +87,11 @@ describe('user database timeout limit', function () {
assert.deepEqual(dataview, {
errors: ['canceling statement due to statement timeout'],
errors_with_context: [{ type: 'unknown', message: 'canceling statement due to statement timeout' }]
errors_with_context: [{
type: 'limit',
subtype: 'datasource',
message: 'canceling statement due to statement timeout'
}]
});
done();
@@ -127,7 +131,8 @@ describe('user database timeout limit', function () {
assert.deepEqual(timeoutError, {
errors: [ 'TorqueRenderer: canceling statement due to statement timeout' ],
errors_with_context: [{
type: 'layer',
type: 'limit',
subtype: 'datasource',
message: 'TorqueRenderer: canceling statement due to statement timeout',
layer: { id: 'torque-layer0', index: 0, type: 'torque' }
}]
@@ -195,7 +200,8 @@ describe('user database timeout limit', function () {
assert.deepEqual(attributes, {
errors: [ 'TorqueRenderer: canceling statement due to statement timeout' ],
errors_with_context: [{
type: 'unknown',
type: 'limit',
subtype: 'datasource',
message: 'TorqueRenderer: canceling statement due to statement timeout',
}]
});
@@ -241,7 +247,8 @@ describe('user database timeout limit', function () {
assert.deepEqual(timeoutError, {
errors: [ 'canceling statement due to statement timeout' ],
errors_with_context: [{
type: 'layer',
type: 'limit',
subtype: 'datasource',
message: 'canceling statement due to statement timeout',
layer: {
id: 'layer0',
@@ -317,7 +324,8 @@ describe('user database timeout limit', function () {
assert.deepEqual(attributes, {
errors: ['canceling statement due to statement timeout'],
errors_with_context: [{
type: 'unknown',
type: 'limit',
subtype: 'datasource',
message: 'canceling statement due to statement timeout'
}]
});
+22 -5
View File
@@ -97,7 +97,8 @@ describe('user render timeout limit', function () {
assert.deepEqual(timeoutError, {
errors: ["Render timed out"],
errors_with_context: [{
type: "layer",
type: 'limit',
subtype: 'render',
message: "Render timed out",
layer: {
id: "layer0",
@@ -181,10 +182,18 @@ describe('user render timeout limit', function () {
}
};
this.testClient.getTile(0, 0, 0, params, (err, res, tile) => {
this.testClient.getTile(0, 0, 0, params, (err, res, timeoutError) => {
assert.ifError(err);
assert.equal(tile.errors[0], 'Render timed out');
assert.deepEqual(timeoutError, {
errors: ["Render timed out"],
errors_with_context: [{
type: 'limit',
subtype: 'render',
message: "Render timed out"
}]
});
done();
});
});
@@ -223,7 +232,11 @@ describe('user render timeout limit', function () {
assert.deepEqual(tile, {
errors: ['Render timed out'],
errors_with_context: [{ type: 'unknown', message: 'Render timed out' }]
errors_with_context: [{
type: 'limit',
subtype: 'render',
message: 'Render timed out'
}]
});
done();
@@ -264,7 +277,11 @@ describe('user render timeout limit', function () {
assert.deepEqual(tile, {
errors: ['Render timed out'],
errors_with_context: [{ type: 'unknown', message: 'Render timed out' }]
errors_with_context: [{
type: 'limit',
subtype: 'render',
message: 'Render timed out'
}]
});
done();