Categorize timeout errors
This commit is contained in:
@@ -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;
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
}]
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user