resultsDatastore.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. var fs = require('fs');
  2. var rimraf = require('rimraf');
  3. var path = require('path');
  4. var Q = require('q');
  5. var debug = require('debug')('ylt:resultsDatastore');
  6. function ResultsDatastore() {
  7. 'use strict';
  8. var resultFileName = 'results.json';
  9. var resultsFolderName = 'results';
  10. var resultsDir = path.join(__dirname, '..', '..', '..', resultsFolderName);
  11. this.saveResult = function(testResults) {
  12. var promise = createResultFolder(testResults.runId);
  13. debug('Saving results to disk...');
  14. promise.then(function() {
  15. var resultFilePath = path.join(resultsDir, testResults.runId, resultFileName);
  16. debug('Destination file is %s', resultFilePath);
  17. return Q.nfcall(fs.writeFile, resultFilePath, JSON.stringify(testResults, null, 2));
  18. });
  19. return promise;
  20. };
  21. this.getResult = function(runId) {
  22. var resultFilePath = path.join(resultsDir, runId, resultFileName);
  23. debug('Reading results (runID = %s) from disk...', runId);
  24. return Q.nfcall(fs.readFile, resultFilePath, {encoding: 'utf8'}).then(function(data) {
  25. return JSON.parse(data);
  26. });
  27. };
  28. this.deleteResult = function(runId) {
  29. var folder = path.join(resultsDir, runId);
  30. debug('Deleting results (runID = %s) from disk...', runId);
  31. return Q.nfcall(rimraf, folder);
  32. };
  33. // The folder /results/folderName/
  34. function createResultFolder(folderName) {
  35. var folder = path.join(resultsDir, folderName);
  36. debug('Creating the folder %s', folderName);
  37. return createGlobalFolder().then(function() {
  38. return Q.nfcall(fs.mkdir, folder);
  39. });
  40. }
  41. // The folder /results/
  42. function createGlobalFolder() {
  43. var deferred = Q.defer();
  44. // Create the results folder if it doesn't exist
  45. fs.exists(resultsDir, function(exists) {
  46. if (exists) {
  47. deferred.resolve();
  48. } else {
  49. debug('Creating the global results folder', resultsDir);
  50. fs.mkdir(resultsDir, function(err) {
  51. if (err) {
  52. deferred.reject(err);
  53. } else {
  54. deferred.resolve();
  55. }
  56. });
  57. }
  58. });
  59. return deferred.promise;
  60. }
  61. }
  62. module.exports = ResultsDatastore;