Business errors differenciated from technical errors in the Lambda runner

This commit is contained in:
Gaël Métais
2021-04-11 13:14:35 +01:00
parent 201bf75bf7
commit 163eef58c2
5 changed files with 45 additions and 16 deletions
+5 -1
View File
@@ -1 +1,5 @@
node_modules/
node_modules/
results/
test/
doc/
front/
+29 -5
View File
@@ -6,18 +6,42 @@ const ylt = require('..');
async function runner({id, url, options = {}}, context) {
console.log(`Processing run #${id} on ${url}`);
// AWS S3 bucket and path
const bucket = process.env.RESULT_BUCKET_NAME;
const keyPrefix = `results/${id}`;
// Function that can save any file on S3 (JSON, screenshot,...)
const saveFile = async (path, content) => s3.putObject({Bucket: bucket, Key: `${keyPrefix}/${path}`, Body: content})
.promise();
const results = JSON.stringify(await ylt(url, {...options, saveFile}));
results.runId = id;
// Let's launch ylt
const result = await ylt(url, {...options, saveScreenshotFn: saveFile})
await saveFile('results.json', results);
.then(async data => {
console.log(`Run succeeded`);
data.runId = id;
await saveFile('results.json', JSON.stringify(data));
return {
status: 'processed',
id,
bucket,
keyPrefix
};
})
return {status: 'processed', id, bucket, keyPrefix};
.fail(error => {
console.log(`Run failed with error: ${error}`);
return {
status: 'failed',
id,
bucket,
errorMessage: error
};
});
return result;
}
module.exports = {runner}
module.exports = {runner};
+2 -2
View File
@@ -30,7 +30,7 @@ var yellowLabTools = function(url, options) {
.then(function(data) {
// If a screenshot saveFunction was provided in the options
if (typeof options.saveFile === 'function') {
if (typeof options.saveScreenshotFn === 'function') {
debug('Now optimizing screenshot...');
// Remove uneeded temp screenshot path
@@ -42,7 +42,7 @@ var yellowLabTools = function(url, options) {
.then(function(screenshotBuffer) {
debug('Screenshot optimized, now saving...');
return options.saveFile('screenshot.jpg', screenshotBuffer);
return options.saveScreenshotFn('screenshot.jpg', screenshotBuffer);
})
.then(function(response) {
+7 -7
View File
@@ -94,15 +94,15 @@ var screenshotHandler = function() {
this.deleteTmpFile = function(tmpFilePath) {
var deferred = Q.defer();
fs.unlink(this.getTmpFileRelativePath(), function (err) {
if (err) {
debug('Screenshot temporary file not found, could not be deleted. But it is not a problem.');
} else {
debug('Screenshot temporary file deleted.');
}
//fs.unlink(this.getTmpFileRelativePath(), function (err) {
// if (err) {
// debug('Screenshot temporary file not found, could not be deleted. But it is not a problem.');
// } else {
// debug('Screenshot temporary file deleted.');
// }
deferred.resolve();
});
//});
return deferred.promise;
};
+2 -1
View File
@@ -102,7 +102,8 @@ var ApiController = function(app) {
if (response.StatusCode === 200 && response.Payload && response.Payload !== 'null') {
const payload = JSON.parse(response.Payload);
if (payload.errorType) {
if (payload.status === 'failed') {
debug('Failed with error %s', payload.errorMessage);
runsDatastore.markAsFailed(run.runId, payload.errorMessage);
} else {
debug('Success!');