瀏覽代碼

Business errors differenciated from technical errors in the Lambda runner

Gaël Métais 4 年之前
父節點
當前提交
163eef58c2
共有 5 個文件被更改,包括 45 次插入16 次删除
  1. 5 1
      .dockerignore
  2. 29 5
      bin/lambda.js
  3. 2 2
      lib/index.js
  4. 7 7
      lib/screenshotHandler.js
  5. 2 1
      lib/server/controllers/awsApiController.js

+ 5 - 1
.dockerignore

@@ -1 +1,5 @@
-node_modules/
+node_modules/
+results/
+test/
+doc/
+front/

+ 29 - 5
bin/lambda.js

@@ -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
+        };
+    })
+    
+    .fail(error => {
+        console.log(`Run failed with error: ${error}`);
+        return {
+            status: 'failed',
+            id,
+            bucket,
+            errorMessage: error
+        };
+    });
     
-    return {status: 'processed', id, bucket, keyPrefix};
+    return result;
 }
 
-module.exports = {runner}
+module.exports = {runner};

+ 2 - 2
lib/index.js

@@ -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
lib/screenshotHandler.js

@@ -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
lib/server/controllers/awsApiController.js

@@ -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!');