Pārlūkot izejas kodu

Merge pull request #28 from gmetais/api-too-fast

Api responding too fast
Gaël Métais 10 gadi atpakaļ
vecāks
revīzija
35d42b9ec5

+ 1 - 1
.travis.yml

@@ -1,6 +1,6 @@
 language: node_js
 node_js:
-    - "0.10"
+    - "0.10.33"
 before_install:
     - "npm install -g grunt-cli"
     - "npm install -g phantomjs"

+ 16 - 7
lib/server/controllers/apiController.js

@@ -52,16 +52,25 @@ var ApiController = function(app) {
                 .then(function(data) {
 
                     debug('Success');
-                    runsDatastore.markAsComplete(run.runId);
+                    
 
                     // Save result in datastore
                     data.runId = run.runId;
-                    resultsDatastore.saveResult(data);
-
-                    // Send result if the user was waiting
-                    if (run.params.waitForResponse) {
-                        res.redirect(302, '/api/results/' + run.runId);
-                    }
+                    resultsDatastore.saveResult(data)
+                        .then(function() {
+
+                            runsDatastore.markAsComplete(run.runId);
+                            
+                            // Send result if the user was waiting
+                            if (run.params.waitForResponse) {
+                                res.redirect(302, '/api/results/' + run.runId);
+                            }
+                            
+                        })
+                        .fail(function(err) {
+                            debug('Saving results to resultsDatastore failed:');
+                            debug(err);
+                        });
 
                 }).fail(function(err) {
                     

+ 11 - 1
lib/server/datastores/resultsDatastore.js

@@ -2,6 +2,7 @@ var fs          = require('fs');
 var rimraf      = require('rimraf');
 var path        = require('path');
 var Q           = require('q');
+var debug       = require('debug')('ylt:resultsDatastore');
 
 
 function ResultsDatastore() {
@@ -13,12 +14,14 @@ function ResultsDatastore() {
 
 
     this.saveResult = function(testResults) {
-
         var promise = createResultFolder(testResults.runId);
 
+        debug('Saving results to disk...');
+
         promise.then(function() {
 
             var resultFilePath = path.join(resultsDir, testResults.runId, resultFileName);
+            debug('Destination file is %s', resultFilePath);
             
             return Q.nfcall(fs.writeFile, resultFilePath, JSON.stringify(testResults, null, 2));
         });
@@ -30,6 +33,8 @@ function ResultsDatastore() {
     this.getResult = function(runId) {
 
         var resultFilePath = path.join(resultsDir, runId, resultFileName);
+
+        debug('Reading results (runID = %s) from disk...', runId);
         
         return Q.nfcall(fs.readFile, resultFilePath, {encoding: 'utf8'}).then(function(data) {
             return JSON.parse(data);
@@ -40,6 +45,8 @@ function ResultsDatastore() {
     this.deleteResult = function(runId) {
         var folder = path.join(resultsDir, runId);
 
+        debug('Deleting results (runID = %s) from disk...', runId);
+
         return Q.nfcall(rimraf, folder);
     };
 
@@ -48,6 +55,8 @@ function ResultsDatastore() {
     function createResultFolder(folderName) {
         var folder = path.join(resultsDir, folderName);
 
+        debug('Creating the folder %s', folderName);
+
         return createGlobalFolder().then(function() {
             return Q.nfcall(fs.mkdir, folder);
         });
@@ -62,6 +71,7 @@ function ResultsDatastore() {
             if (exists) {
                 deferred.resolve();
             } else {
+                debug('Creating the global results folder', resultsDir);
                 fs.mkdir(resultsDir, function(err) {
                     if (err) {
                         deferred.reject(err);